mirror of
https://github.com/reactos/reactos.git
synced 2025-04-30 19:19:00 +00:00
[NTOS:SE] Implement job case in PsImpersonateClient. CORE-8787
This commit is contained in:
parent
2d7f71c5b8
commit
db180c29c7
2 changed files with 36 additions and 2 deletions
|
@ -615,6 +615,8 @@ PsImpersonateClient(IN PETHREAD Thread,
|
||||||
{
|
{
|
||||||
PPS_IMPERSONATION_INFORMATION Impersonation, OldData;
|
PPS_IMPERSONATION_INFORMATION Impersonation, OldData;
|
||||||
PTOKEN OldToken = NULL;
|
PTOKEN OldToken = NULL;
|
||||||
|
PEJOB Job;
|
||||||
|
|
||||||
PAGED_CODE();
|
PAGED_CODE();
|
||||||
PSTRACE(PS_SECURITY_DEBUG, "Thread: %p, Token: %p\n", Thread, Token);
|
PSTRACE(PS_SECURITY_DEBUG, "Thread: %p, Token: %p\n", Thread, Token);
|
||||||
|
|
||||||
|
@ -668,8 +670,32 @@ PsImpersonateClient(IN PETHREAD Thread,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check if this is a job, which we don't support yet */
|
/* FIXME: If the process token can't impersonate, we need to make a copy instead */
|
||||||
if (Thread->ThreadsProcess->Job) ASSERT(FALSE);
|
|
||||||
|
/* Check if this is a job */
|
||||||
|
Job = Thread->ThreadsProcess->Job;
|
||||||
|
if (Job != NULL)
|
||||||
|
{
|
||||||
|
/* No admin allowed in this job */
|
||||||
|
if ((Job->SecurityLimitFlags & JOB_OBJECT_SECURITY_NO_ADMIN) &&
|
||||||
|
SeTokenIsAdmin(Token))
|
||||||
|
{
|
||||||
|
return STATUS_ACCESS_DENIED;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* No restricted tokens allowed in this job */
|
||||||
|
if ((Job->SecurityLimitFlags & JOB_OBJECT_SECURITY_RESTRICTED_TOKEN) &&
|
||||||
|
SeTokenIsRestricted(Token))
|
||||||
|
{
|
||||||
|
return STATUS_ACCESS_DENIED;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* We don't support job filters yet */
|
||||||
|
if (Job->Filter != NULL)
|
||||||
|
{
|
||||||
|
ASSERT(Job->Filter == NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Lock thread security */
|
/* Lock thread security */
|
||||||
PspLockThreadSecurityExclusive(Thread);
|
PspLockThreadSecurityExclusive(Thread);
|
||||||
|
|
|
@ -216,6 +216,14 @@ extern POBJECT_TYPE NTSYSAPI PsJobType;
|
||||||
#define JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK 0x1000
|
#define JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK 0x1000
|
||||||
#define JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE 0x2000
|
#define JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE 0x2000
|
||||||
|
|
||||||
|
//
|
||||||
|
// Job Security Limit Flags
|
||||||
|
//
|
||||||
|
#define JOB_OBJECT_SECURITY_NO_ADMIN 0x0001
|
||||||
|
#define JOB_OBJECT_SECURITY_RESTRICTED_TOKEN 0x0002
|
||||||
|
#define JOB_OBJECT_SECURITY_ONLY_TOKEN 0x0004
|
||||||
|
#define JOB_OBJECT_SECURITY_FILTER_TOKENS 0x0008
|
||||||
|
|
||||||
//
|
//
|
||||||
// Cross Thread Flags
|
// Cross Thread Flags
|
||||||
//
|
//
|
||||||
|
|
Loading…
Reference in a new issue