mirror of
https://github.com/reactos/reactos.git
synced 2024-09-09 20:30:04 +00:00
Fix default DACL of the logon token.
svn path=/trunk/; revision=10067
This commit is contained in:
parent
43a041190d
commit
e32637bc50
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: logon.c,v 1.8 2004/07/10 13:12:24 ekohl Exp $
|
/* $Id: logon.c,v 1.9 2004/07/10 21:15:26 ekohl Exp $
|
||||||
*
|
*
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS system libraries
|
* PROJECT: ReactOS system libraries
|
||||||
|
@ -579,7 +579,8 @@ LogonUserW (LPWSTR lpszUsername,
|
||||||
PSID UserSid = NULL;
|
PSID UserSid = NULL;
|
||||||
PSID PrimaryGroupSid = NULL;
|
PSID PrimaryGroupSid = NULL;
|
||||||
PSID OwnerSid = NULL;
|
PSID OwnerSid = NULL;
|
||||||
ACL Dacl;
|
PSID LocalSystemSid;
|
||||||
|
PACL Dacl;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
SID_IDENTIFIER_AUTHORITY SystemAuthority = {SECURITY_NT_AUTHORITY};
|
SID_IDENTIFIER_AUTHORITY SystemAuthority = {SECURITY_NT_AUTHORITY};
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
@ -626,7 +627,7 @@ LogonUserW (LPWSTR lpszUsername,
|
||||||
&OwnerSid);
|
&OwnerSid);
|
||||||
if (NULL == TokenGroups)
|
if (NULL == TokenGroups)
|
||||||
{
|
{
|
||||||
RtlFreeSid (UserSid);
|
RtlFreeSid(UserSid);
|
||||||
SetLastError(ERROR_OUTOFMEMORY);
|
SetLastError(ERROR_OUTOFMEMORY);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -639,7 +640,7 @@ LogonUserW (LPWSTR lpszUsername,
|
||||||
if (NULL == TokenPrivileges)
|
if (NULL == TokenPrivileges)
|
||||||
{
|
{
|
||||||
FreeGroupSids(TokenGroups);
|
FreeGroupSids(TokenGroups);
|
||||||
RtlFreeSid (UserSid);
|
RtlFreeSid(UserSid);
|
||||||
SetLastError(ERROR_OUTOFMEMORY);
|
SetLastError(ERROR_OUTOFMEMORY);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -661,48 +662,85 @@ LogonUserW (LPWSTR lpszUsername,
|
||||||
|
|
||||||
TokenOwner.Owner = OwnerSid;
|
TokenOwner.Owner = OwnerSid;
|
||||||
TokenPrimaryGroup.PrimaryGroup = PrimaryGroupSid;
|
TokenPrimaryGroup.PrimaryGroup = PrimaryGroupSid;
|
||||||
// TokenPrimaryGroup.PrimaryGroup = UserSid;
|
|
||||||
|
|
||||||
Status = RtlCreateAcl (&Dacl, sizeof(ACL), ACL_REVISION);
|
|
||||||
if (!NT_SUCCESS(Status))
|
Dacl = RtlAllocateHeap(GetProcessHeap(), 0, 1024);
|
||||||
|
if (Dacl == NULL)
|
||||||
{
|
{
|
||||||
FreeGroupSids(TokenGroups);
|
FreeGroupSids(TokenGroups);
|
||||||
RtlFreeHeap(GetProcessHeap(), 0, TokenPrivileges);
|
RtlFreeSid(UserSid);
|
||||||
RtlFreeSid (UserSid);
|
SetLastError(ERROR_OUTOFMEMORY);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
TokenDefaultDacl.DefaultDacl = &Dacl;
|
Status = RtlCreateAcl(Dacl, 1024, ACL_REVISION);
|
||||||
|
|
||||||
memcpy (TokenSource.SourceName,
|
|
||||||
"**ANON**",
|
|
||||||
8);
|
|
||||||
Status = NtAllocateLocallyUniqueId (&TokenSource.SourceIdentifier);
|
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
|
RtlFreeHeap(GetProcessHeap(), 0, Dacl);
|
||||||
FreeGroupSids(TokenGroups);
|
FreeGroupSids(TokenGroups);
|
||||||
RtlFreeHeap(GetProcessHeap(), 0, TokenPrivileges);
|
RtlFreeHeap(GetProcessHeap(), 0, TokenPrivileges);
|
||||||
RtlFreeSid (UserSid);
|
RtlFreeSid(UserSid);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = NtCreateToken (phToken,
|
RtlAddAccessAllowedAce(Dacl,
|
||||||
TOKEN_ALL_ACCESS,
|
ACL_REVISION,
|
||||||
&ObjectAttributes,
|
GENERIC_ALL,
|
||||||
TokenPrimary,
|
OwnerSid);
|
||||||
&AuthenticationId,
|
|
||||||
&ExpirationTime,
|
|
||||||
&TokenUser,
|
|
||||||
TokenGroups,
|
|
||||||
TokenPrivileges,
|
|
||||||
&TokenOwner,
|
|
||||||
&TokenPrimaryGroup,
|
|
||||||
&TokenDefaultDacl,
|
|
||||||
&TokenSource);
|
|
||||||
|
|
||||||
|
RtlAllocateAndInitializeSid(&SystemAuthority,
|
||||||
|
1,
|
||||||
|
SECURITY_LOCAL_SYSTEM_RID,
|
||||||
|
SECURITY_NULL_RID,
|
||||||
|
SECURITY_NULL_RID,
|
||||||
|
SECURITY_NULL_RID,
|
||||||
|
SECURITY_NULL_RID,
|
||||||
|
SECURITY_NULL_RID,
|
||||||
|
SECURITY_NULL_RID,
|
||||||
|
SECURITY_NULL_RID,
|
||||||
|
&LocalSystemSid);
|
||||||
|
|
||||||
|
/* SID: S-1-5-18 */
|
||||||
|
RtlAddAccessAllowedAce(Dacl,
|
||||||
|
ACL_REVISION,
|
||||||
|
GENERIC_ALL,
|
||||||
|
LocalSystemSid);
|
||||||
|
|
||||||
|
RtlFreeSid(LocalSystemSid);
|
||||||
|
|
||||||
|
TokenDefaultDacl.DefaultDacl = Dacl;
|
||||||
|
|
||||||
|
memcpy(TokenSource.SourceName,
|
||||||
|
"User32 ",
|
||||||
|
8);
|
||||||
|
Status = NtAllocateLocallyUniqueId(&TokenSource.SourceIdentifier);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
RtlFreeHeap(GetProcessHeap(), 0, Dacl);
|
||||||
|
FreeGroupSids(TokenGroups);
|
||||||
|
RtlFreeHeap(GetProcessHeap(), 0, TokenPrivileges);
|
||||||
|
RtlFreeSid(UserSid);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = NtCreateToken(phToken,
|
||||||
|
TOKEN_ALL_ACCESS,
|
||||||
|
&ObjectAttributes,
|
||||||
|
TokenPrimary,
|
||||||
|
&AuthenticationId,
|
||||||
|
&ExpirationTime,
|
||||||
|
&TokenUser,
|
||||||
|
TokenGroups,
|
||||||
|
TokenPrivileges,
|
||||||
|
&TokenOwner,
|
||||||
|
&TokenPrimaryGroup,
|
||||||
|
&TokenDefaultDacl,
|
||||||
|
&TokenSource);
|
||||||
|
|
||||||
|
RtlFreeHeap(GetProcessHeap(), 0, Dacl);
|
||||||
FreeGroupSids(TokenGroups);
|
FreeGroupSids(TokenGroups);
|
||||||
RtlFreeHeap(GetProcessHeap(), 0, TokenPrivileges);
|
RtlFreeHeap(GetProcessHeap(), 0, TokenPrivileges);
|
||||||
RtlFreeSid (UserSid);
|
RtlFreeSid(UserSid);
|
||||||
|
|
||||||
return NT_SUCCESS(Status);
|
return NT_SUCCESS(Status);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue