Commit 41fa07f7 authored by teor's avatar teor
Browse files

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.
parent ab8ff32b
Loading
Loading
Loading
Loading

changes/bug33899

0 → 100644
+5 −0
Original line number Diff line number Diff line
  o Minor bugfixes (IPv6, relay):
    - 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.
+7 −5
Original line number Diff line number Diff line
@@ -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