mirror of
https://github.com/sudo-project/sudo.git
synced 2025-08-31 22:35:10 +00:00
Refactor code in sudoers that creates I/O log files to share with logsrvd.
This commit is contained in:
@@ -356,37 +356,6 @@ set_perms(int perm)
|
||||
goto bad;
|
||||
}
|
||||
break;
|
||||
|
||||
case PERM_IOLOG:
|
||||
state->gidlist = ostate->gidlist;
|
||||
sudo_gidlist_addref(state->gidlist);
|
||||
state->rgid = ostate->rgid;
|
||||
state->egid = iolog_gid;
|
||||
state->sgid = ostate->sgid;
|
||||
state->ruid = ROOT_UID;
|
||||
state->euid = iolog_uid;
|
||||
state->suid = ROOT_UID;
|
||||
sudo_debug_printf(SUDO_DEBUG_INFO, "%s: PERM_IOLOG: gid: "
|
||||
"[%d, %d, %d] -> [%d, %d, %d]", __func__,
|
||||
(int)ostate->rgid, (int)ostate->egid, (int)ostate->sgid,
|
||||
(int)state->rgid, (int)state->egid, (int)state->sgid);
|
||||
if (GID_CHANGED && setresgid(ID(rgid), ID(egid), ID(sgid))) {
|
||||
(void)snprintf(errbuf, sizeof(errbuf),
|
||||
"PERM_IOLOG: setresgid(%d, %d, %d)",
|
||||
(int)ID(rgid), (int)ID(egid), (int)ID(sgid));
|
||||
goto bad;
|
||||
}
|
||||
sudo_debug_printf(SUDO_DEBUG_INFO, "%s: PERM_IOLOG: uid: "
|
||||
"[%d, %d, %d] -> [%d, %d, %d]", __func__,
|
||||
(int)ostate->ruid, (int)ostate->euid, (int)ostate->suid,
|
||||
(int)state->ruid, (int)state->euid, (int)state->suid);
|
||||
if (UID_CHANGED && setresuid(ID(ruid), ID(euid), ID(suid))) {
|
||||
(void)snprintf(errbuf, sizeof(errbuf),
|
||||
"PERM_IOLOG: setresuid(%d, %d, %d)",
|
||||
(int)ID(ruid), (int)ID(euid), (int)ID(suid));
|
||||
goto bad;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
perm_stack_depth++;
|
||||
@@ -726,46 +695,6 @@ set_perms(int perm)
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case PERM_IOLOG:
|
||||
state->gidlist = ostate->gidlist;
|
||||
sudo_gidlist_addref(state->gidlist);
|
||||
state->rgid = ostate->rgid;
|
||||
state->egid = iolog_gid;
|
||||
state->sgid = ostate->sgid;
|
||||
state->ruid = ROOT_UID;
|
||||
state->euid = iolog_uid;
|
||||
state->suid = ROOT_UID;
|
||||
sudo_debug_printf(SUDO_DEBUG_INFO, "%s: PERM_IOLOG: gid: "
|
||||
"[%d, %d, %d] -> [%d, %d, %d]", __func__,
|
||||
(int)ostate->rgid, (int)ostate->egid, (int)ostate->sgid,
|
||||
(int)state->rgid, (int)state->egid, (int)state->sgid);
|
||||
if (GID_CHANGED && setgidx(ID_EFFECTIVE, iolog_gid)) {
|
||||
(void)snprintf(errbuf, sizeof(errbuf),
|
||||
"PERM_IOLOG: setgidx(ID_EFFECTIVE, %d)", (int)iolog_gid);
|
||||
goto bad;
|
||||
}
|
||||
sudo_debug_printf(SUDO_DEBUG_INFO, "%s: PERM_IOLOG: uid: "
|
||||
"[%d, %d, %d] -> [%d, %d, %d]", __func__,
|
||||
(int)ostate->ruid, (int)ostate->euid, (int)ostate->suid,
|
||||
(int)state->ruid, (int)state->euid, (int)state->suid);
|
||||
if (UID_CHANGED) {
|
||||
if (ostate->ruid != ROOT_UID || ostate->suid != ROOT_UID) {
|
||||
if (setuidx(ID_EFFECTIVE|ID_REAL|ID_SAVED, ROOT_UID)) {
|
||||
(void)snprintf(errbuf, sizeof(errbuf),
|
||||
"PERM_IOLOG: setuidx(ID_EFFECTIVE|ID_REAL|ID_SAVED, %d)",
|
||||
ROOT_UID);
|
||||
goto bad;
|
||||
}
|
||||
}
|
||||
if (setuidx(ID_EFFECTIVE, timestamp_uid)) {
|
||||
(void)snprintf(errbuf, sizeof(errbuf),
|
||||
"PERM_IOLOG: setuidx(ID_EFFECTIVE, %d)",
|
||||
(int)timestamp_uid);
|
||||
goto bad;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
perm_stack_depth++;
|
||||
@@ -1129,33 +1058,6 @@ set_perms(int perm)
|
||||
goto bad;
|
||||
}
|
||||
break;
|
||||
|
||||
case PERM_IOLOG:
|
||||
state->gidlist = ostate->gidlist;
|
||||
sudo_gidlist_addref(state->gidlist);
|
||||
state->rgid = ostate->rgid;
|
||||
state->egid = iolog_gid;
|
||||
state->ruid = ROOT_UID;
|
||||
state->euid = iolog_uid;
|
||||
sudo_debug_printf(SUDO_DEBUG_INFO, "%s: PERM_IOLOG: gid: "
|
||||
"[%d, %d] -> [%d, %d]", __func__, (int)ostate->rgid,
|
||||
(int)ostate->egid, (int)state->rgid, (int)state->egid);
|
||||
if (GID_CHANGED && setregid(ID(rgid), ID(egid))) {
|
||||
(void)snprintf(errbuf, sizeof(errbuf),
|
||||
"PERM_IOLOG: setregid(%d, %d)",
|
||||
(int)ID(rgid), (int)ID(egid));
|
||||
goto bad;
|
||||
}
|
||||
sudo_debug_printf(SUDO_DEBUG_INFO, "%s: PERM_IOLOG: uid: "
|
||||
"[%d, %d] -> [%d, %d]", __func__, (int)ostate->ruid,
|
||||
(int)ostate->euid, (int)state->ruid, (int)state->euid);
|
||||
if (UID_CHANGED && setreuid(ID(ruid), ID(euid))) {
|
||||
(void)snprintf(errbuf, sizeof(errbuf),
|
||||
"PERM_IOLOG: setreuid(%d, %d)",
|
||||
(int)ID(ruid), (int)ID(euid));
|
||||
goto bad;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
perm_stack_depth++;
|
||||
@@ -1459,31 +1361,6 @@ set_perms(int perm)
|
||||
goto bad;
|
||||
}
|
||||
break;
|
||||
|
||||
case PERM_IOLOG:
|
||||
state->gidlist = ostate->gidlist;
|
||||
sudo_gidlist_addref(state->gidlist);
|
||||
state->rgid = ostate->rgid;
|
||||
state->egid = iolog_gid;
|
||||
state->ruid = ROOT_UID;
|
||||
state->euid = iolog_uid;
|
||||
sudo_debug_printf(SUDO_DEBUG_INFO, "%s: PERM_IOLOG: gid: "
|
||||
"[%d, %d] -> [%d, %d]", __func__, (int)ostate->rgid,
|
||||
(int)ostate->egid, (int)state->rgid, (int)state->egid);
|
||||
if (GID_CHANGED && setegid(iolog_gid)) {
|
||||
(void)snprintf(errbuf, sizeof(errbuf),
|
||||
"PERM_IOLOG: setegid(%d)", (int)iolog_gid);
|
||||
goto bad;
|
||||
}
|
||||
sudo_debug_printf(SUDO_DEBUG_INFO, "%s: PERM_IOLOG: uid: "
|
||||
"[%d, %d] -> [%d, %d]", __func__, (int)ostate->ruid,
|
||||
(int)ostate->euid, (int)state->ruid, (int)state->euid);
|
||||
if (seteuid(timestamp_uid)) {
|
||||
(void)snprintf(errbuf, sizeof(errbuf),
|
||||
"PERM_IOLOG: seteuid(%d)", (int)timestamp_uid);
|
||||
goto bad;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
perm_stack_depth++;
|
||||
@@ -1524,11 +1401,11 @@ restore_perms(void)
|
||||
* real and effective uids to ROOT_UID initially to be safe.
|
||||
*/
|
||||
if (seteuid(ROOT_UID)) {
|
||||
sudo_warnx("seteuid() [%d] -> [%d]", (int)state->euid, ROOT_UID);
|
||||
sudo_warn("seteuid() [%d] -> [%d]", (int)state->euid, ROOT_UID);
|
||||
goto bad;
|
||||
}
|
||||
if (setuid(ROOT_UID)) {
|
||||
sudo_warnx("setuid() [%d, %d] -> [%d, %d]", (int)state->ruid, ROOT_UID,
|
||||
sudo_warn("setuid() [%d, %d] -> [%d, %d]", (int)state->ruid, ROOT_UID,
|
||||
ROOT_UID, ROOT_UID);
|
||||
goto bad;
|
||||
}
|
||||
@@ -1643,7 +1520,6 @@ set_perms(int perm)
|
||||
case PERM_SUDOERS:
|
||||
case PERM_RUNAS:
|
||||
case PERM_TIMESTAMP:
|
||||
case PERM_IOLOG:
|
||||
/* Unsupported since we can't set euid. */
|
||||
state->ruid = ostate->ruid;
|
||||
state->rgid = ostate->rgid;
|
||||
|
Reference in New Issue
Block a user