* syscalls.cc (seteuid32): On Win95 get the pw entry. If it exists

update the euid and call cygheap->user.set_name. Remove special
	handling of ILLEGAL_UID.
	(setgid32): Add a debug_printf. On Win95, always set the egid.
	Remove special handling of ILLEGAL_GID. Do not compare gid and gr_gid.
	* child_info.h (class cygheap_exec_info): Remove uid.
	* spawn.cc (spawn_guts): Do not set ciresrv.moreinfo->uid.
	* dcrto.cc (dll_crt0_1): Always call uinfo_init.
	* uinfo.cc (uinfo_init): Reorganize and close handle if needed.
	(cygheap_user::ontherange): Do not call internal_getpwnam if pw is NULL.
This commit is contained in:
Corinna Vinschen
2003-01-25 10:36:46 +00:00
parent 45dbfc2611
commit 4f7e12dd26
6 changed files with 35 additions and 31 deletions

View File

@ -102,15 +102,18 @@ internal_getlogin (cygheap_user &user)
void
uinfo_init ()
{
if (!child_proc_info)
internal_getlogin (cygheap->user); /* Set the cygheap->user. */
if (!child_proc_info || cygheap->user.token != INVALID_HANDLE_VALUE)
{
if (!child_proc_info)
internal_getlogin (cygheap->user); /* Set the cygheap->user. */
else
CloseHandle (cygheap->user.token);
cygheap->user.set_orig_sid (); /* Update the original sid */
cygheap->user.token = INVALID_HANDLE_VALUE; /* No token present */
}
/* Real and effective uid/gid are identical on process start up. */
cygheap->user.orig_uid = cygheap->user.real_uid = myself->uid;
cygheap->user.orig_gid = cygheap->user.real_gid = myself->gid;
cygheap->user.set_orig_sid (); /* Update the original sid */
cygheap->user.token = INVALID_HANDLE_VALUE; /* No token present */
}
extern "C" char *
@ -214,8 +217,6 @@ cygheap_user::ontherange (homebodies what, struct passwd *pw)
debug_printf ("HOME is already in the environment %s", p);
else
{
if (!pw)
pw = internal_getpwnam (name ());
if (pw && pw->pw_dir && *pw->pw_dir)
{
debug_printf ("Set HOME (from /etc/passwd) to %s", pw->pw_dir);