summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2008-11-14 13:42:54 +0100
committerVolker Lendecke <vl@samba.org>2008-11-14 20:27:46 +0100
commit3c98d5bd987358b1cbeb81fa8db37b97492cf0cc (patch)
tree0058070438a145865d8b2cf80697bd3d2a1d999a
parentf50ad767505cc8847f5f574767b664b57326e468 (diff)
downloadsamba-3c98d5bd987358b1cbeb81fa8db37b97492cf0cc.tar.gz
samba-3c98d5bd987358b1cbeb81fa8db37b97492cf0cc.tar.bz2
samba-3c98d5bd987358b1cbeb81fa8db37b97492cf0cc.zip
Make memcache_add_talloc NULL out the source pointer
This is an orthogonality measure to make clear this pointer now belongs to the cache. (cherry picked from commit e6080c6e87d6fe3995b121a772bf3f6343fa666f)
-rw-r--r--source3/auth/token_util.c6
-rw-r--r--source3/lib/memcache.c14
-rw-r--r--source3/lib/util_pw.c2
-rw-r--r--source3/passdb/pdb_interface.c14
-rw-r--r--source3/torture/torture.c4
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);