* Prototypes
*/
static void runas_setup __P((void));
-static void fatal __P((char *));
+static void fatal __P((char *, int));
#if !defined(NO_SAVED_IDS) && defined(_SC_SAVED_IDS) && defined(_SC_VERSION)
/*
switch (perm) {
case PERM_ROOT:
if (seteuid(0))
- fatal("seteuid(0)");
+ fatal("seteuid(0) failed, your operating system may have broken POSIX saved ID support\nTry running configure with --disable-saved-ids", 0);
break;
case PERM_FULL_ROOT:
/* headed for exec() */
(void) seteuid(0);
if (setuid(0))
- fatal("setuid(0)");
+ fatal("setuid(0)", 1);
break;
case PERM_USER:
(void) setegid(user_gid);
if (seteuid(user_uid))
- fatal("seteuid(user_uid)");
+ fatal("seteuid(user_uid)", 1);
break;
case PERM_FULL_USER:
/* headed for exec() */
(void) setgid(user_gid);
if (setuid(user_uid))
- fatal("setuid(user_uid)");
+ fatal("setuid(user_uid)", 1);
break;
case PERM_RUNAS:
else
error = setuid(runas_pw->pw_uid);
if (error)
- fatal("unable to change to runas uid");
+ fatal("unable to change to runas uid", 1);
break;
case PERM_SUDOERS:
/* assume euid == 0, ruid == user */
if (setegid(SUDOERS_GID))
- fatal("unable to change to sudoers gid");
+ fatal("unable to change to sudoers gid", 1);
/*
* If SUDOERS_UID == 0 and SUDOERS_MODE
*/
if (SUDOERS_UID == 0) {
if ((SUDOERS_MODE & 040) && seteuid(1))
- fatal("seteuid(1)");
+ fatal("seteuid(1)", 1);
} else {
if (seteuid(SUDOERS_UID))
- fatal("seteuid(SUDOERS_UID)");
+ fatal("seteuid(SUDOERS_UID)", 1);
}
break;
}
case PERM_FULL_ROOT:
case PERM_ROOT:
if (setuid(0))
- fatal("setuid(0)");
+ fatal("setuid(0) failed, your operating system may have broken POSIX saved ID support\nTry running configure with --disable-setreuid", 0);
break;
case PERM_USER:
(void) setegid(user_gid);
if (setreuid(0, user_uid))
- fatal("setreuid(0, user_uid)");
+ fatal("setreuid(0, user_uid)", 1);
break;
case PERM_FULL_USER:
/* headed for exec() */
(void) setgid(user_gid);
if (setuid(user_uid))
- fatal("setuid(user_uid)");
+ fatal("setuid(user_uid)", 1);
break;
case PERM_RUNAS:
else
error = setuid(runas_pw->pw_uid);
if (error)
- fatal("unable to change to runas uid");
+ fatal("unable to change to runas uid", 1);
break;
case PERM_SUDOERS:
/* assume euid == 0, ruid == user */
if (setegid(SUDOERS_GID))
- fatal("unable to change to sudoers gid");
+ fatal("unable to change to sudoers gid", 1);
/*
* If SUDOERS_UID == 0 and SUDOERS_MODE
*/
if (SUDOERS_UID == 0) {
if ((SUDOERS_MODE & 040) && setreuid(0, 1))
- fatal("setreuid(0, 1)");
+ fatal("setreuid(0, 1)", 1);
} else {
if (setreuid(0, SUDOERS_UID))
- fatal("setreuid(0, SUDOERS_UID)");
+ fatal("setreuid(0, SUDOERS_UID)", 1);
}
break;
}
* real and effective uidss to 0 initially.
*/
if (setuid(0))
- fatal("setuid(0)");
+ fatal("setuid(0)", 1);
switch (perm) {
case PERM_USER:
(void) setegid(user_gid);
if (seteuid(user_uid))
- fatal("seteuid(user_uid)");
+ fatal("seteuid(user_uid)", 1);
break;
case PERM_FULL_USER:
/* headed for exec() */
(void) setgid(user_gid);
if (setuid(user_uid))
- fatal("setuid(user_uid)");
+ fatal("setuid(user_uid)", 1);
break;
case PERM_RUNAS:
/* headed for exec(), assume euid == 0 */
runas_setup();
if (setuid(runas_pw->pw_uid))
- fatal("unable to change to runas uid");
+ fatal("unable to change to runas uid", 1);
break;
case PERM_SUDOERS:
/* assume euid == 0, ruid == user */
if (setegid(SUDOERS_GID))
- fatal("unable to change to sudoers gid");
+ fatal("unable to change to sudoers gid", 1);
/*
* If SUDOERS_UID == 0 and SUDOERS_MODE
*/
if (SUDOERS_UID == 0) {
if ((SUDOERS_MODE & 040) && seteuid(1))
- fatal("seteuid(1)");
+ fatal("seteuid(1)", 1);
} else {
if (seteuid(SUDOERS_UID))
- fatal("seteuid(SUDOERS_UID)");
+ fatal("seteuid(SUDOERS_UID)", 1);
}
break;
}
}
static void
-fatal(str)
+fatal(str, printerr)
char *str;
{
- if (str)
- perror(str);
+ if (str) {
+ if (printerr)
+ perror(str);
+ else {
+ fputs(str, stderr);
+ fputc('\n', stderr);
+ }
+ }
exit(1);
}