dsdb: Add DSDB_SEARCH_ONE_ONLY support to dsdb_module_search*()
authorAndrew Bartlett <abartlet@samba.org>
Fri, 6 Sep 2013 03:39:50 +0000 (15:39 +1200)
committerStefan Metzmacher <metze@samba.org>
Mon, 16 Sep 2013 17:36:36 +0000 (19:36 +0200)
Signed-off-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
source4/dsdb/samdb/ldb_modules/util.c

index f7803e56cb153fbf5055615404c1a81471394154..8d587a4cb3862714607441c45bd47a0f84db9022 100644 (file)
@@ -174,6 +174,19 @@ int dsdb_module_search_tree(struct ldb_module *module,
                ret = ldb_wait(req->handle, LDB_WAIT_ALL);
        }
 
+       if (dsdb_flags & DSDB_SEARCH_ONE_ONLY) {
+               if (res->count == 0) {
+                       talloc_free(tmp_ctx);
+                       ldb_reset_err_string(ldb_module_get_ctx(module));
+                       return LDB_ERR_NO_SUCH_OBJECT;
+               }
+               if (res->count != 1) {
+                       talloc_free(tmp_ctx);
+                       ldb_reset_err_string(ldb_module_get_ctx(module));
+                       return LDB_ERR_CONSTRAINT_VIOLATION;
+               }
+       }
+
        talloc_free(req);
        if (ret == LDB_SUCCESS) {
                *_res = talloc_steal(mem_ctx, res);