summaryrefslogtreecommitdiff
path: root/src/or
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2017-12-15 12:48:29 -0500
committerNick Mathewson <nickm@torproject.org>2017-12-15 12:48:29 -0500
commit20f802ea3cd5d8b3993a101da03dfec95bc9049e (patch)
tree864bbaad076040c6071d2a171b3f7716b78ca5e9 /src/or
parentfdd5734875a49c4bfdebde45189038dd42306504 (diff)
downloadtor-20f802ea3cd5d8b3993a101da03dfec95bc9049e.tar.gz
tor-20f802ea3cd5d8b3993a101da03dfec95bc9049e.zip
Add an option to disable signal handler installation.
Closes ticket 24588.
Diffstat (limited to 'src/or')
-rw-r--r--src/or/config.c7
-rw-r--r--src/or/main.c4
-rw-r--r--src/or/or.h5
3 files changed, 15 insertions, 1 deletions
diff --git a/src/or/config.c b/src/or/config.c
index 016d87f81f..ebbe726c7b 100644
--- a/src/or/config.c
+++ b/src/or/config.c
@@ -564,6 +564,7 @@ static config_var_t option_vars_[] = {
VAR("__ReloadTorrcOnSIGHUP", BOOL, ReloadTorrcOnSIGHUP, "1"),
VAR("__AllDirActionsPrivate", BOOL, AllDirActionsPrivate, "0"),
VAR("__DisablePredictedCircuits",BOOL,DisablePredictedCircuits, "0"),
+ VAR("__DisableSignalHandlers", BOOL, DisableSignalHandlers, "0"),
VAR("__LeaveStreamsUnattached",BOOL, LeaveStreamsUnattached, "0"),
VAR("__HashedControlSessionPassword", LINELIST, HashedControlSessionPassword,
NULL),
@@ -4652,6 +4653,12 @@ options_transition_allowed(const or_options_t *old,
return -1;
}
+ if (old->DisableSignalHandlers != new_val->DisableSignalHandlers) {
+ *msg = tor_strdup("While Tor is running, changing DisableSignalHandlers "
+ "is not allowed.");
+ return -1;
+ }
+
if (strcmp(old->DataDirectory,new_val->DataDirectory)!=0) {
tor_asprintf(msg,
"While Tor is running, changing DataDirectory "
diff --git a/src/or/main.c b/src/or/main.c
index 38f25cae50..9adad07941 100644
--- a/src/or/main.c
+++ b/src/or/main.c
@@ -3057,8 +3057,10 @@ void
handle_signals(void)
{
int i;
+ const int enabled = !get_options()->DisableSignalHandlers;
+
for (i = 0; signal_handlers[i].signal_value >= 0; ++i) {
- if (signal_handlers[i].try_to_register) {
+ if (enabled && signal_handlers[i].try_to_register) {
signal_handlers[i].signal_event =
tor_evsignal_new(tor_libevent_get_base(),
signal_handlers[i].signal_value,
diff --git a/src/or/or.h b/src/or/or.h
index 9c53949879..91d6436389 100644
--- a/src/or/or.h
+++ b/src/or/or.h
@@ -4651,6 +4651,11 @@ typedef struct {
/** List of files that were opened by %include in torrc and torrc-defaults */
smartlist_t *FilesOpenedByIncludes;
+
+ /** If true, Tor shouldn't install any posix signal handlers, since it is
+ * running embedded inside another process.
+ */
+ int DisableSignalHandlers;
} or_options_t;
#define LOG_PROTOCOL_WARN (get_protocol_warning_severity_level())