summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2018-09-13 08:58:28 -0400
committerNick Mathewson <nickm@torproject.org>2018-09-13 08:58:28 -0400
commit75d6609eb1b1503f28054479c92d4f9ad6fe617d (patch)
tree42a087042343842434289a66d19dcd23e27aa0cf /src/lib
parentbfc847255afb093b89dd82687d796e3e3c7fcb89 (diff)
downloadtor-75d6609eb1b1503f28054479c92d4f9ad6fe617d.tar.gz
tor-75d6609eb1b1503f28054479c92d4f9ad6fe617d.zip
Run crypto_prefork() before start_daemon().
Without this, RunAsDaemon breaks NSS. Fixes bug 27664; bug not in any released Tor.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/process/daemon.c10
-rw-r--r--src/lib/process/daemon.h4
2 files changed, 14 insertions, 0 deletions
diff --git a/src/lib/process/daemon.c b/src/lib/process/daemon.c
index c64affd8b9..9fc31eb2e4 100644
--- a/src/lib/process/daemon.c
+++ b/src/lib/process/daemon.c
@@ -38,6 +38,16 @@ static int finish_daemon_called = 0;
/** Socketpair used to communicate between parent and child process while
* daemonizing. */
static int daemon_filedes[2];
+
+/**
+ * Return true iff we've called start_daemon() at least once.
+ */
+bool
+start_daemon_has_been_called(void)
+{
+ return start_daemon_called != 0;
+}
+
/** Start putting the process into daemon mode: fork and drop all resources
* except standard fds. The parent process never returns, but stays around
* until finish_daemon is called. (Note: it's safe to call this more
diff --git a/src/lib/process/daemon.h b/src/lib/process/daemon.h
index c3b78029af..e33bd56701 100644
--- a/src/lib/process/daemon.h
+++ b/src/lib/process/daemon.h
@@ -11,7 +11,11 @@
#ifndef TOR_DAEMON_H
#define TOR_DAEMON_H
+#include <stdbool.h>
+
int start_daemon(void);
int finish_daemon(const char *desired_cwd);
+bool start_daemon_has_been_called(void);
+
#endif