summaryrefslogtreecommitdiff
path: root/source4
diff options
context:
space:
mode:
Diffstat (limited to 'source4')
-rw-r--r--source4/dsdb/samdb/cracknames.c81
1 files changed, 24 insertions, 57 deletions
diff --git a/source4/dsdb/samdb/cracknames.c b/source4/dsdb/samdb/cracknames.c
index f0bd5d23ab..3095ee2d46 100644
--- a/source4/dsdb/samdb/cracknames.c
+++ b/source4/dsdb/samdb/cracknames.c
@@ -34,6 +34,7 @@
#include "auth/auth.h"
#include "../lib/util/util_ldb.h"
#include "dsdb/samdb/samdb.h"
+#include "dsdb/common/util.h"
#include "param/param.h"
static WERROR DsCrackNameOneFilter(struct ldb_context *sam_ctx, TALLOC_CTX *mem_ctx,
@@ -721,7 +722,6 @@ static WERROR DsCrackNameOneFilter(struct ldb_context *sam_ctx, TALLOC_CTX *mem_
const char * const *result_attrs;
struct ldb_message **result_res = NULL;
struct ldb_message *result = NULL;
- struct ldb_dn *result_basedn = NULL;
int i;
char *p;
struct ldb_dn *partitions_basedn = samdb_partitions_dn(sam_ctx, mem_ctx);
@@ -809,66 +809,33 @@ static WERROR DsCrackNameOneFilter(struct ldb_context *sam_ctx, TALLOC_CTX *mem_
if (result_filter) {
int ret;
struct ldb_result *res;
- if (domain_res) {
- result_basedn = samdb_result_dn(sam_ctx, mem_ctx, domain_res->msgs[0], "ncName", NULL);
+ uint32_t dsdb_flags = 0;
+ struct ldb_dn *search_dn;
- ret = ldb_search(sam_ctx, mem_ctx, &res,
- result_basedn, LDB_SCOPE_SUBTREE,
- result_attrs, "%s", result_filter);
- if (ret != LDB_SUCCESS) {
- talloc_free(result_res);
- info1->status = DRSUAPI_DS_NAME_STATUS_RESOLVE_ERROR;
- return WERR_OK;
- }
- ldb_ret = res->count;
- result_res = res->msgs;
+ if (domain_res) {
+ dsdb_flags = 0;
+ search_dn = samdb_result_dn(sam_ctx, mem_ctx, domain_res->msgs[0], "ncName", NULL);
} else {
- /* search with the 'phantom root' flag */
- struct ldb_request *req;
-
- res = talloc_zero(mem_ctx, struct ldb_result);
- W_ERROR_HAVE_NO_MEMORY(res);
-
- ret = ldb_build_search_req(&req, sam_ctx, mem_ctx,
- ldb_get_root_basedn(sam_ctx),
- LDB_SCOPE_SUBTREE,
- result_filter,
- result_attrs,
- NULL,
- res,
- ldb_search_default_callback,
- NULL);
- if (ret == LDB_SUCCESS) {
- struct ldb_search_options_control *search_options;
- search_options = talloc(req, struct ldb_search_options_control);
- W_ERROR_HAVE_NO_MEMORY(search_options);
- search_options->search_options = LDB_SEARCH_OPTION_PHANTOM_ROOT;
-
- ret = ldb_request_add_control(req, LDB_CONTROL_SEARCH_OPTIONS_OID, false, search_options);
- }
- if (ret != LDB_SUCCESS) {
- talloc_free(res);
- info1->status = DRSUAPI_DS_NAME_STATUS_RESOLVE_ERROR;
- return WERR_OK;
- }
-
- ret = ldb_request(sam_ctx, req);
-
- if (ret == LDB_SUCCESS) {
- ret = ldb_wait(req->handle, LDB_WAIT_ALL);
- }
-
- talloc_free(req);
+ dsdb_flags = DSDB_SEARCH_SEARCH_ALL_PARTITIONS;
+ search_dn = ldb_get_root_basedn(sam_ctx);
+ }
- if (ret != LDB_SUCCESS) {
- DEBUG(2, ("DsCrackNameOneFilter phantom root search failed: %s",
- ldb_errstring(sam_ctx)));
- info1->status = DRSUAPI_DS_NAME_STATUS_RESOLVE_ERROR;
- return WERR_OK;
- }
- ldb_ret = res->count;
- result_res = res->msgs;
+ /* search with the 'phantom root' flag */
+ ret = dsdb_search(sam_ctx, mem_ctx, &res,
+ search_dn,
+ LDB_SCOPE_SUBTREE,
+ result_attrs,
+ DSDB_SEARCH_SEARCH_ALL_PARTITIONS,
+ "%s", result_filter);
+ if (ret != LDB_SUCCESS) {
+ DEBUG(2, ("DsCrackNameOneFilter phantom root search failed: %s",
+ ldb_errstring(sam_ctx)));
+ info1->status = DRSUAPI_DS_NAME_STATUS_RESOLVE_ERROR;
+ return WERR_OK;
}
+
+ ldb_ret = res->count;
+ result_res = res->msgs;
} else if (format_offered == DRSUAPI_DS_NAME_FORMAT_FQDN_1779) {
ldb_ret = gendb_search_dn(sam_ctx, mem_ctx, name_dn, &result_res,
result_attrs);