From 5404aa6037ff9a9e3bdb16b5c3bff93eafe222d6 Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Sun, 30 May 2021 10:24:07 +0200 Subject: [PATCH] Refactor run_getty() and run_getty2() into one By moving the built-in getty to a stand-alone bundled getty we can now refactor the old run_getty() functions into a single one. Signed-off-by: Joachim Wiberg --- src/exec.c | 30 +----------------------------- src/finit.h | 1 + src/helpers.h | 3 +-- src/service.c | 9 ++------- src/tty.c | 11 ++++++----- 5 files changed, 11 insertions(+), 43 deletions(-) diff --git a/src/exec.c b/src/exec.c index 1d564b6b..44a8b107 100644 --- a/src/exec.c +++ b/src/exec.c @@ -345,35 +345,7 @@ static int activate_console(int noclear, int nowait) * since /bin/login usually only disables ECHO until a password line has * been entered. Upon starting the user's $SHELL the ISIG flag is reset */ -pid_t run_getty(char *tty, char *baud, char *term, int noclear, int nowait, struct rlimit rlimit[]) -{ - speed_t speed; - int rc = 1; - - speed = stty_parse_speed(baud); - prepare_tty(tty, speed, "tty", rlimit); - if (activate_console(noclear, nowait)) { - char spd[15]; - char *args[5] = { - "getty", - tty, - spd, - term, - NULL - }; - snprintf(spd, sizeof(spd), "%d", speed); - logit(LOG_ERR, "Starting built-in getty on %s, speed %u", tty, speed); - rc = execv("/libexec/finit/getty", args); - } - logit(LOG_ERR, "Failed starting built-in getty on %s, speed %u", tty, speed); - - return rc; -} - -/* - * Start external getty as defined by user in .conf file - */ -pid_t run_getty2(char *tty, char *cmd, char *args[], int noclear, int nowait, struct rlimit rlimit[]) +pid_t run_getty(char *tty, char *cmd, char *args[], int noclear, int nowait, struct rlimit rlimit[]) { int rc = 1; diff --git a/src/finit.h b/src/finit.h index 2c925836..86574dba 100644 --- a/src/finit.h +++ b/src/finit.h @@ -52,6 +52,7 @@ #define _PATH_LOGIT FINIT_LIBPATH_ "/logit" #define _PATH_SULOGIN FINIT_LIBPATH_ "/sulogin" +#define _PATH_GETTY FINIT_LIBPATH_ "/getty" #define CMD_SIZE 256 #define LINE_SIZE 1024 diff --git a/src/helpers.h b/src/helpers.h index 38a65064..4e225f38 100644 --- a/src/helpers.h +++ b/src/helpers.h @@ -92,8 +92,7 @@ int complete (char *cmd, int pid); int run (char *cmd); int run_interactive (char *cmd, char *fmt, ...); int exec_runtask (char *cmd, char *args[]); -pid_t run_getty (char *tty, char *baud, char *term, int noclear, int nowait, struct rlimit rlimit[]); -pid_t run_getty2 (char *tty, char *cmd, char *args[], int noclear, int nowait, struct rlimit rlimit[]); +pid_t run_getty (char *tty, char *cmd, char *args[], int noclear, int nowait, struct rlimit rlimit[]); pid_t run_sh (char *tty, int noclear, int nowait, struct rlimit rlimit[]); int run_parts (char *dir, char *cmd); diff --git a/src/service.c b/src/service.c index 53abb4bd..bb255587 100644 --- a/src/service.c +++ b/src/service.c @@ -1220,12 +1220,7 @@ int service_register(int type, char *cfg, struct rlimit rlimit[], char *file) if (tty_parse_args(cmd, &tty)) return errno; - if (tty.cmd) - len += strlen(tty.cmd); - else - len += 3; - - len += tty.num + 1; + len += strlen(tty.cmd) + tty.num + 1; for (i = 0; i < tty.num; i++) len += strlen(tty.args[i]) + 1; @@ -1233,7 +1228,7 @@ int service_register(int type, char *cfg, struct rlimit rlimit[], char *file) if (!line) return errno; - snprintf(line, len, "%s", tty.cmd ?: "tty"); + snprintf(line, len, "%s", tty.cmd); for (i = 0; i < tty.num; i++) { strlcat(line, " ", len); strlcat(line, tty.args[i], len); diff --git a/src/tty.c b/src/tty.c index 1fbb902e..aea4af77 100644 --- a/src/tty.c +++ b/src/tty.c @@ -221,6 +221,10 @@ int tty_parse_args(char *cmd, struct tty *tty) _d("Registering %s getty on TTY %s at %s baud with term %s", tty->cmd ? "external" : "built-in", tty->dev, tty->baud ?: "0", tty->term ?: "N/A"); + /* Built-in getty now comes as standalone program */ + if (!tty->cmd) + tty->cmd = _PATH_GETTY; + return 0; } @@ -285,10 +289,7 @@ int tty_exec(svc_t *svc) return run_sh(dev, svc->noclear, svc->nowait, svc->rlimit); } - _d("%s: Starting %sgetty ...", dev, !svc->cmd ? "built-in " : ""); - if (!strcmp(svc->cmd, "tty")) - return run_getty(dev, svc->baud, svc->term, svc->noclear, svc->nowait, svc->rlimit); - + _d("%s: Starting %s ...", dev, svc->cmd); for (i = 1, j = 0; i < MAX_NUM_SVC_ARGS; i++) { if (!svc->args[i][0]) break; @@ -297,7 +298,7 @@ int tty_exec(svc_t *svc) } args[j++] = NULL; - return run_getty2(dev, svc->cmd, args, svc->noclear, svc->nowait, svc->rlimit); + return run_getty(dev, svc->cmd, args, svc->noclear, svc->nowait, svc->rlimit); } /**