From: Stefan Metzmacher Date: Mon, 19 Jun 2017 06:39:19 +0000 (+0200) Subject: s4:dsdb/samdb: pass an existing 'struct ldb_context' to crack_name_to_nt4_name() X-Git-Tag: tdb-1.3.14~186 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f0541309d77e51e1169d6a534b5e11bd3a24d4cd;p=thirdparty%2Fsamba.git s4:dsdb/samdb: pass an existing 'struct ldb_context' to crack_name_to_nt4_name() There's no point in creating a temporary ldb_context as all direct callers already have a valid struct ldb_context for the local sam. Signed-off-by: Stefan Metzmacher Reviewed-by: Andrew Bartlett --- diff --git a/source4/auth/ntlm/auth_sam.c b/source4/auth/ntlm/auth_sam.c index ee4a054c8c7..24fe1677ed3 100644 --- a/source4/auth/ntlm/auth_sam.c +++ b/source4/auth/ntlm/auth_sam.c @@ -648,8 +648,7 @@ static NTSTATUS authsam_check_password_internals(struct auth_method_context *ctx bool is_my_domain = false; nt_status = crack_name_to_nt4_name(mem_ctx, - ctx->auth_ctx->event_ctx, - ctx->auth_ctx->lp_ctx, + ctx->auth_ctx->sam_ctx, /* * DRSUAPI_DS_NAME_FORMAT_UPN_FOR_LOGON ? */ diff --git a/source4/auth/ntlm/auth_winbind.c b/source4/auth/ntlm/auth_winbind.c index 84f278ddd85..7308a17a6bc 100644 --- a/source4/auth/ntlm/auth_winbind.c +++ b/source4/auth/ntlm/auth_winbind.c @@ -208,8 +208,7 @@ static NTSTATUS winbind_check_password(struct auth_method_context *ctx, const char *nt4_account = NULL; status = crack_name_to_nt4_name(mem_ctx, - ctx->auth_ctx->event_ctx, - ctx->auth_ctx->lp_ctx, + ctx->auth_ctx->sam_ctx, DRSUAPI_DS_NAME_FORMAT_USER_PRINCIPAL, account_name, &nt4_domain, &nt4_account); diff --git a/source4/dsdb/samdb/cracknames.c b/source4/dsdb/samdb/cracknames.c index 596343a5be8..a361238d53f 100644 --- a/source4/dsdb/samdb/cracknames.c +++ b/source4/dsdb/samdb/cracknames.c @@ -1378,15 +1378,13 @@ NTSTATUS crack_service_principal_name(struct ldb_context *sam_ctx, } NTSTATUS crack_name_to_nt4_name(TALLOC_CTX *mem_ctx, - struct tevent_context *ev_ctx, - struct loadparm_context *lp_ctx, + struct ldb_context *ldb, enum drsuapi_DsNameFormat format_offered, const char *name, const char **nt4_domain, const char **nt4_account) { WERROR werr; struct drsuapi_DsNameInfo1 info1; - struct ldb_context *ldb; char *p; /* Handle anonymous bind */ @@ -1396,11 +1394,6 @@ NTSTATUS crack_name_to_nt4_name(TALLOC_CTX *mem_ctx, return NT_STATUS_OK; } - ldb = samdb_connect(mem_ctx, ev_ctx, lp_ctx, system_session(lp_ctx), 0); - if (ldb == NULL) { - return NT_STATUS_INTERNAL_DB_CORRUPTION; - } - werr = DsCrackNameOneName(ldb, mem_ctx, 0, format_offered, DRSUAPI_DS_NAME_FORMAT_NT4_ACCOUNT, @@ -1447,6 +1440,7 @@ NTSTATUS crack_auto_name_to_nt4_name(TALLOC_CTX *mem_ctx, const char **nt4_domain, const char **nt4_account) { + struct ldb_context *ldb = NULL; enum drsuapi_DsNameFormat format_offered = DRSUAPI_DS_NAME_FORMAT_UNKNOWN; /* Handle anonymous bind */ @@ -1468,7 +1462,11 @@ NTSTATUS crack_auto_name_to_nt4_name(TALLOC_CTX *mem_ctx, return NT_STATUS_NO_SUCH_USER; } - return crack_name_to_nt4_name(mem_ctx, ev_ctx, lp_ctx, format_offered, name, nt4_domain, nt4_account); + ldb = samdb_connect(mem_ctx, ev_ctx, lp_ctx, system_session(lp_ctx), 0); + if (ldb == NULL) { + return NT_STATUS_INTERNAL_DB_CORRUPTION; + } + return crack_name_to_nt4_name(mem_ctx, ldb, format_offered, name, nt4_domain, nt4_account); } diff --git a/source4/rpc_server/lsa/lsa_lookup.c b/source4/rpc_server/lsa/lsa_lookup.c index f4da0b4886b..f54b118b5e8 100644 --- a/source4/rpc_server/lsa/lsa_lookup.c +++ b/source4/rpc_server/lsa/lsa_lookup.c @@ -263,7 +263,10 @@ static NTSTATUS dcesrv_lsa_lookup_name(struct tevent_context *ev_ctx, } username = p + 1; } else if (strchr_m(name, '@')) { - status = crack_name_to_nt4_name(mem_ctx, ev_ctx, lp_ctx, DRSUAPI_DS_NAME_FORMAT_USER_PRINCIPAL, name, &domain, &username); + status = crack_name_to_nt4_name(mem_ctx, + state->sam_ldb, + DRSUAPI_DS_NAME_FORMAT_USER_PRINCIPAL, + name, &domain, &username); if (!NT_STATUS_IS_OK(status)) { DEBUG(3, ("Failed to crack name %s into an NT4 name: %s\n", name, nt_errstr(status))); return status;