diff options
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) |