From ada578323291eb51cc9524b4e07963e330b54c1d Mon Sep 17 00:00:00 2001 From: Uros Majstorovic Date: Tue, 7 May 2024 22:19:24 +0200 Subject: reload acl list on SIGUSR1 --- ecp/server/sig.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 ecp/server/sig.c (limited to 'ecp/server/sig.c') diff --git a/ecp/server/sig.c b/ecp/server/sig.c new file mode 100644 index 0000000..09593d3 --- /dev/null +++ b/ecp/server/sig.c @@ -0,0 +1,61 @@ +#include +#include +#include + +#include +#include + +#include "server.h" +#include "acl.h" +#include "sig.h" + +static pthread_t sig_handler_thd; +static sigset_t sig_set; + +static void * _sig_handler(void *arg) { + sigset_t *set = arg; + int rv, sig; + + while (1) { + rv = sigwait(set, &sig); + if (rv) { + LOG(LOG_ERR, "sig_handler: sigwait err:%d\n", rv); + continue; + } + switch (sig) { + case SIGUSR1: { + rv = acl_load(); + if (rv) { + LOG(LOG_ERR, "sig_handler: acl load err:%d\n", rv); + continue; + } + LOG(LOG_DEBUG, "sig_handler: acl reloaded\n"); + break; + } + } + } + + return NULL; +} + +int sig_start_handler(void) { + int rv; + + rv = pthread_create(&sig_handler_thd, NULL, &_sig_handler, (void *)&sig_set); + if (rv) return ECP_ERR; + return ECP_OK; + +} + +int sig_init(void) { + int rv; + + sigemptyset(&sig_set); + sigaddset(&sig_set, SIGUSR1); + + rv = pthread_sigmask(SIG_BLOCK, &sig_set, NULL); + if (rv) return ECP_ERR; + + return ECP_OK; +} + -- cgit v1.2.3