From 5da0a460fede27d7ce6ce574628602228dab8be3 Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Tue, 2 Mar 2021 20:31:34 +0100 Subject: [PATCH] initctl: fix runlevel and start/stop/restart segfault regression Introduced in e2f6ac0. Signed-off-by: Joachim Wiberg --- src/initctl.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/initctl.c b/src/initctl.c index c873db25..140e0d68 100644 --- a/src/initctl.c +++ b/src/initctl.c @@ -143,10 +143,9 @@ static int do_runlevel(char *arg) struct init_request rq = { .magic = INIT_MAGIC, .cmd = INIT_CMD_RUNLVL, - .runlevel = (int)arg[0], }; - if (!rq.runlevel) { + if (!arg) { int prevlevel = 0; int runlevel; char prev; @@ -165,6 +164,9 @@ static int do_runlevel(char *arg) return 0; } + /* set runlevel */ + rq.runlevel = (int)arg[0]; + return client_send(&rq, sizeof(rq)); } @@ -195,6 +197,13 @@ static int do_startstop(int cmd, char *arg) .cmd = INIT_CMD_SVC_QUERY }; + if (!arg || !arg[0]) + errx(1, "missing argument to %s", (cmd == INIT_CMD_START_SVC + ? "start" + : (cmd == INIT_CMD_STOP_SVC + ? "stop" + : "restart"))); + strlcpy(rq.data, arg, sizeof(rq.data)); if (client_send(&rq, sizeof(rq))) { fprintf(stderr, "No such job(s) or service(s): %s\n\n", rq.data);