X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;ds=sidebyside;f=loginutils%2Fsulogin.c;h=8e3095c87dfdeda1234633faafa544d79c8f3dc0;hb=c84520d73dbe100449d84241ec0df9d02ee0fc4d;hp=6edd2582b3f250acffda5fa92e9d7c91f2967fe1;hpb=67b23e6043d8e2b30b0bf3bc105b8583c2a26db5;p=oweals%2Fbusybox.git diff --git a/loginutils/sulogin.c b/loginutils/sulogin.c index 6edd2582b..8e3095c87 100644 --- a/loginutils/sulogin.c +++ b/loginutils/sulogin.c @@ -34,6 +34,7 @@ static void catchalarm(int ATTRIBUTE_UNUSED junk) } +int sulogin_main(int argc, char **argv); int sulogin_main(int argc, char **argv) { char *cp; @@ -41,15 +42,13 @@ int sulogin_main(int argc, char **argv) char *timeout_arg; const char * const *p; struct passwd *pwd; - struct spwd *spwd; + const char *shell; logmode = LOGMODE_BOTH; - openlog(bb_applet_name, 0, LOG_AUTH); + openlog(applet_name, 0, LOG_AUTH); - if (getopt32 (argc, argv, "t:", &timeout_arg)) { - if (safe_strtoi(timeout_arg, &timeout)) { - timeout = 0; - } + if (getopt32(argc, argv, "t:", &timeout_arg)) { + timeout = xatoi_u(timeout_arg); } if (argv[optind]) { @@ -71,16 +70,20 @@ 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))) { +#if ENABLE_FEATURE_SHADOWPASSWDS + { + struct spwd *spwd = getspnam(pwd->pw_name); + if (!spwd) { goto auth_error; } pwd->pw_passwd = spwd->sp_pwdp; } +#endif while (1) { /* cp points to a static buffer that is zeroed every time */ @@ -105,9 +108,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'"); }