From 8c85a34aac807cd41077f6e32441047b4aea0db5 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Thu, 13 Mar 2014 16:11:56 +0100 Subject: Better systemd integration (enable with ENABLE_SYSTEMD cmake flag) --- src/fastd.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'src/fastd.c') 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 #endif +#ifdef ENABLE_SYSTEMD +#include +#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) -- cgit v1.2.3