diff options
-rw-r--r-- | source3/auth/auth_compat.c | 53 | ||||
-rw-r--r-- | source3/auth/auth_util.c | 20 |
2 files changed, 41 insertions, 32 deletions
diff --git a/source3/auth/auth_compat.c b/source3/auth/auth_compat.c index 28a9780d3f..8cf304a071 100644 --- a/source3/auth/auth_compat.c +++ b/source3/auth/auth_compat.c @@ -31,8 +31,34 @@ SMB hash return True if the password is correct, False otherwise ****************************************************************************/ -static NTSTATUS pass_check_smb(char *smb_name, - char *domain, +NTSTATUS check_plaintext_password(const char *smb_name, DATA_BLOB plaintext_password, auth_serversupplied_info **server_info) +{ + struct auth_context *plaintext_auth_context = NULL; + auth_usersupplied_info *user_info = NULL; + const uint8 *chal; + NTSTATUS nt_status; + if (!NT_STATUS_IS_OK(nt_status = make_auth_context_subsystem(&plaintext_auth_context))) { + return nt_status; + } + + chal = plaintext_auth_context->get_ntlm_challenge(plaintext_auth_context); + + if (!make_user_info_for_reply(&user_info, + smb_name, lp_workgroup(), chal, + plaintext_password)) { + return NT_STATUS_NO_MEMORY; + } + + nt_status = plaintext_auth_context->check_ntlm_password(plaintext_auth_context, + user_info, server_info); + + (plaintext_auth_context->free)(&plaintext_auth_context); + free_user_info(&user_info); + return nt_status; +} + +static NTSTATUS pass_check_smb(const char *smb_name, + const char *domain, DATA_BLOB lm_pwd, DATA_BLOB nt_pwd, DATA_BLOB plaintext_password, @@ -40,37 +66,20 @@ static NTSTATUS pass_check_smb(char *smb_name, { NTSTATUS nt_status; - auth_usersupplied_info *user_info = NULL; extern struct auth_context *negprot_global_auth_context; auth_serversupplied_info *server_info = NULL; if (encrypted) { + auth_usersupplied_info *user_info = NULL; make_user_info_for_reply_enc(&user_info, smb_name, domain, lm_pwd, nt_pwd); nt_status = negprot_global_auth_context->check_ntlm_password(negprot_global_auth_context, user_info, &server_info); + free_user_info(&user_info); } else { - struct auth_context *plaintext_auth_context = NULL; - const uint8 *chal; - if (!NT_STATUS_IS_OK(nt_status = make_auth_context_subsystem(&plaintext_auth_context))) { - return nt_status; - } - - chal = plaintext_auth_context->get_ntlm_challenge(plaintext_auth_context); - - if (!make_user_info_for_reply(&user_info, - smb_name, domain, chal, - plaintext_password)) { - return NT_STATUS_NO_MEMORY; - } - - nt_status = plaintext_auth_context->check_ntlm_password(plaintext_auth_context, - user_info, &server_info); - - (plaintext_auth_context->free)(&plaintext_auth_context); + nt_status = check_plaintext_password(smb_name, plaintext_password, &server_info); } - free_user_info(&user_info); free_server_info(&server_info); return nt_status; } diff --git a/source3/auth/auth_util.c b/source3/auth/auth_util.c index 0839b19665..5b252f42cd 100644 --- a/source3/auth/auth_util.c +++ b/source3/auth/auth_util.c @@ -241,11 +241,11 @@ BOOL make_user_info_map(auth_usersupplied_info **user_info, ****************************************************************************/ BOOL make_user_info_netlogon_network(auth_usersupplied_info **user_info, - char *smb_name, - char *client_domain, - char *wksta_name, - uchar *lm_network_pwd, int lm_pwd_len, - uchar *nt_network_pwd, int nt_pwd_len) + const char *smb_name, + const char *client_domain, + const char *wksta_name, + const uchar *lm_network_pwd, int lm_pwd_len, + const uchar *nt_network_pwd, int nt_pwd_len) { BOOL ret; DATA_BLOB lm_blob = data_blob(lm_network_pwd, lm_pwd_len); @@ -361,8 +361,8 @@ BOOL make_user_info_netlogon_interactive(auth_usersupplied_info **user_info, ****************************************************************************/ BOOL make_user_info_for_reply(auth_usersupplied_info **user_info, - char *smb_name, - char *client_domain, + const char *smb_name, + const char *client_domain, const uint8 chal[8], DATA_BLOB plaintext_password) { @@ -416,9 +416,9 @@ BOOL make_user_info_for_reply(auth_usersupplied_info **user_info, ****************************************************************************/ BOOL make_user_info_for_reply_enc(auth_usersupplied_info **user_info, - char *smb_name, - char *client_domain, - DATA_BLOB lm_resp, DATA_BLOB nt_resp) + const char *smb_name, + const char *client_domain, + DATA_BLOB lm_resp, DATA_BLOB nt_resp) { uint32 auth_flags = AUTH_FLAG_NONE; |