From ed5fd7117e931b2fce2c2a94adc53eeb3d8a8256 Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Fri, 27 Aug 2004 13:39:09 +0000 Subject: [PATCH] r2086: fix bug with winbindd_getpwnam() caused by Microsoft DC's not filling in the username in the user_info3 (This used to be commit 4703a71fa88dff8bdc932f6c9af3a9d25a88938f) --- source3/auth/auth_domain.c | 2 +- source3/libsmb/samlogon_cache.c | 11 ++++++++++- source3/nsswitch/winbindd_pam.c | 4 ++-- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/source3/auth/auth_domain.c b/source3/auth/auth_domain.c index fdff0b52f96..6483dc143a0 100644 --- a/source3/auth/auth_domain.c +++ b/source3/auth/auth_domain.c @@ -205,7 +205,7 @@ static NTSTATUS domain_client_validate(TALLOC_CTX *mem_ctx, } else { nt_status = make_server_info_info3(mem_ctx, user_info->internal_username.str, user_info->smb_name.str, domain, server_info, &info3); - netsamlogon_cache_store( mem_ctx, &info3 ); + netsamlogon_cache_store( mem_ctx, user_info->smb_name.str, &info3 ); } #if 0 diff --git a/source3/libsmb/samlogon_cache.c b/source3/libsmb/samlogon_cache.c index 4cd642c4e35..0105bc08c3a 100644 --- a/source3/libsmb/samlogon_cache.c +++ b/source3/libsmb/samlogon_cache.c @@ -106,9 +106,10 @@ void netsamlogon_clear_cached_user(TDB_CONTEXT *tdb, NET_USER_INFO_3 *user) /*********************************************************************** Store a NET_USER_INFO_3 structure in a tdb for later user + username should be in UTF-8 format ***********************************************************************/ -BOOL netsamlogon_cache_store(TALLOC_CTX *mem_ctx, NET_USER_INFO_3 *user) +BOOL netsamlogon_cache_store(TALLOC_CTX *mem_ctx, const char * username, NET_USER_INFO_3 *user) { TDB_DATA data; fstring keystr; @@ -130,6 +131,14 @@ BOOL netsamlogon_cache_store(TALLOC_CTX *mem_ctx, NET_USER_INFO_3 *user) slprintf(keystr, sizeof(keystr), "%s", sid_string_static(&user_sid)); DEBUG(10,("netsamlogon_cache_store: SID [%s]\n", keystr)); + + /* only Samba fills in the username, not sure why NT doesn't */ + /* so we fill it in since winbindd_getpwnam() makes use of it */ + + if ( !user->uni_user_name.buffer ) { + init_unistr2( &user->uni_user_name, username, STR_TERMINATE ); + init_uni_hdr( &user->hdr_user_name, &user->uni_user_name ); + } /* Prepare data */ diff --git a/source3/nsswitch/winbindd_pam.c b/source3/nsswitch/winbindd_pam.c index 03947de8750..08913a35a48 100644 --- a/source3/nsswitch/winbindd_pam.c +++ b/source3/nsswitch/winbindd_pam.c @@ -283,7 +283,7 @@ enum winbindd_result winbindd_pam_auth(struct winbindd_cli_state *state) } if (NT_STATUS_IS_OK(result)) { - netsamlogon_cache_store( cli->mem_ctx, &info3 ); + netsamlogon_cache_store( cli->mem_ctx, name_user, &info3 ); wcache_invalidate_samlogon(find_domain_from_name(name_domain), &info3); /* Check if the user is in the right group */ @@ -538,7 +538,7 @@ enum winbindd_result winbindd_pam_auth_crap(struct winbindd_cli_state *state) } if (NT_STATUS_IS_OK(result)) { - netsamlogon_cache_store( cli->mem_ctx, &info3 ); + netsamlogon_cache_store( cli->mem_ctx, name_user, &info3 ); wcache_invalidate_samlogon(find_domain_from_name(name_domain), &info3); if (!NT_STATUS_IS_OK(result = check_info3_in_group(mem_ctx, &info3, state->request.data.auth_crap.required_membership_sid))) {