]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Refine extend_info_for_node's "enough info" check once again.
authorNick Mathewson <nickm@torproject.org>
Thu, 12 Apr 2018 20:53:53 +0000 (16:53 -0400)
committerNick Mathewson <nickm@torproject.org>
Thu, 12 Apr 2018 20:56:29 +0000 (16:56 -0400)
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 [new file with mode: 0644]
src/or/circuitbuild.c

diff --git a/changes/bug25691 b/changes/bug25691
new file mode 100644 (file)
index 0000000..5f630d5
--- /dev/null
@@ -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.
+
index 01921bac159596f80193f44452c9dc405a66d02f..5f1f8122fd4c44939c667bfac9a23bf8adc15a12 100644 (file)
@@ -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;