Browse Source

Add an option to disable signal handler installation.

Closes ticket 24588.
Nick Mathewson 6 years ago
parent
commit
20f802ea3c
4 changed files with 20 additions and 1 deletions
  1. 5 0
      changes/ticket24588
  2. 7 0
      src/or/config.c
  3. 3 1
      src/or/main.c
  4. 5 0
      src/or/or.h

+ 5 - 0
changes/ticket24588

@@ -0,0 +1,5 @@
+  o Minor features (embedding, mobile):
+    - Applications that want to embed Tor can now tell Tor not to register
+      any of its own POSIX signal handlers, using the __DisableSignalHandlers
+      option. This option is not meant for general use. Closes ticket 24588.
+

+ 7 - 0
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 "

+ 3 - 1
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,

+ 5 - 0
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())