diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2006-10-14 15:47:02 +0400 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2006-10-14 15:47:02 +0400 |
commit | c345d8e94589e3c74a9fac40f440affbc359c8d1 (patch) | |
tree | 2474ddafdbd9cd2f2209bf1d2de01e2488d0673e /loginutils | |
parent | 997aa1179e896642755631c73570ffdf43d304a1 (diff) |
sulogin: add support for $SUSHELL & $sushell
Diffstat (limited to 'loginutils')
-rw-r--r-- | loginutils/adduser.c | 10 | ||||
-rw-r--r-- | loginutils/sulogin.c | 18 |
2 files changed, 19 insertions, 9 deletions
diff --git a/loginutils/adduser.c b/loginutils/adduser.c index 8101b20b4..a99f47d68 100644 --- a/loginutils/adduser.c +++ b/loginutils/adduser.c @@ -114,11 +114,11 @@ static int adduser(struct passwd *p, unsigned long flags) file = xfopen(bb_path_shadow_file, "a"); fseek(file, 0, SEEK_END); fprintf(file, "%s:!:%ld:%d:%d:%d:::\n", - p->pw_name, /* username */ - time(NULL) / 86400, /* sp->sp_lstchg */ - 0, /* sp->sp_min */ - 99999, /* sp->sp_max */ - 7); /* sp->sp_warn */ + p->pw_name, /* username */ + time(NULL) / 86400, /* sp->sp_lstchg */ + 0, /* sp->sp_min */ + 99999, /* sp->sp_max */ + 7); /* sp->sp_warn */ fclose(file); #endif 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'"); } |