s4-dsdb: Return ldb_result context in dsdb_module_extended
authorAmitay Isaacs <amitay@gmail.com>
Mon, 14 Nov 2011 02:52:34 +0000 (13:52 +1100)
committerAmitay Isaacs <amitay@gmail.com>
Tue, 29 Nov 2011 05:00:35 +0000 (16:00 +1100)
The result of the extended operation is now available in the calling
routine.

Signed-off-by: Andrew Tridgell <tridge@samba.org>
source4/dsdb/samdb/ldb_modules/util.c

index cee9ac0d00a78750344158746c836d9a8a2c79e9..4e0001d17bc09e429e98fca5b00cd70037135352 100644 (file)
@@ -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