Work around weird AIX saved uid semantics on setuid() and setreuid().

On AIX, setuid() will only set the saved uid if the euid is already 0.
This commit is contained in:
Todd C. Miller
2011-04-15 12:30:08 -04:00
parent 2f24216e85
commit b08ad6083b

View File

@@ -535,6 +535,9 @@ restore_perms(void)
* the ruid is ROOT_UID so call setuid() first.
*/
if (OID(euid) == ROOT_UID) {
/* setuid() may not set the saved ID unless the euid is ROOT_UID */
if (ID(euid) != ROOT_UID)
(void)setreuid(-1, ROOT_UID);
if (setuid(ROOT_UID)) {
warning("setuid(%d)", ROOT_UID);
goto bad;