MyLogonUser: Pass the sub status to the caller.

svn path=/trunk/; revision=62369
This commit is contained in:
Eric Kohl 2014-03-01 20:45:10 +00:00
parent dae5c99d12
commit 5012425e7f
4 changed files with 66 additions and 49 deletions

View file

@ -7,7 +7,7 @@
#include "msgina.h" #include "msgina.h"
BOOL NTSTATUS
ConnectToLsa( ConnectToLsa(
PGINA_CONTEXT pgContext) PGINA_CONTEXT pgContext)
{ {
@ -18,7 +18,7 @@ ConnectToLsa(
/* We are already connected to the LSA */ /* We are already connected to the LSA */
if (pgContext->LsaHandle != NULL) if (pgContext->LsaHandle != NULL)
return TRUE; return STATUS_SUCCESS;
/* Connect to the LSA server */ /* Connect to the LSA server */
RtlInitAnsiString((PANSI_STRING)&LogonProcessName, RtlInitAnsiString((PANSI_STRING)&LogonProcessName,
@ -30,7 +30,7 @@ ConnectToLsa(
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{ {
ERR("LsaRegisterLogonProcess failed (Status 0x%08lx)\n", Status); ERR("LsaRegisterLogonProcess failed (Status 0x%08lx)\n", Status);
return FALSE; return Status;
} }
/* Get the authentication package */ /* Get the authentication package */
@ -43,21 +43,21 @@ ConnectToLsa(
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{ {
ERR("LsaLookupAuthenticationPackage failed (Status 0x%08lx)\n", Status); ERR("LsaLookupAuthenticationPackage failed (Status 0x%08lx)\n", Status);
return FALSE;
} }
return TRUE; return Status;
} }
BOOL NTSTATUS
MyLogonUser( MyLogonUser(
HANDLE LsaHandle, HANDLE LsaHandle,
ULONG AuthenticationPackage, ULONG AuthenticationPackage,
LPWSTR lpszUsername, LPWSTR lpszUsername,
LPWSTR lpszDomain, LPWSTR lpszDomain,
LPWSTR lpszPassword, LPWSTR lpszPassword,
PHANDLE phToken) PHANDLE phToken,
PNTSTATUS SubStatus)
{ {
SID_IDENTIFIER_AUTHORITY LocalAuthority = {SECURITY_LOCAL_SID_AUTHORITY}; SID_IDENTIFIER_AUTHORITY LocalAuthority = {SECURITY_LOCAL_SID_AUTHORITY};
SID_IDENTIFIER_AUTHORITY SystemAuthority = {SECURITY_NT_AUTHORITY}; SID_IDENTIFIER_AUTHORITY SystemAuthority = {SECURITY_NT_AUTHORITY};
@ -78,7 +78,6 @@ MyLogonUser(
LUID LogonId = {0, 0}; LUID LogonId = {0, 0};
HANDLE TokenHandle = NULL; HANDLE TokenHandle = NULL;
QUOTA_LIMITS QuotaLimits; QUOTA_LIMITS QuotaLimits;
NTSTATUS SubStatus = STATUS_SUCCESS;
NTSTATUS Status; NTSTATUS Status;
*phToken = NULL; *phToken = NULL;
@ -209,7 +208,7 @@ MyLogonUser(
&Luid, &Luid,
&TokenHandle, &TokenHandle,
&QuotaLimits, &QuotaLimits,
&SubStatus); SubStatus);
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{ {
ERR("LsaLogonUser failed (Status 0x%08lx)\n", Status); ERR("LsaLogonUser failed (Status 0x%08lx)\n", Status);
@ -259,13 +258,7 @@ done:
if (AuthInfo != NULL) if (AuthInfo != NULL)
RtlFreeHeap(RtlGetProcessHeap(), 0, AuthInfo); RtlFreeHeap(RtlGetProcessHeap(), 0, AuthInfo);
if (!NT_SUCCESS(Status)) return Status;
{
SetLastError(RtlNtStatusToDosError(Status));
return FALSE;
}
return TRUE;
} }
/* EOF */ /* EOF */

View file

@ -612,20 +612,27 @@ DoAdminUnlock(
ULONG Size; ULONG Size;
ULONG i; ULONG i;
NTSTATUS Status; NTSTATUS Status;
NTSTATUS SubStatus = STATUS_SUCCESS;
TRACE("(%S %S %S)\n", UserName, Domain, Password); TRACE("(%S %S %S)\n", UserName, Domain, Password);
if (!ConnectToLsa(pgContext)) Status = ConnectToLsa(pgContext);
return FALSE; if (!NT_SUCCESS(Status))
if (!MyLogonUser(pgContext->LsaHandle,
pgContext->AuthenticationPackage,
UserName,
Domain,
Password,
&pgContext->UserToken))
{ {
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; return FALSE;
} }
@ -693,18 +700,26 @@ DoLoginTasks(
DWORD cbStats, cbSize; DWORD cbStats, cbSize;
DWORD dwLength; DWORD dwLength;
BOOL bResult; BOOL bResult;
NTSTATUS SubStatus;
NTSTATUS Status;
if (!ConnectToLsa(pgContext)) Status = ConnectToLsa(pgContext);
return FALSE; if (!NT_SUCCESS(Status))
if (!MyLogonUser(pgContext->LsaHandle,
pgContext->AuthenticationPackage,
UserName,
Domain,
Password,
&pgContext->UserToken))
{ {
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; goto cleanup;
} }

View file

@ -81,18 +81,19 @@ typedef struct _GINA_UI
/* lsa.c */ /* lsa.c */
BOOL NTSTATUS
ConnectToLsa( ConnectToLsa(
PGINA_CONTEXT pgContext); PGINA_CONTEXT pgContext);
BOOL NTSTATUS
MyLogonUser( MyLogonUser(
HANDLE LsaHandle, HANDLE LsaHandle,
ULONG AuthenticationPackage, ULONG AuthenticationPackage,
LPWSTR lpszUsername, LPWSTR lpszUsername,
LPWSTR lpszDomain, LPWSTR lpszDomain,
LPWSTR lpszPassword, LPWSTR lpszPassword,
PHANDLE phToken); PHANDLE phToken,
PNTSTATUS SubStatus);
/* msgina.c */ /* msgina.c */

View file

@ -221,6 +221,8 @@ TUILockedSAS(
HANDLE hToken; HANDLE hToken;
WCHAR UserName[256]; WCHAR UserName[256];
WCHAR Password[256]; WCHAR Password[256];
NTSTATUS SubStatus;
NTSTATUS Status;
TRACE("TUILockedSAS()\n"); TRACE("TUILockedSAS()\n");
@ -235,17 +237,23 @@ TUILockedSAS(
if (!ReadString(IDS_ASKFORPASSWORD, Password, 256, FALSE)) if (!ReadString(IDS_ASKFORPASSWORD, Password, 256, FALSE))
return WLX_SAS_ACTION_NONE; return WLX_SAS_ACTION_NONE;
if (!ConnectToLsa(pgContext)) Status = ConnectToLsa(pgContext);
return WLX_SAS_ACTION_NONE; if (!NT_SUCCESS(Status))
if (!MyLogonUser(pgContext->LsaHandle,
pgContext->AuthenticationPackage,
UserName,
NULL,
Password,
&hToken))
{ {
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; return WLX_SAS_ACTION_NONE;
} }