From 422fcbbe7244a0c14aeca5cda7f2a28e2ee821b5 Mon Sep 17 00:00:00 2001 From: Amitay Isaacs Date: Mon, 14 Nov 2011 13:52:34 +1100 Subject: s4-dsdb: Return ldb_result context in dsdb_module_extended The result of the extended operation is now available in the calling routine. Signed-off-by: Andrew Tridgell --- source4/dsdb/samdb/ldb_modules/util.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) (limited to 'source4/dsdb/samdb') diff --git a/source4/dsdb/samdb/ldb_modules/util.c b/source4/dsdb/samdb/ldb_modules/util.c index cee9ac0d00..4e0001d17b 100644 --- a/source4/dsdb/samdb/ldb_modules/util.c +++ b/source4/dsdb/samdb/ldb_modules/util.c @@ -314,14 +314,21 @@ int dsdb_module_guid_by_dn(struct ldb_module *module, struct ldb_dn *dn, struct talloc_free(tmp_ctx); return LDB_SUCCESS; } + + /* a ldb_extended request operating on modules below the current module + + Note that this does not automatically start a transaction. If you + need a transaction the caller needs to start it as needed. */ int dsdb_module_extended(struct ldb_module *module, - const char* oid, void* data, - uint32_t dsdb_flags, - struct ldb_request *parent) + TALLOC_CTX *mem_ctx, + struct ldb_result **_res, + const char* oid, void* data, + uint32_t dsdb_flags, + struct ldb_request *parent) { struct ldb_request *req; int ret; @@ -329,6 +336,10 @@ int dsdb_module_extended(struct ldb_module *module, TALLOC_CTX *tmp_ctx = talloc_new(module); struct ldb_result *res; + if (_res != NULL) { + (*_res) = NULL; + } + res = talloc_zero(tmp_ctx, struct ldb_result); if (!res) { talloc_free(tmp_ctx); @@ -373,9 +384,15 @@ int dsdb_module_extended(struct ldb_module *module, ret = ldb_wait(req->handle, LDB_WAIT_ALL); } + if (_res != NULL && ret == LDB_SUCCESS) { + (*_res) = talloc_steal(mem_ctx, res); + } + talloc_free(tmp_ctx); return ret; } + + /* a ldb_modify request operating on modules below the current module -- cgit