From 1e842f0e6354be2035ef08a89b21d84066b538c3 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Sun, 26 Feb 2017 17:09:21 +0000 Subject: [PATCH] [CREDUI] Sync with Wine Staging 2.2. CORE-12823 848f478 credui: Split domain from username in SspiPromptForCredentialsW. svn path=/trunk/; revision=73944 --- reactos/dll/win32/credui/credui_main.c | 34 +++++++++++++++++++++----- reactos/media/doc/README.WINE | 2 +- 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/reactos/dll/win32/credui/credui_main.c b/reactos/dll/win32/credui/credui_main.c index 0a3476154bc..3867af37166 100644 --- a/reactos/dll/win32/credui/credui_main.c +++ b/reactos/dll/win32/credui/credui_main.c @@ -911,23 +911,45 @@ ULONG SEC_ENTRY SspiPromptForCredentialsW( PCWSTR target, void *info, if (!(ret = CredUIPromptForCredentialsW( cred_info, target, NULL, error, username, len_username, password, len_password, save, flags ))) { - DWORD size = sizeof(*id); - WCHAR *ptr; + DWORD size = sizeof(*id), len_domain = 0; + WCHAR *ptr, *user = username, *domain = NULL; - len_username = strlenW( username ); + if ((ptr = strchrW( username, '\\' ))) + { + user = ptr + 1; + len_username = strlenW( user ); + if (!strcmpiW( package, ntlmW ) || !strcmpiW( package, negotiateW )) + { + domain = username; + len_domain = ptr - username; + } + *ptr = 0; + } + else len_username = strlenW( username ); len_password = strlenW( password ); size += (len_username + 1) * sizeof(WCHAR); + size += (len_domain + 1) * sizeof(WCHAR); size += (len_password + 1) * sizeof(WCHAR); if (!(id = HeapAlloc( GetProcessHeap(), 0, size ))) return ERROR_OUTOFMEMORY; ptr = (WCHAR *)(id + 1); - memcpy( ptr, username, (len_username + 1) * sizeof(WCHAR) ); + memcpy( ptr, user, (len_username + 1) * sizeof(WCHAR) ); id->User = ptr; id->UserLength = len_username; ptr += len_username + 1; - id->Domain = NULL; - id->DomainLength = 0; + if (len_domain) + { + memcpy( ptr, domain, (len_domain + 1) * sizeof(WCHAR) ); + id->Domain = ptr; + id->DomainLength = len_domain; + ptr += len_domain + 1; + } + else + { + id->Domain = NULL; + id->DomainLength = 0; + } memcpy( ptr, password, (len_password + 1) * sizeof(WCHAR) ); id->Password = ptr; id->PasswordLength = len_password; diff --git a/reactos/media/doc/README.WINE b/reactos/media/doc/README.WINE index 2976dfe7de7..a4c1a11d64b 100644 --- a/reactos/media/doc/README.WINE +++ b/reactos/media/doc/README.WINE @@ -57,7 +57,7 @@ reactos/dll/win32/comcat # Synced to WineStaging-1.9.11 reactos/dll/win32/comctl32 # Synced to WineStaging-1.9.23 reactos/dll/win32/comdlg32 # Synced to WineStaging-1.9.23 reactos/dll/win32/compstui # Synced to WineStaging-2.2 -reactos/dll/win32/credui # Synced to WineStaging-1.9.16 +reactos/dll/win32/credui # Synced to WineStaging-2.2 reactos/dll/win32/crypt32 # Synced to WineStaging-1.9.23 reactos/dll/win32/cryptdlg # Synced to WineStaging-1.9.11 reactos/dll/win32/cryptdll # Synced to WineStaging-1.9.11