s3-passdb: Remove always the user from getpwsid cache.
authorAndreas Schneider <asn@samba.org>
Sat, 20 Aug 2011 12:48:38 +0000 (14:48 +0200)
committerSimo Sorce <idra@samba.org>
Sun, 21 Aug 2011 13:08:25 +0000 (09:08 -0400)
We should do it always, not only in the pdb_default_delete_user()
function.

Signed-off-by: Simo Sorce <idra@samba.org>
source3/passdb/pdb_interface.c

index 301fda6ffe27b2b71b7543e08a0c8b3adaf2a6e0..a74f1812d9decf7394eb97e46eb671e6e537738c 100644 (file)
@@ -580,8 +580,6 @@ static NTSTATUS pdb_default_delete_user(struct pdb_methods *methods,
        NTSTATUS status;
        fstring username;
 
        NTSTATUS status;
        fstring username;
 
-       memcache_flush(NULL, PDB_GETPWSID_CACHE);
-
        status = methods->delete_sam_account(methods, sam_acct);
        if (!NT_STATUS_IS_OK(status)) {
                return status;
        status = methods->delete_sam_account(methods, sam_acct);
        if (!NT_STATUS_IS_OK(status)) {
                return status;
@@ -610,11 +608,14 @@ NTSTATUS pdb_delete_user(TALLOC_CTX *mem_ctx, struct samu *sam_acct)
        struct pdb_methods *pdb = pdb_get_methods();
        uid_t uid = -1;
        NTSTATUS status;
        struct pdb_methods *pdb = pdb_get_methods();
        uid_t uid = -1;
        NTSTATUS status;
+       const struct dom_sid *user_sid;
        char *msg_data;
 
        char *msg_data;
 
+       user_sid = pdb_get_user_sid(sam_acct);
+
        /* sanity check to make sure we don't delete root */
 
        /* sanity check to make sure we don't delete root */
 
-       if ( !sid_to_uid( pdb_get_user_sid(sam_acct), &uid ) ) {
+       if ( !sid_to_uid(user_sid, &uid ) ) {
                return NT_STATUS_NO_SUCH_USER;
        }
 
                return NT_STATUS_NO_SUCH_USER;
        }
 
@@ -622,6 +623,10 @@ NTSTATUS pdb_delete_user(TALLOC_CTX *mem_ctx, struct samu *sam_acct)
                return NT_STATUS_ACCESS_DENIED;
        }
 
                return NT_STATUS_ACCESS_DENIED;
        }
 
+       memcache_delete(NULL,
+                       PDB_GETPWSID_CACHE,
+                       data_blob_const(user_sid, sizeof(*user_sid)));
+
        status = pdb->delete_user(pdb, mem_ctx, sam_acct);
        if (!NT_STATUS_IS_OK(status)) {
                return status;
        status = pdb->delete_user(pdb, mem_ctx, sam_acct);
        if (!NT_STATUS_IS_OK(status)) {
                return status;