[git commit] libbb: exec_login_shell() - new function

Denys Vlasenko vda.linux at googlemail.com
Wed Dec 2 20:51:08 UTC 2020


commit: https://git.busybox.net/busybox/commit/?id=f4f6e5144b9af71dc687dc14dba4a6caf8c28361
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

function                                             old     new   delta
exec_login_shell                                       -      12     +12
sulogin_main                                         247     240      -7
login_main                                           960     953      -7
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 0/2 up/down: 12/-14)             Total: -2 bytes

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 include/libbb.h      | 1 +
 libbb/run_shell.c    | 9 +++++++--
 loginutils/login.c   | 2 +-
 loginutils/sulogin.c | 2 +-
 4 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/include/libbb.h b/include/libbb.h
index c23018f17..8f1ee7eec 100644
--- a/include/libbb.h
+++ b/include/libbb.h
@@ -1607,6 +1607,7 @@ void msleep(unsigned ms) FAST_FUNC;
 void sleep1(void) FAST_FUNC;
 void change_identity(const struct passwd *pw) FAST_FUNC;
 void exec_shell(const char *shell, int loginshell, const char **args) NORETURN FAST_FUNC;
+void exec_login_shell(const char *shell) NORETURN FAST_FUNC;
 void exec_prog_or_SHELL(char **argv) NORETURN FAST_FUNC;
 
 /* Returns $SHELL, getpwuid(getuid())->pw_shell, or DEFAULT_SHELL.
diff --git a/libbb/run_shell.c b/libbb/run_shell.c
index 9bec43b7c..c22bba87b 100644
--- a/libbb/run_shell.c
+++ b/libbb/run_shell.c
@@ -84,14 +84,19 @@ void FAST_FUNC exec_shell(const char *shell, int loginshell, const char **additi
 	bb_perror_msg_and_die("can't execute '%s'", shell);
 }
 
+void FAST_FUNC exec_login_shell(const char *shell)
+{
+	exec_shell(shell, 1, NULL);
+}
+
 /* Typical idiom for applets which exec *optional* PROG [ARGS] */
 void FAST_FUNC exec_prog_or_SHELL(char **argv)
 {
 	if (argv[0]) {
 		BB_EXECVP_or_die(argv);
 	}
-	/* Why login=1? Both users (nsenter and unshare) do indeed exec
+	/* Both users (nsenter and unshare) do indeed exec
 	 * a _login_ shell (with dash in argv[0])!
 	 */
-	exec_shell(getenv("SHELL"), /*login:*/ 1, NULL);
+	exec_login_shell(getenv("SHELL"));
 }
diff --git a/loginutils/login.c b/loginutils/login.c
index aacd47241..de05631d2 100644
--- a/loginutils/login.c
+++ b/loginutils/login.c
@@ -602,7 +602,7 @@ int login_main(int argc UNUSED_PARAM, char **argv)
 	signal(SIGINT, SIG_DFL);
 
 	/* Exec login shell with no additional parameters */
-	exec_shell(pw->pw_shell, 1, NULL);
+	exec_login_shell(pw->pw_shell);
 
 	/* return EXIT_FAILURE; - not reached */
 }
diff --git a/loginutils/sulogin.c b/loginutils/sulogin.c
index 127aa1de9..69d8b5ec7 100644
--- a/loginutils/sulogin.c
+++ b/loginutils/sulogin.c
@@ -89,5 +89,5 @@ int sulogin_main(int argc UNUSED_PARAM, char **argv)
 		shell = pwd->pw_shell;
 
 	/* Exec login shell with no additional parameters. Never returns. */
-	exec_shell(shell, 1, NULL);
+	exec_login_shell(shell);
 }


More information about the busybox-cvs mailing list