[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[or-cvs] [tor/master] Fix assert for relay/bridge state change



commit 68f8ca357fa98e7a2ed4ab45e4b982ea2ca370c8
Author: Sebastian Hahn <sebastian@xxxxxxxxxxxxxx>
Date:   Tue Jan 25 15:28:58 2011 +0100

    Fix assert for relay/bridge state change
    
    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 |    5 +++++
 src/or/config.c |   11 ++++++-----
 2 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/changes/bug2433 b/changes/bug2433
new file mode 100644
index 0000000..8e47c4f
--- /dev/null
+++ b/changes/bug2433
@@ -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.
+
diff --git a/src/or/config.c b/src/or/config.c
index b124db1..8c1205d 100644
--- a/src/or/config.c
+++ b/src/or/config.c
@@ -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;