svn commit: samba r26697 - in branches/SAMBA_4_0/source/dsdb/schema: .

abartlet at samba.org abartlet at samba.org
Wed Jan 9 05:36:02 GMT 2008


Author: abartlet
Date: 2008-01-09 05:36:02 +0000 (Wed, 09 Jan 2008)
New Revision: 26697

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=26697

Log:
Leak less memory into the ldb context.

(Trying to chase down memory leaks in provision)

Andrew Bartlett

Modified:
   branches/SAMBA_4_0/source/dsdb/schema/schema_init.c


Changeset:
Modified: branches/SAMBA_4_0/source/dsdb/schema/schema_init.c
===================================================================
--- branches/SAMBA_4_0/source/dsdb/schema/schema_init.c	2008-01-08 22:56:44 UTC (rev 26696)
+++ branches/SAMBA_4_0/source/dsdb/schema/schema_init.c	2008-01-09 05:36:02 UTC (rev 26697)
@@ -85,24 +85,30 @@
 	struct prefixMapBlob pfm;
 	char *schema_info;
 
-	ndr_err = ndr_pull_struct_blob(prefixMap, schema, lp_iconv_convenience(global_loadparm), &pfm,
+	TALLOC_CTX *mem_ctx = talloc_new(schema);
+	W_ERROR_HAVE_NO_MEMORY(mem_ctx);
+	
+	ndr_err = ndr_pull_struct_blob(prefixMap, mem_ctx, lp_iconv_convenience(global_loadparm), &pfm,
 				       (ndr_pull_flags_fn_t)ndr_pull_prefixMapBlob);
 	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
 		NTSTATUS nt_status = ndr_map_error2ntstatus(ndr_err);
+		talloc_free(mem_ctx);
 		return ntstatus_to_werror(nt_status);
 	}
 
 	if (pfm.version != PREFIX_MAP_VERSION_DSDB) {
+		talloc_free(mem_ctx);
 		return WERR_FOOBAR;
 	}
 
 	if (schemaInfo->length != 21 && schemaInfo->data[0] == 0xFF) {
+		talloc_free(mem_ctx);
 		return WERR_FOOBAR;
 	}
 
 	/* append the schema info as last element */
 	pfm.ctr.dsdb.num_mappings++;
-	pfm.ctr.dsdb.mappings = talloc_realloc(schema, pfm.ctr.dsdb.mappings,
+	pfm.ctr.dsdb.mappings = talloc_realloc(mem_ctx, pfm.ctr.dsdb.mappings,
 					       struct drsuapi_DsReplicaOIDMapping,
 					       pfm.ctr.dsdb.num_mappings);
 	W_ERROR_HAVE_NO_MEMORY(pfm.ctr.dsdb.mappings);
@@ -116,7 +122,8 @@
 
 	/* call the drsuapi version */
 	status = dsdb_load_oid_mappings_drsuapi(schema, &pfm.ctr.dsdb);
-	talloc_free(pfm.ctr.dsdb.mappings);
+	talloc_free(mem_ctx);
+
 	W_ERROR_NOT_OK_RETURN(status);
 
 	return WERR_OK;
@@ -1164,6 +1171,8 @@
 	if (!msg) {
 		goto nomem;
 	}
+	talloc_steal(mem_ctx, msg);
+	talloc_free(ldif);
 
 	prefix_val = ldb_msg_find_ldb_val(msg, "prefixMap");
 	if (!prefix_val) {
@@ -1200,6 +1209,9 @@
 			goto nomem;
 		}
 
+		talloc_steal(mem_ctx, msg);
+		talloc_free(ldif);
+
 		is_sa = ldb_msg_check_string_attribute(msg, "objectClass", "attributeSchema");
 		is_sc = ldb_msg_check_string_attribute(msg, "objectClass", "classSchema");
 



More information about the samba-cvs mailing list