summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/security.h
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/security.h')
-rw-r--r--winsup/cygwin/security.h9
1 files changed, 6 insertions, 3 deletions
diff --git a/winsup/cygwin/security.h b/winsup/cygwin/security.h
index 9823ca2b4..dec066009 100644
--- a/winsup/cygwin/security.h
+++ b/winsup/cygwin/security.h
@@ -396,14 +396,14 @@ bool get_logon_server (const char * domain, char * server, WCHAR *wserver,
int set_privilege (HANDLE token, enum cygpriv_idx privilege, bool enable);
void set_cygwin_privileges (HANDLE token);
-#define set_process_privilege(p,v) set_privilege (hProcImpToken, (p), (v))
+#define set_process_privilege(p,v) set_privilege (hProcToken, (p), (v))
#define _push_thread_privilege(_priv, _val, _check) { \
HANDLE _token = NULL, _dup_token = NULL; \
if (wincap.has_security ()) \
{ \
_token = (cygheap->user.issetuid () && (_check)) \
- ? cygheap->user.token () : hProcImpToken; \
+ ? cygheap->user.token () : hProcToken; \
if (!DuplicateTokenEx (_token, MAXIMUM_ALLOWED, NULL, \
SecurityImpersonation, TokenImpersonation, \
&_dup_token)) \
@@ -419,7 +419,10 @@ void set_cygwin_privileges (HANDLE token);
#define pop_thread_privilege() \
if (_dup_token) \
{ \
- ImpersonateLoggedOnUser (_token); \
+ if (_token == hProcToken) \
+ RevertToSelf (); \
+ else \
+ ImpersonateLoggedOnUser (_token); \
CloseHandle (_dup_token); \
} \
}