sulogin: add support for $SUSHELL & $sushell

This commit is contained in:
Denis Vlasenko 2006-10-14 11:47:02 +00:00
parent 997aa1179e
commit c345d8e945
2 changed files with 19 additions and 9 deletions

View File

@ -114,11 +114,11 @@ static int adduser(struct passwd *p, unsigned long flags)
file = xfopen(bb_path_shadow_file, "a"); file = xfopen(bb_path_shadow_file, "a");
fseek(file, 0, SEEK_END); fseek(file, 0, SEEK_END);
fprintf(file, "%s:!:%ld:%d:%d:%d:::\n", fprintf(file, "%s:!:%ld:%d:%d:%d:::\n",
p->pw_name, /* username */ p->pw_name, /* username */
time(NULL) / 86400, /* sp->sp_lstchg */ time(NULL) / 86400, /* sp->sp_lstchg */
0, /* sp->sp_min */ 0, /* sp->sp_min */
99999, /* sp->sp_max */ 99999, /* sp->sp_max */
7); /* sp->sp_warn */ 7); /* sp->sp_warn */
fclose(file); fclose(file);
#endif #endif

View File

@ -42,6 +42,7 @@ int sulogin_main(int argc, char **argv)
const char * const *p; const char * const *p;
struct passwd *pwd; struct passwd *pwd;
struct spwd *spwd; struct spwd *spwd;
const char *shell;
logmode = LOGMODE_BOTH; logmode = LOGMODE_BOTH;
openlog(applet_name, 0, LOG_AUTH); openlog(applet_name, 0, LOG_AUTH);
@ -69,12 +70,14 @@ int sulogin_main(int argc, char **argv)
signal(SIGALRM, catchalarm); signal(SIGALRM, catchalarm);
if (!(pwd = getpwuid(0))) { pwd = getpwuid(0);
if (!pwd) {
goto auth_error; goto auth_error;
} }
if (ENABLE_FEATURE_SHADOWPASSWDS) { if (ENABLE_FEATURE_SHADOWPASSWDS) {
if (!(spwd = getspnam(pwd->pw_name))) { spwd = getspnam(pwd->pw_name);
if (!spwd) {
goto auth_error; goto auth_error;
} }
pwd->pw_passwd = spwd->sp_pwdp; pwd->pw_passwd = spwd->sp_pwdp;
@ -103,9 +106,16 @@ int sulogin_main(int argc, char **argv)
USE_SELINUX(renew_current_security_context()); 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 */ /* never returns */
auth_error: auth_error:
bb_error_msg_and_die("no password entry for `root'"); bb_error_msg_and_die("no password entry for 'root'");
} }