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"
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 */

View file

@ -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;
}

View file

@ -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 */

View file

@ -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;
}