diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2014-03-13 16:11:56 +0100 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2014-03-13 16:11:56 +0100 |
commit | 8c85a34aac807cd41077f6e32441047b4aea0db5 (patch) | |
tree | 8347b0afe41c004a5d60285eaeaa2c1e80ff7870 /src/fastd.c | |
parent | e715379e49483f8200abec5bc7ff48f70d73a0cf (diff) | |
download | fastd-8c85a34aac807cd41077f6e32441047b4aea0db5.tar fastd-8c85a34aac807cd41077f6e32441047b4aea0db5.zip |
Better systemd integration (enable with ENABLE_SYSTEMD cmake flag)
Diffstat (limited to 'src/fastd.c')
-rw-r--r-- | src/fastd.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/fastd.c b/src/fastd.c index 58237b1..70117d8 100644 --- a/src/fastd.c +++ b/src/fastd.c @@ -51,6 +51,10 @@ #include <openssl/err.h> #endif +#ifdef ENABLE_SYSTEMD +#include <systemd/sd-daemon.h> +#endif + static volatile bool sighup = false; static volatile bool terminate = false; @@ -874,6 +878,17 @@ int main(int argc, char *argv[]) { fastd_context_t ctx = {}; int status_fd = -1; +#ifdef ENABLE_SYSTEMD + char *notify_socket = getenv("NOTIFY_SOCKET"); + + if (notify_socket) { + notify_socket = strdup(notify_socket); + + /* unset the socket to allow calling on_pre_up safely */ + unsetenv("NOTIFY_SOCKET"); + } +#endif + close_fds(&ctx); fastd_random_bytes(&ctx, &ctx.randseed, sizeof(ctx.randseed), false); @@ -945,6 +960,14 @@ int main(int argc, char *argv[]) { write_pid(&ctx, getpid()); +#ifdef ENABLE_SYSTEMD + if (notify_socket) { + setenv("NOTIFY_SOCKET", notify_socket, 1); + sd_notifyf(1, "READY=1\nMAINPID=%lu", (unsigned long) getpid()); + free(notify_socket); + } +#endif + if (status_fd >= 0) { static const uint8_t STATUS = 0; if (write(status_fd, &STATUS, 1) < 0) |