summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2018-04-12 16:53:53 -0400
committerNick Mathewson <nickm@torproject.org>2018-04-12 16:56:29 -0400
commit2d6914e3918230b259af3a0535ccb37eb5a77c8e (patch)
treecced45ea498781eb3cec52d01462066ffde2f674
parent46795a7be63b9a1b90a59fcf9efda4f4f1eacc37 (diff)
downloadtor-2d6914e3918230b259af3a0535ccb37eb5a77c8e.tar.gz
tor-2d6914e3918230b259af3a0535ccb37eb5a77c8e.zip
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
-rw-r--r--changes/bug256916
-rw-r--r--src/or/circuitbuild.c2
2 files changed, 7 insertions, 1 deletions
diff --git a/changes/bug25691 b/changes/bug25691
new file mode 100644
index 0000000000..5f630d5032
--- /dev/null
+++ 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
index 01921bac15..5f1f8122fd 100644
--- 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;