* cygwin.din: Define symbols for `cygwin_logon_user' and
`cygwin_set_impersonation_token'. * dcrt0.cc (dll_crt0_1): Eliminate superfluous conditional statements. Add load statements for `ImpersonateLoggedOnUser', `LogonUserA' and `RevertToSelf'. * fork.cc (fork): Care for correct impersonation of parent and child process. * security.cc (cygwin_set_impersonation_token): New function. (cygwin_logon_user): Ditto. shared.h (class pinfo): New members `orig_uid', `orig_gid', `real_uid' nad `real_gid'. spawn.cc (spawn_guts): Care for impersonation when starting child process in a different user context. * syscalls.cc (setgid): Call `setegid' now. Set real_gid. (setuid): Call `seteuid' now. Set real_uid. (seteuid): Functionality moved from setuid to here. Care for correct impersonation. (setegid): Functionality moved from setgid to here. * uinfo.cc (uinfo_init): Initialization of additional pinfo members. (getuid): Return real uid. (getgid): Return real gid. (geteuid): Return effective uid. (getegid): Return effective gid. include/sys/cygwin.h: Add prototypes for `cygwin_logon_user' and `cygwin_set_impersonation_token'. include/cygwin/version.h: Bumb API minor version to 22.
This commit is contained in:
@@ -126,6 +126,11 @@ uinfo_init ()
|
||||
myself->uid = DEFAULT_UID;
|
||||
myself->gid = DEFAULT_GID;
|
||||
}
|
||||
/* Set to non impersonated value. */
|
||||
myself->token = INVALID_HANDLE_VALUE;
|
||||
myself->impersonated = TRUE;
|
||||
myself->orig_uid = myself->real_uid = myself->uid;
|
||||
myself->orig_gid = myself->real_gid = myself->gid;
|
||||
}
|
||||
|
||||
extern "C" char *
|
||||
@@ -143,25 +148,25 @@ getlogin (void)
|
||||
extern "C" uid_t
|
||||
getuid (void)
|
||||
{
|
||||
return myself->uid;
|
||||
return myself->real_uid;
|
||||
}
|
||||
|
||||
extern "C" gid_t
|
||||
getgid (void)
|
||||
{
|
||||
return myself->gid;
|
||||
return myself->real_gid;
|
||||
}
|
||||
|
||||
extern "C" uid_t
|
||||
geteuid (void)
|
||||
{
|
||||
return getuid ();
|
||||
return myself->uid;
|
||||
}
|
||||
|
||||
extern "C" gid_t
|
||||
getegid (void)
|
||||
{
|
||||
return getgid ();
|
||||
return myself->gid;
|
||||
}
|
||||
|
||||
/* Not quite right - cuserid can change, getlogin can't */
|
||||
|
Reference in New Issue
Block a user