diff options
Diffstat (limited to 'winsup/cygwin/security.cc')
-rw-r--r-- | winsup/cygwin/security.cc | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/winsup/cygwin/security.cc b/winsup/cygwin/security.cc index c5a8f5ca3..d25e3c68b 100644 --- a/winsup/cygwin/security.cc +++ b/winsup/cygwin/security.cc @@ -2129,6 +2129,17 @@ check_access (security_descriptor &sd, GENERIC_MAPPING &mapping, HANDLE tok = cygheap->user.issetuid () ? cygheap->user.token () : hProcImpToken; + if (!tok && !DuplicateTokenEx (hProcToken, MAXIMUM_ALLOWED, NULL, + SecurityImpersonation, TokenImpersonation, + &hProcImpToken)) +#ifdef DEBUGGING + system_printf ("DuplicateTokenEx failed, %E"); +#else + syscall_printf ("DuplicateTokenEx failed, %E"); +#endif + else + tok = hProcImpToken; + if (!AccessCheck (sd, tok, desired, &mapping, pset, &plen, &granted, &status)) __seterrno (); else if (!status) |