svn commit: samba r12716 - in branches/SAMBA_4_0/source:
dsdb/samdb/ldb_modules lib/ldb/modules
abartlet at samba.org
abartlet at samba.org
Thu Jan 5 02:14:01 GMT 2006
Author: abartlet
Date: 2006-01-05 02:14:01 +0000 (Thu, 05 Jan 2006)
New Revision: 12716
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=12716
Log:
Tridge points out that the request argument to ldb_next_request must
be a valid talloc() pointer, as other modules may rely on this.
Andrew Bartlett
Modified:
branches/SAMBA_4_0/source/dsdb/samdb/ldb_modules/password_hash.c
branches/SAMBA_4_0/source/lib/ldb/modules/objectclass.c
Changeset:
Modified: branches/SAMBA_4_0/source/dsdb/samdb/ldb_modules/password_hash.c
===================================================================
--- branches/SAMBA_4_0/source/dsdb/samdb/ldb_modules/password_hash.c 2006-01-04 16:00:42 UTC (rev 12715)
+++ branches/SAMBA_4_0/source/dsdb/samdb/ldb_modules/password_hash.c 2006-01-05 02:14:01 UTC (rev 12716)
@@ -91,9 +91,9 @@
struct ldb_dn *dn = msg->dn;
struct ldb_message *msg2;
- struct ldb_request search_request;
- struct ldb_request modify_request;
- struct ldb_request modified_orig_request;
+ struct ldb_request *search_request = NULL;
+ struct ldb_request *modify_request;
+ struct ldb_request *modified_orig_request;
struct ldb_result *res, *dom_res, *old_res;
struct ldb_message_element *objectclasses;
@@ -132,17 +132,23 @@
}
if (req->operation == LDB_REQ_MODIFY) {
+ search_request = talloc(mem_ctx, struct ldb_request);
+ if (!search_request) {
+ talloc_free(mem_ctx);
+ return LDB_ERR_OPERATIONS_ERROR;
+ }
+
/* Look up the old ntPwdHash and lmPwdHash values, so
* we can later place these into the password
* history */
- search_request.operation = LDB_REQ_SEARCH;
- search_request.op.search.base = dn;
- search_request.op.search.scope = LDB_SCOPE_BASE;
- search_request.op.search.tree = ldb_parse_tree(module->ldb, NULL);
- search_request.op.search.attrs = old_user_attrs;
+ search_request->operation = LDB_REQ_SEARCH;
+ search_request->op.search.base = dn;
+ search_request->op.search.scope = LDB_SCOPE_BASE;
+ search_request->op.search.tree = ldb_parse_tree(module->ldb, NULL);
+ search_request->op.search.attrs = old_user_attrs;
- old_ret = ldb_next_request(module, &search_request);
+ old_ret = ldb_next_request(module, search_request);
}
/* we can't change things untill we copy it */
@@ -180,18 +186,24 @@
unicodePwd = NULL;
}
- modified_orig_request = *req;
- switch (modified_orig_request.operation) {
+ modified_orig_request = talloc(mem_ctx, struct ldb_request);
+ if (!modified_orig_request) {
+ talloc_free(mem_ctx);
+ return LDB_ERR_OPERATIONS_ERROR;
+ }
+
+ *modified_orig_request = *req;
+ switch (modified_orig_request->operation) {
case LDB_REQ_ADD:
- modified_orig_request.op.add.message = msg2;
+ modified_orig_request->op.add.message = msg2;
break;
case LDB_REQ_MODIFY:
- modified_orig_request.op.mod.message = msg2;
+ modified_orig_request->op.mod.message = msg2;
break;
}
/* Send the (modified) request of the original caller down to the database */
- ret = ldb_next_request(module, &modified_orig_request);
+ ret = ldb_next_request(module, modified_orig_request);
if (ret) {
return ret;
}
@@ -206,7 +218,7 @@
}
/* Find out the old passwords details of the user */
- old_res = search_request.op.search.res;
+ old_res = search_request->op.search.res;
if (old_res->count != 1) {
ldb_set_errstring(module,
@@ -230,20 +242,26 @@
* with the password. */
/* Now find out what is on the entry after the above add/modify */
- search_request.operation = LDB_REQ_SEARCH;
- search_request.op.search.base = dn;
- search_request.op.search.scope = LDB_SCOPE_BASE;
- search_request.op.search.tree = ldb_parse_tree(module->ldb, NULL);
- search_request.op.search.attrs = user_attrs;
+ search_request = talloc(mem_ctx, struct ldb_request);
+ if (!search_request) {
+ talloc_free(mem_ctx);
+ return LDB_ERR_OPERATIONS_ERROR;
+ }
+
+ search_request->operation = LDB_REQ_SEARCH;
+ search_request->op.search.base = dn;
+ search_request->op.search.scope = LDB_SCOPE_BASE;
+ search_request->op.search.tree = ldb_parse_tree(module->ldb, NULL);
+ search_request->op.search.attrs = user_attrs;
- ret = ldb_next_request(module, &search_request);
+ ret = ldb_next_request(module, search_request);
if (ret) {
talloc_free(mem_ctx);
return ret;
}
/* Find out the full details of the user */
- res = search_request.op.search.res;
+ res = search_request->op.search.res;
if (res->count != 1) {
ldb_set_errstring(module,
talloc_asprintf(mem_ctx, "password_hash_handle: "
@@ -630,10 +648,16 @@
/* Too much code above, we should check we got it close to reasonable */
CHECK_RET(ldb_msg_sanity_check(modify_msg));
- modify_request.operation = LDB_REQ_MODIFY;
- modify_request.op.mod.message = modify_msg;
+ modify_request = talloc(mem_ctx, struct ldb_request);
+ if (!modify_request) {
+ talloc_free(mem_ctx);
+ return LDB_ERR_OPERATIONS_ERROR;
+ }
- ret = ldb_next_request(module, &modify_request);
+ modify_request->operation = LDB_REQ_MODIFY;
+ modify_request->op.mod.message = modify_msg;
+
+ ret = ldb_next_request(module, modify_request);
talloc_free(mem_ctx);
return ret;
Modified: branches/SAMBA_4_0/source/lib/ldb/modules/objectclass.c
===================================================================
--- branches/SAMBA_4_0/source/lib/ldb/modules/objectclass.c 2006-01-04 16:00:42 UTC (rev 12715)
+++ branches/SAMBA_4_0/source/lib/ldb/modules/objectclass.c 2006-01-05 02:14:01 UTC (rev 12716)
@@ -56,8 +56,8 @@
{
TALLOC_CTX *mem_ctx;
int ret;
- struct ldb_request search_request;
- struct ldb_request modify_request;
+ struct ldb_request *search_request;
+ struct ldb_request *modify_request;
struct ldb_message *modify_msg;
struct ldb_result *res;
const char *attrs[] = { "objectClass", NULL };
@@ -92,23 +92,29 @@
/* Thanks to transactions: Now do a search, find the full list
* of objectClasses and do the sort */
- search_request.operation = LDB_REQ_SEARCH;
- search_request.op.search.base = msg->dn;
- search_request.op.search.scope = LDB_SCOPE_BASE;
- search_request.op.search.tree = ldb_parse_tree(module->ldb, NULL);
- search_request.op.search.attrs = attrs;
+ mem_ctx = talloc_new(module);
+ if (!mem_ctx) {
+ return LDB_ERR_OPERATIONS_ERROR;
+ }
- ret = ldb_next_request(module, &search_request);
+ search_request = talloc(mem_ctx, struct ldb_request);
+ if (!search_request) {
+ talloc_free(mem_ctx);
+ return LDB_ERR_OPERATIONS_ERROR;
+ }
+
+ search_request->operation = LDB_REQ_SEARCH;
+ search_request->op.search.base = msg->dn;
+ search_request->op.search.scope = LDB_SCOPE_BASE;
+ search_request->op.search.tree = ldb_parse_tree(module->ldb, NULL);
+ search_request->op.search.attrs = attrs;
+
+ ret = ldb_next_request(module, search_request);
if (ret) {
return ret;
}
- mem_ctx = talloc_new(module);
- if (!mem_ctx) {
- return LDB_ERR_OPERATIONS_ERROR;
- }
-
- res = search_request.op.search.res;
+ res = search_request->op.search.res;
talloc_steal(mem_ctx, res);
if (res->count != 1) {
ldb_set_errstring(module,
@@ -259,11 +265,17 @@
return ret;
}
- modify_request.operation = LDB_REQ_MODIFY;
- modify_request.op.mod.message = modify_msg;
+ modify_request = talloc(mem_ctx, struct ldb_request);
+ if (!modify_request) {
+ talloc_free(mem_ctx);
+ return LDB_ERR_OPERATIONS_ERROR;
+ }
+ modify_request->operation = LDB_REQ_MODIFY;
+ modify_request->op.mod.message = modify_msg;
+
/* And now push the write into the database */
- ret = ldb_next_request(module, &modify_request);
+ ret = ldb_next_request(module, modify_request);
talloc_free(mem_ctx);
return ret;
More information about the samba-cvs
mailing list