diff options
author | Uros Majstorovic <majstor@majstor.org> | 2024-05-07 22:19:24 +0200 |
---|---|---|
committer | Uros Majstorovic <majstor@majstor.org> | 2024-05-07 22:19:24 +0200 |
commit | ada578323291eb51cc9524b4e07963e330b54c1d (patch) | |
tree | 7d650cabad9078babd74c54a6d05ecee52e0dbe5 /ecp/server/sig.c | |
parent | 9b5e1d985643f209f322254615039c09510f74f7 (diff) |
reload acl list on SIGUSR1
Diffstat (limited to 'ecp/server/sig.c')
-rw-r--r-- | ecp/server/sig.c | 61 |
1 files changed, 61 insertions, 0 deletions
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 <stdlib.h> +#include <unistd.h> +#include <signal.h> + +#include <ecp/core.h> +#include <ecp/dir/dir.h> + +#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; +} + |