Make memcache_add_talloc NULL out the source pointer
authorVolker Lendecke <vl@samba.org>
Fri, 14 Nov 2008 12:42:54 +0000 (13:42 +0100)
committerVolker Lendecke <vl@samba.org>
Fri, 14 Nov 2008 19:27:46 +0000 (20:27 +0100)
This is an orthogonality measure to make clear this pointer now belongs to the
cache.
(cherry picked from commit e6080c6e87d6fe3995b121a772bf3f6343fa666f)

source3/auth/token_util.c
source3/lib/memcache.c
source3/lib/util_pw.c
source3/passdb/pdb_interface.c
source3/torture/torture.c

index 6c00aa0943c1fc8b6f6ceb20f73ab56ca07ac8f4..28d6601b5f3eaed8a05063bd009266439c9d7e73 100644 (file)
@@ -77,7 +77,7 @@ bool nt_token_check_domain_rid( NT_USER_TOKEN *token, uint32 rid )
 
 NT_USER_TOKEN *get_root_nt_token( void )
 {
-       struct nt_user_token *token = NULL;
+       struct nt_user_token *token, *for_cache;
        DOM_SID u_sid, g_sid;
        struct passwd *pw;
        void *cache_data;
@@ -107,9 +107,11 @@ NT_USER_TOKEN *get_root_nt_token( void )
 
        token->privileges = se_disk_operators;
 
+       for_cache = token;
+
        memcache_add_talloc(
                NULL, SINGLETON_CACHE_TALLOC,
-               data_blob_string_const_null("root_nt_token"), token);
+               data_blob_string_const_null("root_nt_token"), &for_cache);
 
        return token;
 }
index 1951b4abf907288b1329437253b83fc377d3985a..eaff15deda30b744d573f5c4006ad80070e47aa7 100644 (file)
@@ -340,9 +340,19 @@ void memcache_add(struct memcache *cache, enum memcache_number n,
 }
 
 void memcache_add_talloc(struct memcache *cache, enum memcache_number n,
-                        DATA_BLOB key, void *ptr)
+                        DATA_BLOB key, void **pptr)
 {
-       void *p = talloc_move(cache, &ptr);
+       void **ptr = (void **)pptr;
+       void *p;
+
+       if (cache == NULL) {
+               cache = global_cache;
+       }
+       if (cache == NULL) {
+               return;
+       }
+
+       p = talloc_move(cache, ptr);
        memcache_add(cache, n, key, data_blob_const(&p, sizeof(p)));
 }
 
index c9b26f0a4fd282a6ec270c935d9bd2dcf458b5ec..b0baa12c3e54f123e9299454e75e644ddc1d892e 100644 (file)
@@ -63,7 +63,7 @@ struct passwd *getpwnam_alloc(TALLOC_CTX *mem_ctx, const char *name)
        }
 
        memcache_add_talloc(NULL, GETPWNAM_CACHE,
-                           data_blob_string_const_null(name), for_cache);
+                           data_blob_string_const_null(name), &for_cache);
 
        return tcopy_passwd(mem_ctx, pw);
 }
index 6fe105854f17c23bdf16201f80b85ad3120492b8..5a79f09db063e9b667673730c53c1db173d0c685 100644 (file)
@@ -207,28 +207,28 @@ static struct pdb_methods *pdb_get_methods(void)
 bool pdb_getsampwnam(struct samu *sam_acct, const char *username) 
 {
        struct pdb_methods *pdb = pdb_get_methods();
-       struct samu *cache_copy;
+       struct samu *for_cache;
        const struct dom_sid *user_sid;
 
        if (!NT_STATUS_IS_OK(pdb->getsampwnam(pdb, sam_acct, username))) {
                return False;
        }
 
-       cache_copy = samu_new(NULL);
-       if (cache_copy == NULL) {
+       for_cache = samu_new(NULL);
+       if (for_cache == NULL) {
                return False;
        }
 
-       if (!pdb_copy_sam_account(cache_copy, sam_acct)) {
-               TALLOC_FREE(cache_copy);
+       if (!pdb_copy_sam_account(for_cache, sam_acct)) {
+               TALLOC_FREE(for_cache);
                return False;
        }
 
-       user_sid = pdb_get_user_sid(cache_copy);
+       user_sid = pdb_get_user_sid(for_cache);
 
        memcache_add_talloc(NULL, PDB_GETPWSID_CACHE,
                            data_blob_const(user_sid, sizeof(*user_sid)),
-                           cache_copy);
+                           &for_cache);
 
        return True;
 }
index 762ea214d10ba777754053d3498c083c5122075e..603426b67cffad9d30385b8cece278095960e66e 100644 (file)
@@ -5356,11 +5356,11 @@ static bool run_local_memcache(int dummy)
        str2 = talloc_strdup(mem_ctx, "string2");
 
        memcache_add_talloc(cache, SINGLETON_CACHE_TALLOC,
-                           data_blob_string_const("torture"), str1);
+                           data_blob_string_const("torture"), &str1);
        size1 = talloc_total_size(cache);
 
        memcache_add_talloc(cache, SINGLETON_CACHE_TALLOC,
-                           data_blob_string_const("torture"), str2);
+                           data_blob_string_const("torture"), &str2);
        size2 = talloc_total_size(cache);
 
        printf("size1=%d, size2=%d\n", (int)size1, (int)size2);