summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/syscalls.cc
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/syscalls.cc')
-rw-r--r--winsup/cygwin/syscalls.cc22
1 files changed, 10 insertions, 12 deletions
diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc
index 1bce92f0b..da42ee42b 100644
--- a/winsup/cygwin/syscalls.cc
+++ b/winsup/cygwin/syscalls.cc
@@ -1978,8 +1978,7 @@ seteuid32 (__uid32_t uid)
sav_impersonated = cygheap->user.impersonated;
RevertToSelf();
- if (!OpenProcessToken (GetCurrentProcess (),
- TOKEN_QUERY | TOKEN_ADJUST_DEFAULT, &ptok))
+ if (!OpenProcessToken (hMainProc, TOKEN_QUERY | TOKEN_ADJUST_DEFAULT, &ptok))
{
__seterrno ();
goto failed;
@@ -1987,17 +1986,17 @@ seteuid32 (__uid32_t uid)
/* Verify if the process token is suitable.
Currently we do not try to differentiate between
internal tokens and others */
- process_ok = verify_token(ptok, usersid, pgrpsid);
- debug_printf("Process token %sverified", process_ok?"":"not ");
+ process_ok = verify_token (ptok, usersid, pgrpsid);
+ debug_printf("Process token %sverified", process_ok ? "" : "not ");
if (process_ok)
{
- if (cygheap->user.token == INVALID_HANDLE_VALUE ||
- !cygheap->user.impersonated)
+ if (cygheap->user.issetuid ())
+ cygheap->user.impersonated = FALSE;
+ else
{
CloseHandle (ptok);
return 0; /* No change */
}
- else cygheap->user.impersonated = FALSE;
}
if (!process_ok && cygheap->user.token != INVALID_HANDLE_VALUE)
@@ -2007,7 +2006,9 @@ seteuid32 (__uid32_t uid)
& sav_token_is_internal_token);
debug_printf("Thread token %d %sverified",
cygheap->user.token, token_ok?"":"not ");
- if (token_ok)
+ if (!token_ok)
+ cygheap->user.token = INVALID_HANDLE_VALUE;
+ else
{
/* Return if current token is valid */
if (cygheap->user.impersonated)
@@ -2018,7 +2019,6 @@ seteuid32 (__uid32_t uid)
return 0; /* No change */
}
}
- else cygheap->user.token = INVALID_HANDLE_VALUE;
}
/* Set process def dacl to allow access to impersonated token */
@@ -2152,9 +2152,7 @@ setegid32 (__gid32_t gid)
"TokenPrimaryGroup): %E");
RevertToSelf ();
}
- if (!OpenProcessToken (GetCurrentProcess (),
- TOKEN_ADJUST_DEFAULT,
- &ptok))
+ if (!OpenProcessToken (hMainProc, TOKEN_ADJUST_DEFAULT, &ptok))
debug_printf ("OpenProcessToken(): %E\n");
else
{