From 18f47bbb73ce4039c67b6c5e87ea43126713d7dd Mon Sep 17 00:00:00 2001 From: teor Date: Tue, 3 Jan 2017 16:52:56 +1100 Subject: Allow relays to use directory mirrors without a DirPort These relays need to be contacted over their ORPorts using a begindir connection, and relays try not to use begindir connections. Fixes bug 20711; bugfix on 0.2.8.2-alpha. --- src/or/directory.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'src/or') diff --git a/src/or/directory.c b/src/or/directory.c index 024ed67bff..a39fc3b643 100644 --- a/src/or/directory.c +++ b/src/or/directory.c @@ -1067,6 +1067,7 @@ directory_must_use_begindir(const or_options_t *options) /** Evaluate the situation and decide if we should use an encrypted * "begindir-style" connection for this directory request. + * 0) If there is no DirPort, yes. * 1) If or_port is 0, or it's a direct conn and or_port is firewalled * or we're a dir mirror, no. * 2) If we prefer to avoid begindir conns, and we're not fetching or @@ -1077,15 +1078,22 @@ directory_must_use_begindir(const or_options_t *options) */ static int directory_command_should_use_begindir(const or_options_t *options, - const tor_addr_t *addr, - int or_port, uint8_t router_purpose, + const tor_addr_t *or_addr, int or_port, + const tor_addr_t *dir_addr, int dir_port, + uint8_t router_purpose, dir_indirection_t indirection, const char **reason) { (void) router_purpose; + (void) dir_addr; tor_assert(reason); *reason = NULL; + /* Reasons why we must use begindir */ + if (!dir_port) { + *reason = "(using begindir - directory with no DirPort)"; + return 1; /* We don't know a DirPort -- must begindir. */ + } /* Reasons why we can't possibly use begindir */ if (!or_port) { *reason = "directory with unknown ORPort"; @@ -1098,7 +1106,7 @@ directory_command_should_use_begindir(const or_options_t *options, } if (indirection == DIRIND_ONEHOP) { /* We're firewalled and want a direct OR connection */ - if (!fascist_firewall_allows_address_addr(addr, or_port, + if (!fascist_firewall_allows_address_addr(or_addr, or_port, FIREWALL_OR_CONNECTION, 0, 0)) { *reason = "ORPort not reachable"; return 0; @@ -1190,6 +1198,7 @@ directory_initiate_command_rend(const tor_addr_port_t *or_addr_port, * send our directory request)? */ const int use_begindir = directory_command_should_use_begindir(options, &or_addr_port->addr, or_addr_port->port, + &dir_addr_port->addr, dir_addr_port->port, router_purpose, indirection, &begindir_reason); /* Will the connection go via a three-hop Tor circuit? Note that this -- cgit v1.2.3-54-g00ecf From 518ef61975b569eb604b30c92d965e98373c2673 Mon Sep 17 00:00:00 2001 From: teor Date: Tue, 3 Jan 2017 16:56:32 +1100 Subject: Clarify the message logged when a remote relay is unexpectedly missing a port (Users were confusing this with a local port.) Fixes bug 20711; bugfix on 0.2.8.2-alpha. --- changes/bug20711 | 4 +++- src/or/directory.c | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) (limited to 'src/or') diff --git a/changes/bug20711 b/changes/bug20711 index 01a1ad7087..0bc0d94fb1 100644 --- a/changes/bug20711 +++ b/changes/bug20711 @@ -2,4 +2,6 @@ - Allow relays to use directory mirrors without a DirPort: these relays need to be contacted over their ORPorts using a begindir connection. Fixes bug 20711; bugfix on 0.2.8.2-alpha. - + - Clarify the message logged when a remote relay is unexpectedly missing + an ORPort or DirPort: users were confusing this with a local port. + Fixes bug 20711; bugfix on 0.2.8.2-alpha. diff --git a/src/or/directory.c b/src/or/directory.c index a39fc3b643..38bd5f9fa4 100644 --- a/src/or/directory.c +++ b/src/or/directory.c @@ -1245,9 +1245,9 @@ directory_initiate_command_rend(const tor_addr_port_t *or_addr_port, if (!port || tor_addr_is_null(&addr)) { static int logged_backtrace = 0; log_warn(LD_DIR, - "Cannot make an outgoing %sconnection without %sPort.", + "Cannot make an outgoing %sconnection without a remote %sPort.", use_begindir ? "begindir " : "", - use_begindir ? "an OR" : "a Dir"); + use_begindir ? "OR" : "Dir"); if (!logged_backtrace) { log_backtrace(LOG_INFO, LD_BUG, "Address came from"); logged_backtrace = 1; -- cgit v1.2.3-54-g00ecf