aboutsummaryrefslogtreecommitdiff
path: root/src/core/or/connection_or.c
diff options
context:
space:
mode:
authorteor <teor@torproject.org>2020-04-14 12:16:48 +1000
committerteor <teor@torproject.org>2020-04-14 12:16:48 +1000
commit41fa07f751aaf50297d3139c440f7fb3ed71338a (patch)
treeaf15667eb4600a27f9a72a98fdf079152ccfdb7e /src/core/or/connection_or.c
parentab8ff32bec055d938ec53ca31df00bfdedcf8fe7 (diff)
downloadtor-41fa07f751aaf50297d3139c440f7fb3ed71338a.tar.gz
tor-41fa07f751aaf50297d3139c440f7fb3ed71338a.zip
core/or: Allow IPv6 connections to be canonical
Consider IPv6 addresses when checking if a connection is canonical. In 17604, relays assumed that a remote relay could consider an IPv6 connection canonical, but did not set the canonical flag on their side of the connection. Fixes bug 33899; bugfix on 0.3.1.1-alpha.
Diffstat (limited to 'src/core/or/connection_or.c')
-rw-r--r--src/core/or/connection_or.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/core/or/connection_or.c b/src/core/or/connection_or.c
index 6b11f33232..2eecbc50a7 100644
--- a/src/core/or/connection_or.c
+++ b/src/core/or/connection_or.c
@@ -901,12 +901,14 @@ connection_or_check_canonicity(or_connection_t *conn, int started_here)
}
if (r) {
- tor_addr_port_t node_ap;
- node_get_pref_orport(r, &node_ap);
- /* XXXX proposal 186 is making this more complex. For now, a conn
- is canonical when it uses the _preferred_ address. */
- if (tor_addr_eq(&conn->base_.addr, &node_ap.addr))
+ tor_addr_port_t node_ipv4_ap;
+ tor_addr_port_t node_ipv6_ap;
+ node_get_prim_orport(r, &node_ipv4_ap);
+ node_get_pref_ipv6_orport(r, &node_ipv6_ap);
+ if (tor_addr_eq(&conn->base_.addr, &node_ipv4_ap.addr) ||
+ tor_addr_eq(&conn->base_.addr, &node_ipv6_ap.addr)) {
connection_or_set_canonical(conn, 1);
+ }
if (!started_here) {
/* Override the addr/port, so our log messages will make sense.
* This is dangerous, since if we ever try looking up a conn by