summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/security.cc
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/security.cc')
-rw-r--r--winsup/cygwin/security.cc11
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)