summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2018-10-16 18:05:58 -0400
committerNick Mathewson <nickm@torproject.org>2018-10-16 18:05:58 -0400
commitf8aad4a5486b3adb53d07eb74e912f9c92d63b00 (patch)
tree6325ee1780b9ac0660cb3207929ecbd22e27c606
parentbf1635d8cf292b5d589e991a92a3c8f09ec32e51 (diff)
parentb5731cdf2ecdf0662de7268d95aa67cfaca92b6e (diff)
downloadtor-f8aad4a5486b3adb53d07eb74e912f9c92d63b00.tar.gz
tor-f8aad4a5486b3adb53d07eb74e912f9c92d63b00.zip
Merge branch 'maint-0.3.4' into release-0.3.4
-rw-r--r--changes/ticket278495
-rw-r--r--src/or/main.c7
2 files changed, 11 insertions, 1 deletions
diff --git a/changes/ticket27849 b/changes/ticket27849
new file mode 100644
index 0000000000..c2babeffc7
--- /dev/null
+++ b/changes/ticket27849
@@ -0,0 +1,5 @@
+ o Major bugfixes (mainloop, bootstrap):
+ - Make sure Tor bootstraps and works properly if only the ControlPort is
+ set. Prior to this fix, Tor would only bootstrap with at least a client
+ port being set (Socks, Trans, NATD, DNS or HTTPTunnel port). Fixes bug
+ 27849; bugfix on 0.3.4.1-alpha.
diff --git a/src/or/main.c b/src/or/main.c
index a93fdc3922..bc01e07c3d 100644
--- a/src/or/main.c
+++ b/src/or/main.c
@@ -1493,13 +1493,18 @@ get_my_roles(const or_options_t *options)
int roles = 0;
int is_bridge = options->BridgeRelay;
- int is_client = options_any_client_port_set(options);
int is_relay = server_mode(options);
int is_dirauth = authdir_mode_v3(options);
int is_bridgeauth = authdir_mode_bridge(options);
int is_hidden_service = !!hs_service_get_num_services() ||
!!rend_num_services();
int is_dirserver = dir_server_mode(options);
+ /* We also consider tor to have the role of a client if the ControlPort is
+ * set because a lot of things can be done over the control port which
+ * requires tor to have basic functionnalities. */
+ int is_client = options_any_client_port_set(options) ||
+ options->ControlPort_set ||
+ options->OwningControllerFD >= 0;
if (is_bridge) roles |= PERIODIC_EVENT_ROLE_BRIDGE;
if (is_client) roles |= PERIODIC_EVENT_ROLE_CLIENT;