[tor-commits] [tor/master] Make routerset_contains_router() support IPv6

nickm at torproject.org nickm at torproject.org
Wed Jun 24 17:41:07 UTC 2020


commit 0a3e6d81bba31ca19ce412d943901f43f54c4894
Author: Neel Chauhan <neel at neelc.org>
Date:   Thu Jun 11 12:27:40 2020 -0700

    Make routerset_contains_router() support IPv6
---
 src/feature/nodelist/routerset.c | 37 ++++++++++++++++++++++++-------------
 1 file changed, 24 insertions(+), 13 deletions(-)

diff --git a/src/feature/nodelist/routerset.c b/src/feature/nodelist/routerset.c
index 2e06ecbf0..ebc08b7a5 100644
--- a/src/feature/nodelist/routerset.c
+++ b/src/feature/nodelist/routerset.c
@@ -223,11 +223,11 @@ routerset_len(const routerset_t *set)
  *
  * (If country is -1, then we take the country
  * from addr.) */
-STATIC int
-routerset_contains(const routerset_t *set, const tor_addr_t *addr,
-                   uint16_t orport,
-                   const char *nickname, const char *id_digest,
-                   country_t country)
+static int
+routerset_contains2(const routerset_t *set, const tor_addr_t *addr,
+                    uint16_t orport, const tor_addr_t *addr2,
+                    uint16_t orport2, const char *nickname,
+                    const char *id_digest, country_t country)
 {
   if (!set || !set->list)
     return 0;
@@ -238,6 +238,9 @@ routerset_contains(const routerset_t *set, const tor_addr_t *addr,
   if (addr && compare_tor_addr_to_addr_policy(addr, orport, set->policies)
       == ADDR_POLICY_REJECTED)
     return 3;
+  if (addr2 && compare_tor_addr_to_addr_policy(addr2, orport2, set->policies)
+      == ADDR_POLICY_REJECTED)
+    return 3;
   if (set->countries) {
     if (country < 0 && addr)
       country = geoip_get_country_by_addr(addr);
@@ -249,6 +252,17 @@ routerset_contains(const routerset_t *set, const tor_addr_t *addr,
   return 0;
 }
 
+/** Helper. Like routerset_contains2() but for a single IP/port combo.
+ */
+STATIC int
+routerset_contains(const routerset_t *set, const tor_addr_t *addr,
+                   uint16_t orport, const char *nickname,
+                   const char *id_digest, country_t country)
+{
+  return routerset_contains2(set, addr, orport, NULL, 0,
+                             nickname, id_digest, country);
+}
+
 /** If *<b>setp</b> includes at least one country code, or if
  * <b>only_some_cc_set</b> is 0, add the ?? and A1 country codes to
  * *<b>setp</b>, creating it as needed.  Return true iff *<b>setp</b> changed.
@@ -306,14 +320,11 @@ int
 routerset_contains_router(const routerset_t *set, const routerinfo_t *ri,
                           country_t country)
 {
-  tor_addr_t addr;
-  tor_addr_from_ipv4h(&addr, ri->addr);
-  return routerset_contains(set,
-                            &addr,
-                            ri->or_port,
-                            ri->nickname,
-                            ri->cache_info.identity_digest,
-                            country);
+  tor_addr_t addr_v4;
+  tor_addr_from_ipv4h(&addr_v4, ri->addr);
+  return routerset_contains2(set, &addr_v4, ri->or_port, &ri->ipv6_addr,
+                             ri->ipv6_orport, ri->nickname,
+                             ri->cache_info.identity_digest, country);
 }
 
 /** Return true iff <b>rs</b> is in <b>set</b>.  If country is <b>-1</b>, we





More information about the tor-commits mailing list