summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/spawn.cc
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/spawn.cc')
-rw-r--r--winsup/cygwin/spawn.cc20
1 files changed, 9 insertions, 11 deletions
diff --git a/winsup/cygwin/spawn.cc b/winsup/cygwin/spawn.cc
index 425094677..734d2d2bf 100644
--- a/winsup/cygwin/spawn.cc
+++ b/winsup/cygwin/spawn.cc
@@ -543,8 +543,9 @@ skip_arg_parsing:
if (myself->impersonated && myself->token != INVALID_HANDLE_VALUE)
seteuid (myself->orig_uid);
- /* Set child->psid to NULL to force calling internal_getlogin()
- from child process. */
+ /* Set child->uid to USHRT_MAX to force calling internal_getlogin()
+ from child process. Set psid to NULL to play it safe. */
+ child->uid = USHRT_MAX;
child->psid = NULL;
/* Load users registry hive. */
@@ -844,15 +845,12 @@ _spawnve (HANDLE hToken, int mode, const char *path, const char *const *argv,
child->ctty = myself->ctty;
child->umask = myself->umask;
child->process_state |= PID_INITIALIZING;
- if (!hToken && !myself->token)
- {
- memcpy (child->username, myself->username, MAX_USER_NAME);
- memcpy (child->sidbuf, myself->sidbuf, 40);
- if (myself->psid)
- child->psid = child->sidbuf;
- memcpy (child->logsrv, myself->logsrv, 256);
- memcpy (child->domain, myself->domain, MAX_COMPUTERNAME_LENGTH+1);
- }
+ memcpy (child->username, myself->username, MAX_USER_NAME);
+ memcpy (child->sidbuf, myself->sidbuf, MAX_SID_LEN);
+ if (myself->psid)
+ child->psid = child->sidbuf;
+ memcpy (child->logsrv, myself->logsrv, MAX_HOST_NAME);
+ memcpy (child->domain, myself->domain, MAX_COMPUTERNAME_LENGTH+1);
subproc_init ();
ret = spawn_guts (hToken, path, argv, envp, child, mode);
if (ret == -1)