Make extend_info_from_node() more picky about node contents

This update is needed to make it consistent with the behavior of
node_awaiting_ipv6(), which doesn't believe in the addresses from
routerinfos unless it actually plans to use those routerinfos.

Fixes bug 25213; bugfix on b66b62fb75 in 0.3.3.1-alpha,
which tightened up the definition of node_awaiting_ipv6().
This commit is contained in:
Nick Mathewson 2018-03-26 09:56:12 -04:00
parent eacfd29112
commit d1874b4339
2 changed files with 17 additions and 2 deletions

5
changes/bug25213 Normal file
View File

@ -0,0 +1,5 @@
o Minor bugfixes (warnings, ipv6):
- Avoid a bug warning that could occur when trying to connect to
a relay over IPv6 on a Tor instance that downloads router descriptors,
but prefers to use microdescriptors. Fixes bug 25213; bugfix on
0.3.3.1-alpha.

View File

@ -2857,8 +2857,18 @@ extend_info_from_node(const node_t *node, int for_direct_connect)
tor_addr_port_t ap;
int valid_addr = 0;
if (node->ri == NULL && (node->rs == NULL || node->md == NULL))
return NULL;
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) {
/* We need an ri in this case. */
if (!node->ri)
return NULL;
} else {
/* Otherwise we need an md. */
if (node->rs == NULL || node->md == NULL)
return NULL;
}
/* Choose a preferred address first, but fall back to an allowed address.
* choose_address returns 1 on success, but get_prim_orport returns 0. */