[SCM] Samba Shared Repository - branch v4-0-test updated - release-4-0-0alpha2-1395-geefd462

Andrew Bartlett abartlet at samba.org
Sat Mar 29 03:07:01 GMT 2008


The branch, v4-0-test has been updated
       via  eefd46289b90967ce6b4cd385fb1f7e1d6f9b343 (commit)
      from  95314f29a9cf83db71d37e68728bfb5009fce60d (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v4-0-test


- Log -----------------------------------------------------------------
commit eefd46289b90967ce6b4cd385fb1f7e1d6f9b343
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Sat Mar 29 13:32:15 2008 +1100

    Fix more valgrind issues.
    
    This passes down the timeout more consistantly, and ensures that no
    matter how the modules screw up, we don't free() the memory we are
    going to write into the ASN1 packet until we actually write it out.
    
    Andrew Bartlett

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

Summary of changes:
 source/dsdb/samdb/ldb_modules/linked_attributes.c |   30 ++++++++++++++++++++-
 source/dsdb/samdb/ldb_modules/subtree_rename.c    |   16 ++++++++++-
 source/ldap_server/ldap_backend.c                 |    5 +++
 source/ldap_server/ldap_server.c                  |    4 ++-
 4 files changed, 52 insertions(+), 3 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/dsdb/samdb/ldb_modules/linked_attributes.c b/source/dsdb/samdb/ldb_modules/linked_attributes.c
index 8685c72..04b9987 100644
--- a/source/dsdb/samdb/ldb_modules/linked_attributes.c
+++ b/source/dsdb/samdb/ldb_modules/linked_attributes.c
@@ -520,6 +520,12 @@ static int linked_attributes_modify(struct ldb_module *module, struct ldb_reques
 			
 			talloc_steal(new_req, attrs);
 			
+			ret = ldb_set_timeout_from_prev_req(module->ldb, req, new_req);
+			
+			if (ret != LDB_SUCCESS) {
+				return ret;
+			}
+
 			/* Create a spot in the list for the requests */
 			ac->down_req = talloc_realloc(ac, ac->down_req, 
 						      struct ldb_request *, ac->num_requests + 1);
@@ -568,6 +574,12 @@ static int linked_attributes_modify(struct ldb_module *module, struct ldb_reques
 			
 			talloc_steal(new_req, attrs);
 			
+			ret = ldb_set_timeout_from_prev_req(module->ldb, req, new_req);
+			
+			if (ret != LDB_SUCCESS) {
+				return ret;
+			}
+
 			/* Create a spot in the list for the requests */
 			ac->down_req = talloc_realloc(ac, ac->down_req, 
 						      struct ldb_request *, ac->num_requests + 1);
@@ -629,7 +641,11 @@ static int linked_attributes_modify(struct ldb_module *module, struct ldb_reques
 			
 			talloc_steal(new_req, new_msg);
 			
-			ldb_set_timeout_from_prev_req(module->ldb, req, new_req);
+			ret = ldb_set_timeout_from_prev_req(module->ldb, req, new_req);
+			
+			if (ret != LDB_SUCCESS) {
+				return ret;
+			}
 			
 			/* Now add it to the list */
 			ac->down_req = talloc_realloc(ac, ac->down_req, 
@@ -752,6 +768,12 @@ static int linked_attributes_rename(struct ldb_module *module, struct ldb_reques
 
 	talloc_steal(new_req, attrs);
 
+	ret = ldb_set_timeout_from_prev_req(module->ldb, req, new_req);
+
+	if (ret != LDB_SUCCESS) {
+		return ret;
+	}
+
 	ac->search_req = new_req;
 	ac->step = LA_SEARCH;
 	return ldb_next_request(module, new_req);
@@ -805,6 +827,12 @@ static int linked_attributes_delete(struct ldb_module *module, struct ldb_reques
 
 	talloc_steal(new_req, attrs);
 
+	ret = ldb_set_timeout_from_prev_req(module->ldb, req, new_req);
+
+	if (ret != LDB_SUCCESS) {
+		return ret;
+	}
+
 	ac->search_req = new_req;
 	ac->step = LA_SEARCH;
 	return ldb_next_request(module, new_req);
diff --git a/source/dsdb/samdb/ldb_modules/subtree_rename.c b/source/dsdb/samdb/ldb_modules/subtree_rename.c
index bf8124e..fd1388d 100644
--- a/source/dsdb/samdb/ldb_modules/subtree_rename.c
+++ b/source/dsdb/samdb/ldb_modules/subtree_rename.c
@@ -117,7 +117,15 @@ static int subtree_rename_search_callback(struct ldb_context *ldb, void *context
 					   NULL,
 					   NULL);
 		
-		if (ret != LDB_SUCCESS) return ret;
+		if (ret != LDB_SUCCESS) {
+			return ret;
+		}
+
+		ret = ldb_set_timeout_from_prev_req(ldb, ac->orig_req, req);
+		
+		if (ret != LDB_SUCCESS) {
+			return ret;
+		}
 
 		talloc_steal(req, newdn);
 
@@ -186,6 +194,12 @@ static int subtree_rename(struct ldb_module *module, struct ldb_request *req)
 		return ret;
 	}
 
+	ret = ldb_set_timeout_from_prev_req(module->ldb, req, new_req);
+	
+	if (ret != LDB_SUCCESS) {
+		return ret;
+	}
+
 	ac->down_req = talloc_realloc(ac, ac->down_req, 
 					struct ldb_request *, ac->num_requests + 1);
 	if (!ac->down_req) {
diff --git a/source/ldap_server/ldap_backend.c b/source/ldap_server/ldap_backend.c
index 8b1c3ce..9b43d7b 100644
--- a/source/ldap_server/ldap_backend.c
+++ b/source/ldap_server/ldap_backend.c
@@ -261,6 +261,11 @@ static NTSTATUS ldapsrv_SearchRequest(struct ldapsrv_call *call)
 			ent_r = ldapsrv_init_reply(call, LDAP_TAG_SearchResultEntry);
 			NT_STATUS_HAVE_NO_MEMORY(ent_r);
 
+			/* Better to have the whole message kept here,
+			 * than to find someone further up didn't put
+			 * a value in the right spot in the talloc tree */
+			talloc_steal(ent_r, res->msgs[i]);
+			
 			ent = &ent_r->msg->r.SearchResultEntry;
 			ent->dn = ldb_dn_alloc_linearized(ent_r, res->msgs[i]->dn);
 			ent->num_attributes = 0;
diff --git a/source/ldap_server/ldap_server.c b/source/ldap_server/ldap_server.c
index 5b2519c..ce80941 100644
--- a/source/ldap_server/ldap_server.c
+++ b/source/ldap_server/ldap_server.c
@@ -155,8 +155,10 @@ static NTSTATUS ldapsrv_decode(void *private, DATA_BLOB blob)
 	}
 
 	data_blob_free(&blob);
-	ldapsrv_process_message(conn, msg);
+	talloc_steal(conn, msg);
 	asn1_free(asn1);
+
+	ldapsrv_process_message(conn, msg);
 	return NT_STATUS_OK;
 }
 


-- 
Samba Shared Repository


More information about the samba-cvs mailing list