From d51695494a2d16fa9128eb443e4eee495cd77423 Mon Sep 17 00:00:00 2001 From: Alex 'AdUser' Z Date: Fri, 11 Mar 2016 17:27:33 +1000 Subject: [PATCH] * add handlers of SIGTERM & SIGHUP --- src/common.h | 2 ++ src/main.c | 28 +++++++++++++++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/common.h b/src/common.h index 0eefac2..bf41e47 100644 --- a/src/common.h +++ b/src/common.h @@ -17,6 +17,8 @@ #include #include +#define UNUSED(x) (void)(x) + #define FREE(x) free(x), x = NULL #endif /* F2B_COMMON_H_ */ diff --git a/src/main.c b/src/main.c index d792eb2..ee6cdd4 100644 --- a/src/main.c +++ b/src/main.c @@ -6,6 +6,29 @@ #include "backend.h" #include +#include + +bool run = true; +bool rcfg = false; + +void sa_term(int signum) { + UNUSED(signum); + f2b_log_msg(log_info, "got SIGTERM, exiting"); + run = false; +} +void sa_hup(int signum) { + UNUSED(signum); + f2b_log_msg(log_info, "got SIGHUP, reloading config"); + rcfg = true; +} + +#define SA_REGISTER(signum, handler) \ + memset(&act, 0x0, sizeof(act)); \ + act.sa_handler = handler; \ + if (sigaction(SIGTERM, &act, NULL) != 0) { \ + f2b_log_msg(log_error, "can't register handler for " #signum); \ + return EXIT_FAILURE; \ + } void usage(int exitcode) { fprintf(stderr, "Usage: f2b -c \n"); @@ -13,13 +36,13 @@ void usage(int exitcode) { } int main(int argc, char *argv[]) { + struct sigaction act; f2b_config_t *config = NULL; f2b_config_section_t *section = NULL; f2b_jail_t *jails = NULL; f2b_jail_t *jail = NULL; char *config_file = NULL; char opt = '\0'; - bool run = true; while ((opt = getopt(argc, argv, "c:h")) != -1) { switch (opt) { @@ -35,6 +58,9 @@ int main(int argc, char *argv[]) { } } + SA_REGISTER(SIGTERM, &sa_term); + SA_REGISTER(SIGHUP, &sa_hup); + if (!config_file) usage(EXIT_FAILURE); if ((config = f2b_config_load(config_file)) == NULL) {