tor

The Tor anonymity network
git clone https://git.dasho.dev/tor.git
Log | Files | Refs | README | LICENSE

commit 2d6914e3918230b259af3a0535ccb37eb5a77c8e
parent 46795a7be63b9a1b90a59fcf9efda4f4f1eacc37
Author: Nick Mathewson <nickm@torproject.org>
Date:   Thu, 12 Apr 2018 16:53:53 -0400

Refine extend_info_for_node's "enough info" check once again.

In d1874b433953f64, we adjusted this check so that we insist on
using routerinfos for bridges.  That's almost correct... but if we
have a bridge that is also a regular relay, then we should use
insist on its routerinfo when connecting to it as a bridge
(directly), and be willing to use its microdescriptor when
connecting to it elsewhere in our circuits.

This bug is a likely cause of some (all?) of the (exit_ei == NULL)
failures we've been seeing.

Fixes bug 25691; bugfix on 0.3.3.4-alpha

Diffstat:
Achanges/bug25691 | 6++++++
Msrc/or/circuitbuild.c | 2+-
2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/changes/bug25691 b/changes/bug25691 @@ -0,0 +1,6 @@ + o Minor bugfixes (client): + - When using a listed relay as a bridge, and also using + microdescriptors, and considering that relay as a non-bridge in + a circuit, consider its microdescriptor as a valid source of information + about that relay. Fixes bug 25691; bugfix on 0.3.3.4-alpha. + diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c @@ -2860,7 +2860,7 @@ extend_info_from_node(const node_t *node, int for_direct_connect) const int is_bridge = node_is_a_configured_bridge(node); const int we_use_mds = we_use_microdescriptors_for_circuits(get_options()); - if (is_bridge || !we_use_mds) { + if ((is_bridge && for_direct_connect) || !we_use_mds) { /* We need an ri in this case. */ if (!node->ri) return NULL;