s4:dsdb/samdb: pass an existing 'struct ldb_context' to crack_name_to_nt4_name()
authorStefan Metzmacher <metze@samba.org>
Mon, 19 Jun 2017 06:39:19 +0000 (08:39 +0200)
committerStefan Metzmacher <metze@samba.org>
Mon, 26 Jun 2017 06:47:15 +0000 (08:47 +0200)
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 <metze@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
source4/auth/ntlm/auth_sam.c
source4/auth/ntlm/auth_winbind.c
source4/dsdb/samdb/cracknames.c
source4/rpc_server/lsa/lsa_lookup.c

index ee4a054c8c7fb342e95246eb35bce26cae1de2df..24fe1677ed3c035eba0a6045285ae2b6c1724614 100644 (file)
@@ -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 ?
                                                    */
index 84f278ddd852fa1ca0d4a94b9409b7b873b0717b..7308a17a6bcbd7e7c0bf6a575615c536c57a3064 100644 (file)
@@ -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);
index 596343a5be82dafdda051773372795a933c311c8..a361238d53f0728bbbe73ddf69ecbcda506405b6 100644 (file)
@@ -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);
 }
 
 
index f4da0b4886bddfd5b34eb62b9cf2a61163ab2a2e..f54b118b5e8183cf48717e568393ad53d7bbb475 100644 (file)
@@ -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;