diff options
-rw-r--r-- | source3/auth/token_util.c | 6 | ||||
-rw-r--r-- | source3/lib/memcache.c | 14 | ||||
-rw-r--r-- | source3/lib/util_pw.c | 2 | ||||
-rw-r--r-- | source3/passdb/pdb_interface.c | 14 | ||||
-rw-r--r-- | source3/torture/torture.c | 4 |
5 files changed, 26 insertions, 14 deletions
diff --git a/source3/auth/token_util.c b/source3/auth/token_util.c index 6c00aa0943..28d6601b5f 100644 --- a/source3/auth/token_util.c +++ b/source3/auth/token_util.c @@ -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; } diff --git a/source3/lib/memcache.c b/source3/lib/memcache.c index 1951b4abf9..eaff15deda 100644 --- a/source3/lib/memcache.c +++ b/source3/lib/memcache.c @@ -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))); } diff --git a/source3/lib/util_pw.c b/source3/lib/util_pw.c index c9b26f0a4f..b0baa12c3e 100644 --- a/source3/lib/util_pw.c +++ b/source3/lib/util_pw.c @@ -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); } diff --git a/source3/passdb/pdb_interface.c b/source3/passdb/pdb_interface.c index 6fe105854f..5a79f09db0 100644 --- a/source3/passdb/pdb_interface.c +++ b/source3/passdb/pdb_interface.c @@ -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; } diff --git a/source3/torture/torture.c b/source3/torture/torture.c index 762ea214d1..603426b67c 100644 --- a/source3/torture/torture.c +++ b/source3/torture/torture.c @@ -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); |