Cygwin: fork/exec: fix child process permissions
- Exec'ed/spawned processes don't need PROCESS_DUP_HANDLE. Remove that permission from the parent handle. - PROCESS_QUERY_LIMITED_INFORMATION doesn't work for Windows 7 if the process is started as a service. Add PROCESS_QUERY_INFORMATION for pre-Windows 8 in that case. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
@@ -118,16 +118,13 @@ cygheap_user::init ()
|
||||
This needs careful checking should we use check_token_membership in other
|
||||
circumstances. */
|
||||
bool
|
||||
check_token_membership (PSID sid)
|
||||
check_token_membership (HANDLE tok, PSID sid)
|
||||
{
|
||||
NTSTATUS status;
|
||||
ULONG size;
|
||||
tmp_pathbuf tp;
|
||||
PTOKEN_GROUPS groups = (PTOKEN_GROUPS) tp.w_get ();
|
||||
|
||||
/* If impersonated, use impersonation token. */
|
||||
HANDLE tok = cygheap->user.issetuid () ? cygheap->user.primary_token ()
|
||||
: hProcToken;
|
||||
status = NtQueryInformationToken (tok, TokenGroups, groups, 2 * NT_MAX_PATH,
|
||||
&size);
|
||||
if (!NT_SUCCESS (status))
|
||||
@@ -142,6 +139,15 @@ check_token_membership (PSID sid)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
check_token_membership (PSID sid)
|
||||
{
|
||||
/* If impersonated, use impersonation token. */
|
||||
HANDLE tok = cygheap->user.issetuid () ? cygheap->user.primary_token ()
|
||||
: hProcToken;
|
||||
return check_token_membership (tok, sid);
|
||||
}
|
||||
|
||||
static void
|
||||
internal_getlogin (cygheap_user &user)
|
||||
{
|
||||
|
Reference in New Issue
Block a user