aboutsummaryrefslogtreecommitdiff
path: root/loginutils/sulogin.c
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2006-10-14 11:47:02 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2006-10-14 11:47:02 +0000
commitc345d8e94589e3c74a9fac40f440affbc359c8d1 (patch)
tree2474ddafdbd9cd2f2209bf1d2de01e2488d0673e /loginutils/sulogin.c
parent997aa1179e896642755631c73570ffdf43d304a1 (diff)
downloadbusybox-c345d8e94589e3c74a9fac40f440affbc359c8d1.tar.gz
sulogin: add support for $SUSHELL & $sushell
Diffstat (limited to 'loginutils/sulogin.c')
-rw-r--r--loginutils/sulogin.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/loginutils/sulogin.c b/loginutils/sulogin.c
index 679439544..c07264e7b 100644
--- a/loginutils/sulogin.c
+++ b/loginutils/sulogin.c
@@ -42,6 +42,7 @@ int sulogin_main(int argc, char **argv)
const char * const *p;
struct passwd *pwd;
struct spwd *spwd;
+ const char *shell;
logmode = LOGMODE_BOTH;
openlog(applet_name, 0, LOG_AUTH);
@@ -69,12 +70,14 @@ int sulogin_main(int argc, char **argv)
signal(SIGALRM, catchalarm);
- if (!(pwd = getpwuid(0))) {
+ pwd = getpwuid(0);
+ if (!pwd) {
goto auth_error;
}
if (ENABLE_FEATURE_SHADOWPASSWDS) {
- if (!(spwd = getspnam(pwd->pw_name))) {
+ spwd = getspnam(pwd->pw_name);
+ if (!spwd) {
goto auth_error;
}
pwd->pw_passwd = spwd->sp_pwdp;
@@ -103,9 +106,16 @@ int sulogin_main(int argc, char **argv)
USE_SELINUX(renew_current_security_context());
- run_shell(pwd->pw_shell, 1, 0, 0);
+ shell = getenv("SUSHELL");
+ if (!shell) shell = getenv("sushell");
+ if (!shell) {
+ shell = "/bin/sh";
+ if (pwd->pw_shell[0])
+ shell = pwd->pw_shell;
+ }
+ run_shell(shell, 1, 0, 0);
/* never returns */
auth_error:
- bb_error_msg_and_die("no password entry for `root'");
+ bb_error_msg_and_die("no password entry for 'root'");
}