From 0eafe8bcd92e49f7d037228526d0e6fcdc388621 Mon Sep 17 00:00:00 2001 From: Joachim Nilsson Date: Wed, 10 Aug 2016 21:39:09 +0200 Subject: [PATCH] initctl: Show error message when trying to signal PID 1 as non-root Signed-off-by: Joachim Nilsson --- initctl.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/initctl.c b/initctl.c index f1d054d9..8ef97712 100644 --- a/initctl.c +++ b/initctl.c @@ -21,6 +21,7 @@ * THE SOFTWARE. */ +#include #include #include #include @@ -278,9 +279,17 @@ static int do_cond(char *cmd) return do_cond_show(NULL); } -static int do_halt (char *UNUSED(arg)) { return kill(1, SIGUSR1); } -static int do_poweroff(char *UNUSED(arg)) { return kill(1, SIGUSR2); } -static int do_reboot (char *UNUSED(arg)) { return kill(1, SIGTERM); } +static int do_signal(int signo, const char *msg) +{ + if (kill(1, signo)) + err(1, "Failed signalling init to %s", msg); + + return 0; +} + +static int do_halt (char *UNUSED(arg)) { return do_signal(SIGUSR1, "halt"); } +static int do_poweroff(char *UNUSED(arg)) { return do_signal(SIGUSR2, "power off"); } +static int do_reboot (char *UNUSED(arg)) { return do_signal(SIGTERM, "reboot"); } static int do_utmp(char *UNUSED(cmd)) {