summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/auth/auth_domain.c3
-rw-r--r--source3/auth/auth_util.c18
2 files changed, 13 insertions, 8 deletions
diff --git a/source3/auth/auth_domain.c b/source3/auth/auth_domain.c
index 8c6bb8908f..ee486d3f30 100644
--- a/source3/auth/auth_domain.c
+++ b/source3/auth/auth_domain.c
@@ -332,7 +332,8 @@ static NTSTATUS domain_client_validate(TALLOC_CTX *mem_ctx,
user_info->domain.str, cli->srv_name_slash,
nt_errstr(nt_status)));
} else {
- nt_status = make_server_info_info3(mem_ctx, domain, server_info, &info3);
+ nt_status = make_server_info_info3(mem_ctx, user_info->internal_username.str,
+ user_info->smb_name.str, domain, server_info, &info3);
#if 0
/* The stuff doesn't work right yet */
SMB_ASSERT(sizeof((*server_info)->session_key) == sizeof(info3.user_sess_key));
diff --git a/source3/auth/auth_util.c b/source3/auth/auth_util.c
index a66cd6ffc7..3ade220c0f 100644
--- a/source3/auth/auth_util.c
+++ b/source3/auth/auth_util.c
@@ -570,14 +570,16 @@ BOOL make_server_info_guest(auth_serversupplied_info **server_info)
***************************************************************************/
NTSTATUS make_server_info_info3(TALLOC_CTX *mem_ctx,
+ const char *internal_username,
+ const char *sent_nt_username,
const char *domain,
auth_serversupplied_info **server_info,
NET_USER_INFO_3 *info3)
{
NTSTATUS nt_status = NT_STATUS_OK;
- char *nt_domain;
- char *nt_username;
+ const char *nt_domain;
+ const char *nt_username;
SAM_ACCOUNT *sam_account = NULL;
DOM_SID user_sid;
@@ -605,11 +607,13 @@ NTSTATUS make_server_info_info3(TALLOC_CTX *mem_ctx,
}
if (!(nt_username = unistr2_tdup(mem_ctx, &(info3->uni_user_name)))) {
- return NT_STATUS_NO_MEMORY;
+ /* If the server didn't give us one, just use the one we sent them */
+ nt_username = sent_nt_username;
}
if (!(nt_domain = unistr2_tdup(mem_ctx, &(info3->uni_logon_dom)))) {
- return NT_STATUS_NO_MEMORY;
+ /* If the server didn't give us one, just use the one we sent them */
+ domain = domain;
}
if (winbind_sid_to_uid(&uid, &user_sid)
@@ -622,7 +626,7 @@ NTSTATUS make_server_info_info3(TALLOC_CTX *mem_ctx,
dom_user = talloc_asprintf(mem_ctx, "%s%s%s",
nt_domain,
lp_winbind_separator(),
- nt_username);
+ internal_username);
if (!dom_user) {
DEBUG(0, ("talloc_asprintf failed!\n"));
@@ -634,10 +638,10 @@ NTSTATUS make_server_info_info3(TALLOC_CTX *mem_ctx,
domain, we don't want this for
trusted domains */
&& strequal(nt_domain, lp_workgroup())) {
- passwd = Get_Pwnam(nt_username);
+ passwd = Get_Pwnam(internal_username);
}
- if (passwd) {
+ if (!passwd) {
return NT_STATUS_NO_SUCH_USER;
} else {
nt_status = pdb_init_sam_pw(&sam_account, passwd);