summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--winsup/cygwin/ChangeLog5
-rw-r--r--winsup/cygwin/security.cc21
2 files changed, 16 insertions, 10 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 21984cae5..64d60feff 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,8 @@
+2010-02-26 Pierre Humblet <Pierre.Humblet@ieee.org>
+
+ * security.cc (check_access): Use user.imp_token if appropriate.
+ Set errno and return if DuplicateTokenEx fails .
+
2010-02-26 Corinna Vinschen <corinna@vinschen.de>
Remove all traces of __CYGWIN_USE_BIG_TYPES__.
diff --git a/winsup/cygwin/security.cc b/winsup/cygwin/security.cc
index a8a251297..b09a719f3 100644
--- a/winsup/cygwin/security.cc
+++ b/winsup/cygwin/security.cc
@@ -751,16 +751,17 @@ check_access (security_descriptor &sd, GENERIC_MAPPING &mapping,
? cygheap->user.imp_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 (!tok)
+ {
+ if (!DuplicateTokenEx (hProcToken, MAXIMUM_ALLOWED, NULL,
+ SecurityImpersonation, TokenImpersonation,
+ &hProcImpToken))
+ {
+ __seterrno ();
+ return ret;
+ }
+ tok = hProcImpToken;
+ }
if (!AccessCheck (sd, tok, desired, &mapping, pset, &plen, &granted, &status))
__seterrno ();