From c3cdc1abae537b3391c383d33f55650e532a41eb Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Mon, 20 Jan 2014 21:23:17 +0000 Subject: [PATCH] [MSGINA] Save the password in the gina-context after successful logon and use it to check the password when unlocking the computer. svn path=/trunk/; revision=61741 --- reactos/dll/win32/msgina/gui.c | 19 +++++++++++++------ reactos/dll/win32/msgina/msgina.c | 9 ++++++++- reactos/dll/win32/msgina/msgina.h | 1 + 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/reactos/dll/win32/msgina/gui.c b/reactos/dll/win32/msgina/gui.c index 8f8d17a7ab0..32d08fbc767 100644 --- a/reactos/dll/win32/msgina/gui.c +++ b/reactos/dll/win32/msgina/gui.c @@ -527,6 +527,12 @@ LoggedOutWindowProc( if (GetTextboxText(hwndDlg, IDC_PASSWORD, &Password) && DoLoginTasks(pgContext, UserName, NULL, Password)) { + pgContext->Password = HeapAlloc(GetProcessHeap(), + HEAP_ZERO_MEMORY, + (wcslen(Password) + 1) * sizeof(WCHAR)); + if (pgContext->Password != NULL) + wcscpy(pgContext->Password, Password); + result = WLX_SAS_ACTION_LOGON; } HeapFree(GetProcessHeap(), 0, UserName); @@ -648,22 +654,23 @@ UnlockWindowProc( { case IDOK: { -#if 0 LPWSTR UserName = NULL, Password = NULL; INT result = WLX_SAS_ACTION_NONE; if (GetTextboxText(hwndDlg, IDC_USERNAME, &UserName) && *UserName == '\0') break; - if (GetTextboxText(hwndDlg, IDC_PASSWORD, &Password) && - DoLoginTasks(pgContext, UserName, NULL, Password)) + if (GetTextboxText(hwndDlg, IDC_PASSWORD, &Password)) { - result = WLX_SAS_ACTION_LOGON; + if (UserName != NULL && Password != NULL && + wcscmp(UserName, pgContext->UserName) == 0 && + wcscmp(Password, pgContext->Password) == 0) + { + result = WLX_SAS_ACTION_UNLOCK_WKSTA; + } } HeapFree(GetProcessHeap(), 0, UserName); HeapFree(GetProcessHeap(), 0, Password); EndDialog(hwndDlg, result); -#endif - EndDialog(hwndDlg, WLX_SAS_ACTION_UNLOCK_WKSTA); return TRUE; } diff --git a/reactos/dll/win32/msgina/msgina.c b/reactos/dll/win32/msgina/msgina.c index fd8da6e6359..8a9ed4355f8 100644 --- a/reactos/dll/win32/msgina/msgina.c +++ b/reactos/dll/win32/msgina/msgina.c @@ -817,7 +817,15 @@ DoAutoLogon( result = DoLoginTasks(pgContext, UserName, DomainName, Password); if (result == TRUE) + { + pgContext->Password = HeapAlloc(GetProcessHeap(), + HEAP_ZERO_MEMORY, + (wcslen(Password) + 1) * sizeof(WCHAR)); + if (pgContext->Password != NULL) + wcscpy(pgContext->Password, Password); + NotifyBootConfigStatus(TRUE); + } } cleanup: @@ -852,7 +860,6 @@ WlxDisplaySASNotice( return; } -// if (CheckAutoAdminLogon(pgContext)) if (pgContext->bAutoAdminLogon == TRUE) { /* Don't display the window, we want to do an automatic logon */ diff --git a/reactos/dll/win32/msgina/msgina.h b/reactos/dll/win32/msgina/msgina.h index 389db6082f5..5dde55567f9 100644 --- a/reactos/dll/win32/msgina/msgina.h +++ b/reactos/dll/win32/msgina/msgina.h @@ -42,6 +42,7 @@ typedef struct /* Information to be filled during logon */ WCHAR UserName[256]; WCHAR Domain[256]; + LPWSTR Password; SYSTEMTIME LogonTime; HANDLE UserToken; PLUID pAuthenticationId; -- 2.17.1