]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Fix assert for relay/bridge state change
authorSebastian Hahn <sebastian@torproject.org>
Tue, 25 Jan 2011 14:28:58 +0000 (15:28 +0100)
committerNick Mathewson <nickm@torproject.org>
Tue, 25 Jan 2011 19:13:06 +0000 (14:13 -0500)
When we added support for separate client tls certs on bridges in
a2bb0bfdd5 we forgot to correctly initialize this when changing
from relay to bridge or vice versa while Tor is running. Fix that
by always initializing keys when the state changes.

Fixes bug 2433.

changes/bug2433 [new file with mode: 0644]
src/or/config.c

diff --git a/changes/bug2433 b/changes/bug2433
new file mode 100644 (file)
index 0000000..8e47c4f
--- /dev/null
@@ -0,0 +1,5 @@
+  o Major bugfixes:
+    - Don't assert when changing from bridge to relay or vice versa with a controller.
+      The assert happened because we didn't properly initialize our keys in this case.
+      Bugfix on 0.2.2.18, fixes bug 2433. Issue first discovered by bastik.
+
index b124db1899b075c60b1f3d627a536704918d15ca..8c1205de474652fbe5259502d1f14b40d91204b3 100644 (file)
@@ -1250,7 +1250,6 @@ options_act(or_options_t *old_options)
 
   /* Check for transitions that need action. */
   if (old_options) {
-
     if ((options->UseEntryGuards && !old_options->UseEntryGuards) ||
         (options->ExcludeNodes &&
          !routerset_equal(old_options->ExcludeNodes,options->ExcludeNodes)) ||
@@ -1298,11 +1297,12 @@ options_act(or_options_t *old_options)
     if (options_transition_affects_workers(old_options, options)) {
       log_info(LD_GENERAL,
                "Worker-related options changed. Rotating workers.");
+
+      if (init_keys() < 0) {
+        log_warn(LD_BUG,"Error initializing keys; exiting");
+        return -1;
+      }
       if (server_mode(options) && !server_mode(old_options)) {
-        if (init_keys() < 0) {
-          log_warn(LD_BUG,"Error initializing keys; exiting");
-          return -1;
-        }
         ip_address_changed(0);
         if (can_complete_circuit || !any_predicted_circuits(time(NULL)))
           inform_testing_reachability();
@@ -3810,6 +3810,7 @@ options_transition_affects_workers(or_options_t *old_options,
                                        new_options->ServerDNSSearchDomains ||
       old_options->SafeLogging != new_options->SafeLogging ||
       old_options->ClientOnly != new_options->ClientOnly ||
+      public_server_mode(old_options) != public_server_mode(new_options) ||
       !config_lines_eq(old_options->Logs, new_options->Logs))
     return 1;