sulogin: start _login_ shell only with -p

Also, shorten/eliminate messages to be closer to util-linux.

function                                             old     new   delta
packed_usage                                       34233   34238      +5
sulogin_main                                         340     341      +1
.rodata                                           104380  104327     -53
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/1 up/down: 6/-53)             Total: -47 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2022-01-13 01:38:47 +01:00
parent 68b402ee51
commit 96771ec5f5

View File

@ -20,7 +20,8 @@
//usage: "[-t N] [TTY]" //usage: "[-t N] [TTY]"
//usage:#define sulogin_full_usage "\n\n" //usage:#define sulogin_full_usage "\n\n"
//usage: "Single user login\n" //usage: "Single user login\n"
//usage: "\n -t N Timeout" //usage: "\n -p Start a login shell"
//usage: "\n -t SEC Timeout"
#include "libbb.h" #include "libbb.h"
#include <syslog.h> #include <syslog.h>
@ -30,6 +31,7 @@ int sulogin_main(int argc UNUSED_PARAM, char **argv)
{ {
int tsid; int tsid;
int timeout = 0; int timeout = 0;
unsigned opts;
struct passwd *pwd; struct passwd *pwd;
const char *shell; const char *shell;
@ -44,7 +46,7 @@ int sulogin_main(int argc UNUSED_PARAM, char **argv)
logmode = LOGMODE_BOTH; logmode = LOGMODE_BOTH;
openlog(applet_name, 0, LOG_AUTH); openlog(applet_name, 0, LOG_AUTH);
getopt32(argv, "t:+", &timeout); opts = getopt32(argv, "pt:+", &timeout);
argv += optind; argv += optind;
if (argv[0]) { if (argv[0]) {
@ -64,8 +66,8 @@ int sulogin_main(int argc UNUSED_PARAM, char **argv)
int r; int r;
r = ask_and_check_password_extended(pwd, timeout, r = ask_and_check_password_extended(pwd, timeout,
"Give root password for system maintenance\n" "Give root password for maintenance\n"
"(or type Control-D for normal startup):" "(or type Ctrl-D to continue): "
); );
if (r < 0) { if (r < 0) {
/* ^D, ^C, timeout, or read error */ /* ^D, ^C, timeout, or read error */
@ -79,7 +81,8 @@ int sulogin_main(int argc UNUSED_PARAM, char **argv)
bb_simple_info_msg("Login incorrect"); bb_simple_info_msg("Login incorrect");
} }
bb_simple_info_msg("starting shell for system maintenance"); /* util-linux 2.36.1 compat: no message */
/*bb_simple_info_msg("starting shell for system maintenance");*/
IF_SELINUX(renew_current_security_context()); IF_SELINUX(renew_current_security_context());
@ -116,6 +119,6 @@ int sulogin_main(int argc UNUSED_PARAM, char **argv)
*/ */
/*signal(SIGINT, SIG_DFL);*/ /*signal(SIGINT, SIG_DFL);*/
/* Exec login shell with no additional parameters. Never returns. */ /* Exec shell with no additional parameters. Never returns. */
exec_login_shell(shell); exec_shell(shell, /* -p? then shell is login:*/(opts & 1), NULL);
} }