From: Mike Yuan Date: Sat, 4 Jan 2025 14:11:53 +0000 (+0100) Subject: tty-ask-password-agent: coding style tweaks X-Git-Tag: v258-rc1~1706^2~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c56935a09d408f5cfec481dab6b9a6ab3f727d70;p=thirdparty%2Fsystemd.git tty-ask-password-agent: coding style tweaks --- diff --git a/src/tty-ask-password-agent/tty-ask-password-agent.c b/src/tty-ask-password-agent/tty-ask-password-agent.c index 9bd7ba452f3..68b6d1c70e4 100644 --- a/src/tty-ask-password-agent/tty-ask-password-agent.c +++ b/src/tty-ask-password-agent/tty-ask-password-agent.c @@ -567,12 +567,16 @@ static int parse_argv(int argc, char *argv[]) { /* * To be able to ask on all terminal devices of /dev/console the devices are collected. If more than one * device is found, then on each of the terminals an inquiring task is forked. Every task has its own session - * and its own controlling terminal. If one of the tasks does handle a password, the remaining tasks will be + * and its own controlling terminal. If one of the tasks does handle a password, the remaining tasks will be * terminated. */ -static int ask_on_this_console(const char *tty, pid_t *ret_pid, char **arguments) { +static int ask_on_this_console(const char *tty, char **arguments, pid_t *ret_pid) { int r; + assert(tty); + assert(arguments); + assert(ret_pid); + assert_se(sigaction(SIGCHLD, &sigaction_nop_nocldstop, NULL) >= 0); assert_se(sigaction(SIGHUP, &sigaction_default, NULL) >= 0); assert_se(sigprocmask_many(SIG_UNBLOCK, NULL, SIGHUP, SIGCHLD) >= 0); @@ -654,12 +658,12 @@ static void terminate_agents(Set *pids) { } static int ask_on_consoles(char *argv[]) { - _cleanup_set_free_ Set *pids = NULL; _cleanup_strv_free_ char **consoles = NULL, **arguments = NULL; - siginfo_t status = {}; - pid_t pid; + _cleanup_set_free_ Set *pids = NULL; int r; + assert(argv); + r = get_kernel_consoles(&consoles); if (r < 0) return log_error_errno(r, "Failed to determine devices of /dev/console: %m"); @@ -674,7 +678,9 @@ static int ask_on_consoles(char *argv[]) { /* Start an agent on each console. */ STRV_FOREACH(tty, consoles) { - r = ask_on_this_console(*tty, &pid, arguments); + pid_t pid; + + r = ask_on_this_console(*tty, arguments, &pid); if (r < 0) return r; @@ -684,22 +690,22 @@ static int ask_on_consoles(char *argv[]) { /* Wait for an agent to exit. */ for (;;) { - zero(status); + siginfo_t status = {}; if (waitid(P_ALL, 0, &status, WEXITED) < 0) { if (errno == EINTR) continue; - return log_error_errno(errno, "waitid() failed: %m"); + return log_error_errno(errno, "Failed to wait for console ask-password agent: %m"); } + if (!is_clean_exit(status.si_code, status.si_status, EXIT_CLEAN_DAEMON, NULL)) + log_error("Password agent failed with: %d", status.si_status); + set_remove(pids, PID_TO_PTR(status.si_pid)); break; } - if (!is_clean_exit(status.si_code, status.si_status, EXIT_CLEAN_DAEMON, NULL)) - log_error("Password agent failed with: %d", status.si_status); - terminate_agents(pids); return 0; }