From bb3d9c86702edf125f6ee1ac00d4ddcab37867dd Mon Sep 17 00:00:00 2001 From: Joachim Nilsson Date: Fri, 22 Dec 2017 12:50:18 +0100 Subject: [PATCH] initctl: Add support for touch , mark .conf for reload Signed-off-by: Joachim Nilsson --- src/initctl.c | 2 ++ src/serv.c | 25 +++++++++++++++++++++++++ src/serv.h | 1 + 3 files changed, 28 insertions(+) diff --git a/src/initctl.c b/src/initctl.c index 000b6eeb..f003b635 100644 --- a/src/initctl.c +++ b/src/initctl.c @@ -524,6 +524,7 @@ static int usage(int rc) " list List all .conf in /etc/finit.d/\n" " enable Enable .conf in /etc/finit.d/available/\n" " disable Disable .conf in /etc/finit.d/[enabled/]\n" + " touch Mark .conf in /etc/finit.d/ for reload\n" " reload Reload *.conf in /etc/finit.d/ (activates changes)\n" // " reload [:ID] Reload (SIGHUP) service by job# or name\n" "\n" @@ -566,6 +567,7 @@ int main(int argc, char *argv[]) { "list", serv_list }, { "enable", serv_enable }, { "disable", serv_disable }, + { "touch", serv_touch }, { "reload", do_reload }, { "cond", do_cond }, diff --git a/src/serv.c b/src/serv.c index 64fe864a..b6579be8 100644 --- a/src/serv.c +++ b/src/serv.c @@ -24,6 +24,7 @@ #include "config.h" #include +#include /* Definition of AT_* constants */ #include #include #include @@ -168,6 +169,30 @@ int serv_disable(char *arg) return remove(link) != 0; } +int serv_touch(char *arg) +{ + char corr[40]; + + if (!strstr(arg, ".conf")) { + snprintf(corr, sizeof(corr), "%s.conf", arg); + arg = corr; + } + + pushd(FINIT_RCSD); + if (!fexist(arg)) { + popd(); + if (!strstr(arg, "finit.conf")) + errx(1, "Service %s is not enabled", arg); + arg = FINIT_CONF; + } + + /* libite:touch() follows symlinks */ + if (utimensat(AT_FDCWD, arg, NULL, AT_SYMLINK_NOFOLLOW)) + err(1, "Failed marking %s for reload", arg); + + return 0; +} + /** * Local Variables: * indent-tabs-mode: t diff --git a/src/serv.h b/src/serv.h index 9692d4cc..0fc46249 100644 --- a/src/serv.h +++ b/src/serv.h @@ -27,6 +27,7 @@ int serv_list (char *arg); int serv_enable (char *arg); int serv_disable (char *arg); +int serv_touch (char *arg); #endif /* FINIT_SERV_H_ */