aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--changes/bug24335
-rw-r--r--src/or/config.c11
2 files changed, 11 insertions, 5 deletions
diff --git a/changes/bug2433 b/changes/bug2433
new file mode 100644
index 000000000..8e47c4f02
--- /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 b124db189..8c1205de4 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;