summaryrefslogtreecommitdiff
path: root/source/auth/auth_util.c
diff options
context:
space:
mode:
authorAndrew Bartlett <abartlet@samba.org>2002-06-24 01:51:11 +0000
committerAndrew Bartlett <abartlet@samba.org>2002-06-24 01:51:11 +0000
commit87eba4c811293d2428bfb9bc36de22e66dce7f8b (patch)
treeddf64ad2d2240809707d9b1555a84e3e53efa31d /source/auth/auth_util.c
parent4a57c445dd4354034fc41b132a484afe6ab66e16 (diff)
downloadsamba-87eba4c811293d2428bfb9bc36de22e66dce7f8b.tar.gz
Try to get security=domain at least slightly working.
The previous code both had basic logic flaws in it, and some subtle issues regarding the Win2k info3 response. I've tested this against Samba (it looks like that was missed last time due to the 'called name' corruption - which broke my testsuite) and accomidated what I've seen from a info3 printout jmcd gave me. I'll get this tested fully as soon as I get my VMware going again. Andrew Bartlett
Diffstat (limited to 'source/auth/auth_util.c')
-rw-r--r--source/auth/auth_util.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/source/auth/auth_util.c b/source/auth/auth_util.c
index a66cd6ffc73..3ade220c0f0 100644
--- a/source/auth/auth_util.c
+++ b/source/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);