mirror of
https://github.com/samba-team/samba.git
synced 2025-01-22 22:04:08 +03:00
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 (This used to be commit eefd46289b90967ce6b4cd385fb1f7e1d6f9b343)
This commit is contained in:
parent
e0c90d6131
commit
1c1c6fca66
@ -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);
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user