From 5012425e7fb1fb2546f0184457ed89c48114c8de Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sat, 1 Mar 2014 20:45:10 +0000 Subject: [PATCH] [MSGINA] MyLogonUser: Pass the sub status to the caller. svn path=/trunk/; revision=62369 --- reactos/dll/win32/msgina/lsa.c | 25 +++++--------- reactos/dll/win32/msgina/msgina.c | 55 ++++++++++++++++++++----------- reactos/dll/win32/msgina/msgina.h | 7 ++-- reactos/dll/win32/msgina/tui.c | 28 ++++++++++------ 4 files changed, 66 insertions(+), 49 deletions(-) diff --git a/reactos/dll/win32/msgina/lsa.c b/reactos/dll/win32/msgina/lsa.c index 126a55aa5c4..174378f0fcd 100644 --- a/reactos/dll/win32/msgina/lsa.c +++ b/reactos/dll/win32/msgina/lsa.c @@ -7,7 +7,7 @@ #include "msgina.h" -BOOL +NTSTATUS ConnectToLsa( PGINA_CONTEXT pgContext) { @@ -18,7 +18,7 @@ ConnectToLsa( /* We are already connected to the LSA */ if (pgContext->LsaHandle != NULL) - return TRUE; + return STATUS_SUCCESS; /* Connect to the LSA server */ RtlInitAnsiString((PANSI_STRING)&LogonProcessName, @@ -30,7 +30,7 @@ ConnectToLsa( if (!NT_SUCCESS(Status)) { ERR("LsaRegisterLogonProcess failed (Status 0x%08lx)\n", Status); - return FALSE; + return Status; } /* Get the authentication package */ @@ -43,21 +43,21 @@ ConnectToLsa( if (!NT_SUCCESS(Status)) { ERR("LsaLookupAuthenticationPackage failed (Status 0x%08lx)\n", Status); - return FALSE; } - return TRUE; + return Status; } -BOOL +NTSTATUS MyLogonUser( HANDLE LsaHandle, ULONG AuthenticationPackage, LPWSTR lpszUsername, LPWSTR lpszDomain, LPWSTR lpszPassword, - PHANDLE phToken) + PHANDLE phToken, + PNTSTATUS SubStatus) { SID_IDENTIFIER_AUTHORITY LocalAuthority = {SECURITY_LOCAL_SID_AUTHORITY}; SID_IDENTIFIER_AUTHORITY SystemAuthority = {SECURITY_NT_AUTHORITY}; @@ -78,7 +78,6 @@ MyLogonUser( LUID LogonId = {0, 0}; HANDLE TokenHandle = NULL; QUOTA_LIMITS QuotaLimits; - NTSTATUS SubStatus = STATUS_SUCCESS; NTSTATUS Status; *phToken = NULL; @@ -209,7 +208,7 @@ MyLogonUser( &Luid, &TokenHandle, &QuotaLimits, - &SubStatus); + SubStatus); if (!NT_SUCCESS(Status)) { ERR("LsaLogonUser failed (Status 0x%08lx)\n", Status); @@ -259,13 +258,7 @@ done: if (AuthInfo != NULL) RtlFreeHeap(RtlGetProcessHeap(), 0, AuthInfo); - if (!NT_SUCCESS(Status)) - { - SetLastError(RtlNtStatusToDosError(Status)); - return FALSE; - } - - return TRUE; + return Status; } /* EOF */ diff --git a/reactos/dll/win32/msgina/msgina.c b/reactos/dll/win32/msgina/msgina.c index 6f54e20121f..6480cbef32a 100644 --- a/reactos/dll/win32/msgina/msgina.c +++ b/reactos/dll/win32/msgina/msgina.c @@ -612,20 +612,27 @@ DoAdminUnlock( ULONG Size; ULONG i; NTSTATUS Status; + NTSTATUS SubStatus = STATUS_SUCCESS; TRACE("(%S %S %S)\n", UserName, Domain, Password); - if (!ConnectToLsa(pgContext)) - return FALSE; - - if (!MyLogonUser(pgContext->LsaHandle, - pgContext->AuthenticationPackage, - UserName, - Domain, - Password, - &pgContext->UserToken)) + Status = ConnectToLsa(pgContext); + if (!NT_SUCCESS(Status)) { - WARN("LogonUserW() failed\n"); + WARN("ConnectToLsa() failed\n"); + return FALSE; + } + + Status = MyLogonUser(pgContext->LsaHandle, + pgContext->AuthenticationPackage, + UserName, + Domain, + Password, + &pgContext->UserToken, + &SubStatus); + if (!NT_SUCCESS(Status)) + { + WARN("MyLogonUser() failed\n"); return FALSE; } @@ -693,18 +700,26 @@ DoLoginTasks( DWORD cbStats, cbSize; DWORD dwLength; BOOL bResult; + NTSTATUS SubStatus; + NTSTATUS Status; - if (!ConnectToLsa(pgContext)) - return FALSE; - - if (!MyLogonUser(pgContext->LsaHandle, - pgContext->AuthenticationPackage, - UserName, - Domain, - Password, - &pgContext->UserToken)) + Status = ConnectToLsa(pgContext); + if (!NT_SUCCESS(Status)) { - WARN("LogonUserW() failed\n"); + WARN("ConnectToLsa() failed\n"); + return FALSE; + } + + Status = MyLogonUser(pgContext->LsaHandle, + pgContext->AuthenticationPackage, + UserName, + Domain, + Password, + &pgContext->UserToken, + &SubStatus); + if (!NT_SUCCESS(Status)) + { + WARN("MyLogonUser() failed\n"); goto cleanup; } diff --git a/reactos/dll/win32/msgina/msgina.h b/reactos/dll/win32/msgina/msgina.h index 5507b10422b..a6ba264d0cf 100644 --- a/reactos/dll/win32/msgina/msgina.h +++ b/reactos/dll/win32/msgina/msgina.h @@ -81,18 +81,19 @@ typedef struct _GINA_UI /* lsa.c */ -BOOL +NTSTATUS ConnectToLsa( PGINA_CONTEXT pgContext); -BOOL +NTSTATUS MyLogonUser( HANDLE LsaHandle, ULONG AuthenticationPackage, LPWSTR lpszUsername, LPWSTR lpszDomain, LPWSTR lpszPassword, - PHANDLE phToken); + PHANDLE phToken, + PNTSTATUS SubStatus); /* msgina.c */ diff --git a/reactos/dll/win32/msgina/tui.c b/reactos/dll/win32/msgina/tui.c index fb40c421a2d..aa262232659 100644 --- a/reactos/dll/win32/msgina/tui.c +++ b/reactos/dll/win32/msgina/tui.c @@ -221,6 +221,8 @@ TUILockedSAS( HANDLE hToken; WCHAR UserName[256]; WCHAR Password[256]; + NTSTATUS SubStatus; + NTSTATUS Status; TRACE("TUILockedSAS()\n"); @@ -235,17 +237,23 @@ TUILockedSAS( if (!ReadString(IDS_ASKFORPASSWORD, Password, 256, FALSE)) return WLX_SAS_ACTION_NONE; - if (!ConnectToLsa(pgContext)) - return WLX_SAS_ACTION_NONE; - - if (!MyLogonUser(pgContext->LsaHandle, - pgContext->AuthenticationPackage, - UserName, - NULL, - Password, - &hToken)) + Status = ConnectToLsa(pgContext); + if (!NT_SUCCESS(Status)) { - WARN("LogonUserW() failed\n"); + WARN("ConnectToLsa() failed\n"); + return WLX_SAS_ACTION_NONE; + } + + Status = MyLogonUser(pgContext->LsaHandle, + pgContext->AuthenticationPackage, + UserName, + NULL, + Password, + &hToken, + &SubStatus); + if (!NT_SUCCESS(Status)) + { + WARN("MyLogonUser() failed\n"); return WLX_SAS_ACTION_NONE; }