mirror of
https://github.com/sudo-project/sudo.git
synced 2025-09-01 06:45:10 +00:00
in set_perms(), always call setuid(0) before changing the ruid/euid
so we always know it will succeed.
This commit is contained in:
38
sudo.c
38
sudo.c
@@ -893,43 +893,35 @@ set_perms(perm, sudo_mode)
|
|||||||
{
|
{
|
||||||
struct passwd *pw;
|
struct passwd *pw;
|
||||||
|
|
||||||
switch (perm) {
|
/*
|
||||||
case PERM_ROOT:
|
* First, set real & effective uids to root.
|
||||||
if (setuid(0)) {
|
* If perm is PERM_ROOT then we don't need to do anything else.
|
||||||
perror("setuid(0)");
|
*/
|
||||||
exit(1);
|
if (setuid(0)) {
|
||||||
}
|
perror("setuid(0)");
|
||||||
break;
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (perm) {
|
||||||
case PERM_USER:
|
case PERM_USER:
|
||||||
(void) setgid(user_gid);
|
(void) setgid(user_gid);
|
||||||
|
|
||||||
if (geteuid() != user_uid && seteuid(user_uid)) {
|
if (seteuid(user_uid)) {
|
||||||
perror("seteuid(user_uid)");
|
perror("seteuid(user_uid)");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PERM_FULL_USER:
|
case PERM_FULL_USER:
|
||||||
if (setuid(0)) {
|
|
||||||
perror("setuid(0)");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
(void) setgid(user_gid);
|
(void) setgid(user_gid);
|
||||||
|
|
||||||
if (setuid(user_uid)) {
|
if (setuid(user_uid)) {
|
||||||
perror("setuid(user_uid)");
|
perror("setuid(user_uid)");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PERM_RUNAS:
|
case PERM_RUNAS:
|
||||||
if (setuid(0)) {
|
|
||||||
perror("setuid(0)");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* XXX - add group/gid support */
|
/* XXX - add group/gid support */
|
||||||
if (**user_runas == '#') {
|
if (**user_runas == '#') {
|
||||||
if (setuid(atoi(*user_runas + 1))) {
|
if (setuid(atoi(*user_runas + 1))) {
|
||||||
@@ -991,14 +983,9 @@ set_perms(perm, sudo_mode)
|
|||||||
if (sudo_mode & MODE_RESET_HOME)
|
if (sudo_mode & MODE_RESET_HOME)
|
||||||
runas_homedir = pw->pw_dir;
|
runas_homedir = pw->pw_dir;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case PERM_SUDOERS:
|
|
||||||
if (setuid(0)) {
|
|
||||||
perror("setuid(0)");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
case PERM_SUDOERS:
|
||||||
if (setgid(SUDOERS_GID)) {
|
if (setgid(SUDOERS_GID)) {
|
||||||
perror("setgid(SUDOERS_GID)");
|
perror("setgid(SUDOERS_GID)");
|
||||||
exit(1);
|
exit(1);
|
||||||
@@ -1022,7 +1009,6 @@ set_perms(perm, sudo_mode)
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user