From 2d6914e3918230b259af3a0535ccb37eb5a77c8e Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Thu, 12 Apr 2018 16:53:53 -0400 Subject: [PATCH] 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 --- changes/bug25691 | 6 ++++++ src/or/circuitbuild.c | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 changes/bug25691 diff --git a/changes/bug25691 b/changes/bug25691 new file mode 100644 index 000000000..5f630d503 --- /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 01921bac1..5f1f8122f 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;