If set_perms == set_perms_posix and the stay_setuid flag is not
set, set all uids to 0 and use set_perms_fallback().
This commit is contained in:
15
sudo.c
15
sudo.c
@@ -255,6 +255,21 @@ main(argc, argv, envp)
|
|||||||
/* Validate the user but don't search for pseudo-commands. */
|
/* Validate the user but don't search for pseudo-commands. */
|
||||||
validated = sudoers_lookup(pwflag);
|
validated = sudoers_lookup(pwflag);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If we have POSIX saved uids and the stay_setuid flag was not set,
|
||||||
|
* set the real, effective and saved uids to 0 and use set_perms_fallback()
|
||||||
|
* instead of set_perms_posix().
|
||||||
|
*/
|
||||||
|
#if defined(_SC_SAVED_IDS) && defined(_SC_VERSION)
|
||||||
|
if (!def_flag(I_STAY_SETUID) && set_perms == set_perms_posix) {
|
||||||
|
if (setuid(0)) {
|
||||||
|
perror("setuid(0)");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
set_perms = set_perms_fallback;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Look up runas user passwd struct. If we are given a uid then
|
* Look up runas user passwd struct. If we are given a uid then
|
||||||
* there may be no corresponding passwd(5) entry (which is OK).
|
* there may be no corresponding passwd(5) entry (which is OK).
|
||||||
|
Reference in New Issue
Block a user