summaryrefslogtreecommitdiff
path: root/source4/dsdb/samdb
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2012-11-19 06:59:33 +0100
committerMichael Adam <obnox@samba.org>2012-11-30 17:17:19 +0100
commit659277a89dfd4226db9ea44709010ad7e3768fd6 (patch)
tree09c4bae82829845985b1caf7205c3de13b90172f /source4/dsdb/samdb
parent844b736a1dd05159850ccc28eee1b3e625489139 (diff)
downloadsamba-659277a89dfd4226db9ea44709010ad7e3768fd6.tar.gz
samba-659277a89dfd4226db9ea44709010ad7e3768fd6.tar.bz2
samba-659277a89dfd4226db9ea44709010ad7e3768fd6.zip
s4:dsdb/extended_dn_in: do helper searches AS_SYSTEM and with SHOW_RECYCLED
Note that SHOW_RECYCLED implies SHOW_DELETED. Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Michael Adam <obnox@samba.org>
Diffstat (limited to 'source4/dsdb/samdb')
-rw-r--r--source4/dsdb/samdb/ldb_modules/extended_dn_in.c25
1 files changed, 13 insertions, 12 deletions
diff --git a/source4/dsdb/samdb/ldb_modules/extended_dn_in.c b/source4/dsdb/samdb/ldb_modules/extended_dn_in.c
index c21a1ea69b..034d22a2ca 100644
--- a/source4/dsdb/samdb/ldb_modules/extended_dn_in.c
+++ b/source4/dsdb/samdb/ldb_modules/extended_dn_in.c
@@ -412,7 +412,8 @@ static int extended_dn_filter_callback(struct ldb_parse_tree *tree, void *privat
}
dsdb_flags = DSDB_FLAG_NEXT_MODULE |
- DSDB_SEARCH_SHOW_DELETED |
+ DSDB_FLAG_AS_SYSTEM |
+ DSDB_SEARCH_SHOW_RECYCLED |
DSDB_SEARCH_SHOW_EXTENDED_DN;
if (guid_val) {
@@ -555,6 +556,7 @@ static int extended_dn_in_fix(struct ldb_module *module, struct ldb_request *req
} else {
/* It looks like we need to map the DN */
const struct ldb_val *sid_val, *guid_val, *wkguid_val;
+ uint32_t dsdb_flags = 0;
if (!ldb_dn_match_allowed(dn, req)) {
return ldb_error(ldb_module_get_ctx(module),
@@ -651,7 +653,7 @@ static int extended_dn_in_fix(struct ldb_module *module, struct ldb_request *req
base_dn_scope,
base_dn_filter,
base_dn_attrs,
- req->controls,
+ NULL,
ac, extended_base_callback,
req);
LDB_REQ_SET_LOCATION(down_req);
@@ -659,17 +661,16 @@ static int extended_dn_in_fix(struct ldb_module *module, struct ldb_request *req
return ldb_operr(ldb_module_get_ctx(module));
}
+ dsdb_flags = DSDB_FLAG_AS_SYSTEM |
+ DSDB_SEARCH_SHOW_RECYCLED |
+ DSDB_SEARCH_SHOW_EXTENDED_DN;
if (all_partitions) {
- struct ldb_search_options_control *control;
- control = talloc(down_req, struct ldb_search_options_control);
- control->search_options = 2;
- ret = ldb_request_replace_control(down_req,
- LDB_CONTROL_SEARCH_OPTIONS_OID,
- true, control);
- if (ret != LDB_SUCCESS) {
- ldb_oom(ldb_module_get_ctx(module));
- return ret;
- }
+ dsdb_flags |= DSDB_SEARCH_SEARCH_ALL_PARTITIONS;
+ }
+
+ ret = dsdb_request_add_controls(down_req, dsdb_flags);
+ if (ret != LDB_SUCCESS) {
+ return ret;
}
/* perform the search */