[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Thu Sep 5 12:10:05 MDT 2013


The branch, master has been updated
       via  d3c689f lib: Use "mem_ctx" arg in gencache_get
       via  32037e0 Add a talloc context to sitename_fetch().
       via  6b915bf Add a talloc context to saf_fetch().
       via  8a7246a lib: Add a "mem_ctx" arg to gencache_get (unused so far)
       via  f630360 gencache: Fix SAFE_FREE vs data_blob_free
       via  aaa6a68 torture3: Test getting a blob as a string
       via  1173fed lib: Add "mem_ctx" to gencache_get_data_blob
       via  46131cb torture3: Fix a const warning
      from  6096a59 smbd: Add a paranoia check to oplock_timeout_handler

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit d3c689fc5c80431b7e72150f72465b3d255a6f02
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Sep 4 08:57:59 2013 +0200

    lib: Use "mem_ctx" arg in gencache_get
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Signed-off-by: Jeremy Allison <jra at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Thu Sep  5 20:09:21 CEST 2013 on sn-devel-104

commit 32037e0533f720ebbd3f49c5951c4ef30aac9985
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Sep 4 13:58:18 2013 -0700

    Add a talloc context to sitename_fetch().
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Volker Lendecke <vl at samba.org>

commit 6b915bfd0f4194453c1b01158f2c2772b2a2df2f
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Sep 4 13:39:31 2013 -0700

    Add a talloc context to saf_fetch().
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Volker Lendecke <vl at samba.org>

commit 8a7246ac2c5b27cc29e6ca23c1e2e0f43e298eb5
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Sep 4 08:56:23 2013 +0200

    lib: Add a "mem_ctx" arg to gencache_get (unused so far)
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit f630360b7ff07ffd2a22f16d50293949860418ca
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Sep 4 08:46:34 2013 +0200

    gencache: Fix SAFE_FREE vs data_blob_free
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit aaa6a688cfc44ca681098a8ee66551689e8894a9
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Sep 4 08:44:50 2013 +0200

    torture3: Test getting a blob as a string
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 1173fed9165dffb79cfb119b6e80e379a6fd85ba
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Sep 4 08:22:43 2013 +0200

    lib: Add "mem_ctx" to gencache_get_data_blob
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 46131cb8023a883238b67e668be2afbc4adcf1f5
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Sep 4 08:22:08 2013 +0200

    torture3: Fix a const warning
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

-----------------------------------------------------------------------

Summary of changes:
 source3/auth/user_util.c                    |    5 +--
 source3/include/proto.h                     |    8 +++--
 source3/lib/gencache.c                      |   42 ++++++++++++++++----------
 source3/lib/idmap_cache.c                   |   14 ++++----
 source3/lib/wins_srv.c                      |    2 +-
 source3/libads/ldap.c                       |   15 ++++------
 source3/libads/sitename_cache.c             |    8 ++--
 source3/libads/sitename_cache.h             |    2 +-
 source3/libsmb/conncache.c                  |    4 +-
 source3/libsmb/dsgetdcname.c                |    7 ++--
 source3/libsmb/namecache.c                  |    8 ++--
 source3/libsmb/namequery.c                  |   22 +++++++-------
 source3/libsmb/namequery_dc.c               |   14 ++++----
 source3/libsmb/trustdom_cache.c             |   10 +++---
 source3/passdb/account_pol.c                |    4 +-
 source3/rpc_server/spoolss/srv_spoolss_nt.c |    7 ++--
 source3/torture/torture.c                   |   31 ++++++++++++++-----
 source3/utils/net_cache.c                   |    2 +-
 source3/utils/net_lookup.c                  |   17 +++-------
 source3/winbindd/winbindd_ads.c             |    4 ++-
 source3/winbindd/winbindd_cm.c              |   23 +++++++-------
 21 files changed, 135 insertions(+), 114 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/auth/user_util.c b/source3/auth/user_util.c
index 082c885..70ab5ad 100644
--- a/source3/auth/user_util.c
+++ b/source3/auth/user_util.c
@@ -96,14 +96,13 @@ static bool fetch_map_from_gencache(TALLOC_CTX *ctx,
 	if (key == NULL) {
 		return false;
 	}
-	found = gencache_get(key, &value, NULL);
+	found = gencache_get(key, ctx, &value, NULL);
 	TALLOC_FREE(key);
 	if (!found) {
 		return false;
 	}
 	TALLOC_FREE(*p_user_out);
-	*p_user_out = talloc_strdup(ctx, value);
-	SAFE_FREE(value);
+	*p_user_out = value;
 	if (!*p_user_out) {
 		return false;
 	}
diff --git a/source3/include/proto.h b/source3/include/proto.h
index 078d039..df65711 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -107,12 +107,14 @@ struct file_id vfs_file_id_from_sbuf(connection_struct *conn, const SMB_STRUCT_S
 
 bool gencache_set(const char *keystr, const char *value, time_t timeout);
 bool gencache_del(const char *keystr);
-bool gencache_get(const char *keystr, char **valstr, time_t *timeout);
+bool gencache_get(const char *keystr, TALLOC_CTX *mem_ctx, char **value,
+		  time_t *ptimeout);
 bool gencache_parse(const char *keystr,
 		    void (*parser)(time_t timeout, DATA_BLOB blob,
 				   void *private_data),
 		    void *private_data);
-bool gencache_get_data_blob(const char *keystr, DATA_BLOB *blob,
+bool gencache_get_data_blob(const char *keystr, TALLOC_CTX *mem_ctx,
+			    DATA_BLOB *blob,
 			    time_t *timeout, bool *was_expired);
 bool gencache_stabilize(void);
 bool gencache_set_data_blob(const char *keystr, const DATA_BLOB *blob, time_t timeout);
@@ -823,7 +825,7 @@ bool namecache_status_fetch(const char *keyname,
 bool saf_store( const char *domain, const char *servername );
 bool saf_join_store( const char *domain, const char *servername );
 bool saf_delete( const char *domain );
-char *saf_fetch( const char *domain );
+char *saf_fetch(TALLOC_CTX *mem_ctx, const char *domain );
 struct tevent_req *node_status_query_send(TALLOC_CTX *mem_ctx,
 					  struct tevent_context *ev,
 					  struct nmb_name *name,
diff --git a/source3/lib/gencache.c b/source3/lib/gencache.c
index 08adf21..2c5e9ab 100644
--- a/source3/lib/gencache.c
+++ b/source3/lib/gencache.c
@@ -368,7 +368,8 @@ bool gencache_del(const char *keystr)
 	 * element.
 	 */
 
-	exists = gencache_get_data_blob(keystr, &value, NULL, &was_expired);
+	exists = gencache_get_data_blob(keystr, NULL, &value, NULL,
+					&was_expired);
 
 	if (!exists && was_expired) {
 		/*
@@ -469,6 +470,7 @@ bool gencache_parse(const char *keystr,
 }
 
 struct gencache_get_data_blob_state {
+	TALLOC_CTX *mem_ctx;
 	DATA_BLOB *blob;
 	time_t timeout;
 	bool result;
@@ -491,7 +493,8 @@ static void gencache_get_data_blob_parser(time_t timeout, DATA_BLOB blob,
 		return;
 	}
 
-	*state->blob = data_blob(blob.data, blob.length);
+	*state->blob = data_blob_talloc(state->mem_ctx, blob.data,
+					blob.length);
 	if (state->blob->data == NULL) {
 		state->result = false;
 		return;
@@ -511,13 +514,15 @@ static void gencache_get_data_blob_parser(time_t timeout, DATA_BLOB blob,
  * @retval False for failure
  **/
 
-bool gencache_get_data_blob(const char *keystr, DATA_BLOB *blob,
+bool gencache_get_data_blob(const char *keystr, TALLOC_CTX *mem_ctx,
+			    DATA_BLOB *blob,
 			    time_t *timeout, bool *was_expired)
 {
 	struct gencache_get_data_blob_state state;
 	bool expired = false;
 
 	state.result = false;
+	state.mem_ctx = mem_ctx;
 	state.blob = blob;
 
 	if (!gencache_parse(keystr, gencache_get_data_blob_parser, &state)) {
@@ -700,30 +705,27 @@ static int stabilize_fn(struct tdb_context *tdb, TDB_DATA key, TDB_DATA val,
  * @retval False for failure
  **/
 
-bool gencache_get(const char *keystr, char **value, time_t *ptimeout)
+bool gencache_get(const char *keystr, TALLOC_CTX *mem_ctx, char **value,
+		  time_t *ptimeout)
 {
 	DATA_BLOB blob;
 	bool ret = False;
 
-	ret = gencache_get_data_blob(keystr, &blob, ptimeout, NULL);
+	ret = gencache_get_data_blob(keystr, mem_ctx, &blob, ptimeout, NULL);
 	if (!ret) {
 		return false;
 	}
 	if ((blob.data == NULL) || (blob.length == 0)) {
-		SAFE_FREE(blob.data);
+		data_blob_free(&blob);
 		return false;
 	}
 	if (blob.data[blob.length-1] != '\0') {
 		/* Not NULL terminated, can't be a string */
-		SAFE_FREE(blob.data);
+		data_blob_free(&blob);
 		return false;
 	}
 	if (value) {
-		*value = SMB_STRDUP((char *)blob.data);
-		data_blob_free(&blob);
-		if (*value == NULL) {
-			return false;
-		}
+		*value = talloc_move(mem_ctx, (char **)&blob.data);
 		return true;
 	}
 	data_blob_free(&blob);
@@ -777,8 +779,11 @@ static int gencache_iterate_blobs_fn(struct tdb_context *tdb, TDB_DATA key,
 		keystr = (char *)key.dptr;
 	} else {
 		/* ensure 0-termination */
-		keystr = SMB_STRNDUP((char *)key.dptr, key.dsize);
+		keystr = talloc_strndup(talloc_tos(), (char *)key.dptr, key.dsize);
 		free_key = keystr;
+		if (keystr == NULL) {
+			goto done;
+		}
 	}
 
 	if (!gencache_pull_timeout((char *)data.dptr, &timeout, &endptr)) {
@@ -800,7 +805,7 @@ static int gencache_iterate_blobs_fn(struct tdb_context *tdb, TDB_DATA key,
 		  timeout, state->private_data);
 
  done:
-	SAFE_FREE(free_key);
+	TALLOC_FREE(free_key);
 	return 0;
 }
 
@@ -856,8 +861,11 @@ static void gencache_iterate_fn(const char *key, DATA_BLOB value,
 		valstr = (char *)value.data;
 	} else {
 		/* ensure 0-termination */
-		valstr = SMB_STRNDUP((char *)value.data, value.length);
+		valstr = talloc_strndup(talloc_tos(), (char *)value.data, value.length);
 		free_val = valstr;
+		if (valstr == NULL) {
+			goto done;
+		}
 	}
 
 	DEBUG(10, ("Calling function with arguments "
@@ -866,7 +874,9 @@ static void gencache_iterate_fn(const char *key, DATA_BLOB value,
 
 	state->fn(key, valstr, timeout, state->private_data);
 
-	SAFE_FREE(free_val);
+  done:
+
+	TALLOC_FREE(free_val);
 }
 
 void gencache_iterate(void (*fn)(const char *key, const char *value,
diff --git a/source3/lib/idmap_cache.c b/source3/lib/idmap_cache.c
index edf37a8..ffd3c19 100644
--- a/source3/lib/idmap_cache.c
+++ b/source3/lib/idmap_cache.c
@@ -48,7 +48,7 @@ bool idmap_cache_find_sid2unixid(const struct dom_sid *sid, struct unixid *id,
 	if (key == NULL) {
 		return false;
 	}
-	ret = gencache_get(key, &value, &timeout);
+	ret = gencache_get(key, talloc_tos(), &value, &timeout);
 	if (!ret) {
 		goto done;
 	}
@@ -128,7 +128,7 @@ bool idmap_cache_find_sid2unixid(const struct dom_sid *sid, struct unixid *id,
 
 done:
 	TALLOC_FREE(key);
-	SAFE_FREE(value);
+	TALLOC_FREE(value);
 	return ret;
 }
 
@@ -209,7 +209,7 @@ bool idmap_cache_find_uid2sid(uid_t uid, struct dom_sid *sid, bool *expired)
 	if (key == NULL) {
 		return false;
 	}
-	ret = gencache_get(key, &value, &timeout);
+	ret = gencache_get(key, talloc_tos(), &value, &timeout);
 	TALLOC_FREE(key);
 	if (!ret) {
 		return false;
@@ -218,7 +218,7 @@ bool idmap_cache_find_uid2sid(uid_t uid, struct dom_sid *sid, bool *expired)
 	if (value[0] != '-') {
 		ret = string_to_sid(sid, value);
 	}
-	SAFE_FREE(value);
+	TALLOC_FREE(value);
 	if (ret) {
 		*expired = (timeout <= time(NULL));
 	}
@@ -246,7 +246,7 @@ bool idmap_cache_find_gid2sid(gid_t gid, struct dom_sid *sid, bool *expired)
 	if (key == NULL) {
 		return false;
 	}
-	ret = gencache_get(key, &value, &timeout);
+	ret = gencache_get(key, talloc_tos(), &value, &timeout);
 	TALLOC_FREE(key);
 	if (!ret) {
 		return false;
@@ -255,7 +255,7 @@ bool idmap_cache_find_gid2sid(gid_t gid, struct dom_sid *sid, bool *expired)
 	if (value[0] != '-') {
 		ret = string_to_sid(sid, value);
 	}
-	SAFE_FREE(value);
+	TALLOC_FREE(value);
 	if (ret) {
 		*expired = (timeout <= time(NULL));
 	}
@@ -431,7 +431,7 @@ static bool idmap_cache_del_xid(char t, int xid)
 	time_t timeout;
 	bool ret = true;
 
-	if (!gencache_get(key, &sid_str, &timeout)) {
+	if (!gencache_get(key, mem_ctx, &sid_str, &timeout)) {
 		DEBUG(3, ("no entry: %s\n", key));
 		ret = false;
 		goto done;
diff --git a/source3/lib/wins_srv.c b/source3/lib/wins_srv.c
index fb5587f..6f7d5b3 100644
--- a/source3/lib/wins_srv.c
+++ b/source3/lib/wins_srv.c
@@ -101,7 +101,7 @@ bool wins_srv_is_dead(struct in_addr wins_ip, struct in_addr src_ip)
 
 	/* If the key exists then the WINS server has been marked as dead */
 
-	result = gencache_get(keystr, NULL, NULL);
+	result = gencache_get(keystr, NULL, NULL, NULL);
 	SAFE_FREE(keystr);
 
 	DEBUG(4, ("wins_srv_is_dead: %s is %s\n", inet_ntoa(wins_ip),
diff --git a/source3/libads/ldap.c b/source3/libads/ldap.c
index c8ef5b5..12aacd4 100644
--- a/source3/libads/ldap.c
+++ b/source3/libads/ldap.c
@@ -414,7 +414,7 @@ static NTSTATUS ads_find_dc(ADS_STRUCT *ads)
 		return NT_STATUS_NO_LOGON_SERVERS;
 	}
 
-	sitename = sitename_fetch(realm);
+	sitename = sitename_fetch(talloc_tos(), realm);
 
  again:
 
@@ -429,7 +429,7 @@ static NTSTATUS ads_find_dc(ADS_STRUCT *ads)
 			goto again;
 		}
 
-		SAFE_FREE(sitename);
+		TALLOC_FREE(sitename);
 		return status;
 	}
 
@@ -464,7 +464,7 @@ static NTSTATUS ads_find_dc(ADS_STRUCT *ads)
 
 		if ( ads_try_connect(ads, server, false) ) {
 			SAFE_FREE(ip_list);
-			SAFE_FREE(sitename);
+			TALLOC_FREE(sitename);
 			return NT_STATUS_OK;
 		}
 
@@ -481,7 +481,7 @@ static NTSTATUS ads_find_dc(ADS_STRUCT *ads)
 	if (sitename) {
 		DEBUG(1,("ads_find_dc: failed to find a valid DC on our site (%s), "
 				"trying to find another DC\n", sitename));
-		SAFE_FREE(sitename);
+		TALLOC_FREE(sitename);
 		namecache_delete(realm, 0x1C);
 		goto again;
 	}
@@ -563,9 +563,9 @@ ADS_STATUS ads_connect_gc(ADS_STRUCT *ads)
 	if (!realm)
 		realm = lp_realm();
 
-	if ((sitename = sitename_fetch(realm)) == NULL) {
+	if ((sitename = sitename_fetch(frame, realm)) == NULL) {
 		ads_lookup_site();
-		sitename = sitename_fetch(realm);
+		sitename = sitename_fetch(frame, realm);
 	}
 
 	dns_hosts_file = lp_parm_const_string(-1, "resolv", "host file", NULL);
@@ -581,8 +581,6 @@ ADS_STATUS ads_connect_gc(ADS_STRUCT *ads)
 					      realm, sitename,
 					      &gcs_list, &num_gcs);
 
-		SAFE_FREE(sitename);
-
 		if (!NT_STATUS_IS_OK(nt_status)) {
 			ads_status = ADS_ERROR_NT(nt_status);
 			goto done;
@@ -618,7 +616,6 @@ ADS_STATUS ads_connect_gc(ADS_STRUCT *ads)
 	} while (!done);
 
 done:
-	SAFE_FREE(sitename);
 	talloc_destroy(frame);
 
 	return ads_status;
diff --git a/source3/libads/sitename_cache.c b/source3/libads/sitename_cache.c
index cb1bae5..b064aea 100644
--- a/source3/libads/sitename_cache.c
+++ b/source3/libads/sitename_cache.c
@@ -79,7 +79,7 @@ bool sitename_store(const char *realm, const char *sitename)
  Caller must free.
 ****************************************************************************/
 
-char *sitename_fetch(const char *realm)
+char *sitename_fetch(TALLOC_CTX *mem_ctx, const char *realm)
 {
 	char *sitename = NULL;
 	time_t timeout;
@@ -95,7 +95,7 @@ char *sitename_fetch(const char *realm)
 
 	key = sitename_key(query_realm);
 
-	ret = gencache_get( key, &sitename, &timeout );
+	ret = gencache_get( key, mem_ctx, &sitename, &timeout );
 	SAFE_FREE(key);
 	if ( !ret ) {
 		DEBUG(5,("sitename_fetch: No stored sitename for %s\n",
@@ -122,7 +122,7 @@ bool stored_sitename_changed(const char *realm, const char *sitename)
 		return False;
 	}
 
-	new_sitename = sitename_fetch(realm);
+	new_sitename = sitename_fetch(talloc_tos(), realm);
 
 	if (sitename && new_sitename && !strequal(sitename, new_sitename)) {
 		ret = True;
@@ -130,7 +130,7 @@ bool stored_sitename_changed(const char *realm, const char *sitename)
 			(!sitename && new_sitename)) {
 		ret = True;
 	}
-	SAFE_FREE(new_sitename);
+	TALLOC_FREE(new_sitename);
 	return ret;
 }
 
diff --git a/source3/libads/sitename_cache.h b/source3/libads/sitename_cache.h
index 4e62f00..9044964 100644
--- a/source3/libads/sitename_cache.h
+++ b/source3/libads/sitename_cache.h
@@ -22,7 +22,7 @@
 #define _LIBADS_SITENAME_CACHE_H_
 
 bool sitename_store(const char *realm, const char *sitename);
-char *sitename_fetch(const char *realm);
+char *sitename_fetch(TALLOC_CTX *mem_ctx, const char *realm);
 bool stored_sitename_changed(const char *realm, const char *sitename);
 
 #endif /* _LIBADS_SITENAME_CACHE_H_ */
diff --git a/source3/libsmb/conncache.c b/source3/libsmb/conncache.c
index 6635318..9bf4c56 100644
--- a/source3/libsmb/conncache.c
+++ b/source3/libsmb/conncache.c
@@ -143,13 +143,13 @@ NTSTATUS check_negative_conn_cache( const char *domain, const char *server)
 	if (key == NULL)
 		goto done;
 
-	if (gencache_get(key, &value, NULL))
+	if (gencache_get(key, talloc_tos(), &value, NULL))
 		result = negative_conn_cache_valuedecode(value);
  done:
 	DEBUG(9,("check_negative_conn_cache returning result %d for domain %s "
 		  "server %s\n", NT_STATUS_V(result), domain, server));
 	TALLOC_FREE(key);
-	SAFE_FREE(value);
+	TALLOC_FREE(value);
 	return result;
 }
 
diff --git a/source3/libsmb/dsgetdcname.c b/source3/libsmb/dsgetdcname.c
index 6818b01..71995fd 100644
--- a/source3/libsmb/dsgetdcname.c
+++ b/source3/libsmb/dsgetdcname.c
@@ -334,12 +334,13 @@ static NTSTATUS dsgetdcname_cache_fetch(TALLOC_CTX *mem_ctx,
 		return NT_STATUS_NO_MEMORY;
 	}
 
-	if (!gencache_get_data_blob(key, &blob, NULL, NULL)) {
+	if (!gencache_get_data_blob(key, NULL, &blob, NULL, NULL)) {
 		return NT_STATUS_NOT_FOUND;
 	}
 
 	info = talloc_zero(mem_ctx, struct netr_DsRGetDCNameInfo);
 	if (!info) {
+		data_blob_free(&blob);
 		return NT_STATUS_NO_MEMORY;
 	}
 
@@ -1184,7 +1185,7 @@ NTSTATUS dsgetdcname(TALLOC_CTX *mem_ctx,
 	bool retry_query_with_null = false;
 
 	if ((site_name == NULL) || (site_name[0] == '\0')) {
-		ptr_to_free = sitename_fetch(domain_name);
+		ptr_to_free = sitename_fetch(mem_ctx, domain_name);
 		if (ptr_to_free != NULL) {
 			retry_query_with_null = true;
 		}
@@ -1201,7 +1202,7 @@ NTSTATUS dsgetdcname(TALLOC_CTX *mem_ctx,
 				flags,
 				info);
 
-	SAFE_FREE(ptr_to_free);
+	TALLOC_FREE(ptr_to_free);
 
 	if (!NT_STATUS_EQUAL(status, NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND)) {
 		return status;
diff --git a/source3/libsmb/namecache.c b/source3/libsmb/namecache.c
index 8571dfa..1e61584 100644
--- a/source3/libsmb/namecache.c
+++ b/source3/libsmb/namecache.c
@@ -156,7 +156,7 @@ bool namecache_fetch(const char *name,
 		return False;
 	}
 
-	if (!gencache_get(key, &value, &timeout)) {
+	if (!gencache_get(key, talloc_tos(), &value, &timeout)) {
 		DEBUG(5, ("no entry for %s#%02X found.\n", name, name_type));
 		SAFE_FREE(key);
 		return False;
@@ -170,7 +170,7 @@ bool namecache_fetch(const char *name,
 	*num_names = ipstr_list_parse(value, ip_list);
 
 	SAFE_FREE(key);
-	SAFE_FREE(value);
+	TALLOC_FREE(value);
 
 	return *num_names > 0; /* true only if some ip has been fetched */
 }
@@ -294,7 +294,7 @@ bool namecache_status_fetch(const char *keyname,
 	if (!key)
 		return False;
 
-	if (!gencache_get(key, &value, &timeout)) {
+	if (!gencache_get(key, talloc_tos(), &value, &timeout)) {
 		DEBUG(5, ("namecache_status_fetch: no entry for %s found.\n",
 					key));
 		SAFE_FREE(key);
@@ -306,6 +306,6 @@ bool namecache_status_fetch(const char *keyname,
 
 	strlcpy(srvname_out, value, 16);
 	SAFE_FREE(key);
-	SAFE_FREE(value);
+	TALLOC_FREE(value);
 	return True;
 }
diff --git a/source3/libsmb/namequery.c b/source3/libsmb/namequery.c
index d86c0ed..f2fffde 100644
--- a/source3/libsmb/namequery.c
+++ b/source3/libsmb/namequery.c
@@ -165,7 +165,7 @@ bool saf_delete( const char *domain )
 /****************************************************************************
 ****************************************************************************/
 
-char *saf_fetch( const char *domain )
+char *saf_fetch(TALLOC_CTX *mem_ctx, const char *domain )
 {
 	char *server = NULL;
 	time_t timeout;
@@ -183,7 +183,7 @@ char *saf_fetch( const char *domain )
 		return NULL;
 	}
 
-	ret = gencache_get( key, &server, &timeout );
+	ret = gencache_get( key, mem_ctx, &server, &timeout );


-- 
Samba Shared Repository


More information about the samba-cvs mailing list