Browse Source

Remove compare_addr_to_node_policy

Instead, use compare_tor_addr_to_node_policy everywhere.

One advantage of this is that compare_tor_addr_to_node_policy can
better distinguish 0.0.0.0 from "unknown", which caused a nasty bug
with microdesc users.
Nick Mathewson 13 years ago
parent
commit
6aef89bda4
7 changed files with 18 additions and 27 deletions
  1. 1 1
      src/or/circuitbuild.c
  2. 7 5
      src/or/circuituse.c
  3. 6 4
      src/or/connection_edge.c
  4. 1 12
      src/or/policies.c
  5. 0 2
      src/or/policies.h
  6. 2 2
      src/or/routerlist.c
  7. 1 1
      src/or/routerlist.h

+ 1 - 1
src/or/circuitbuild.c

@@ -2634,7 +2634,7 @@ node_handles_some_port(const node_t *node, smartlist_t *needed_ports)
     port = *(uint16_t *)smartlist_get(needed_ports, i);
     tor_assert(port);
     if (node)
-      r = compare_addr_to_node_policy(0, port, node);
+      r = compare_tor_addr_to_node_policy(NULL, port, node);
     else
       continue;
     if (r != ADDR_POLICY_REJECTED && r != ADDR_POLICY_PROBABLY_REJECTED)

+ 7 - 5
src/or/circuituse.c

@@ -509,7 +509,7 @@ circuit_stream_is_being_handled(edge_connection_t *conn,
           ok = connection_ap_can_use_exit(conn, exitnode);
         } else {
           addr_policy_result_t r;
-          r = compare_addr_to_node_policy(0, port, exitnode);
+          r = compare_tor_addr_to_node_policy(NULL, port, exitnode);
           ok = r != ADDR_POLICY_REJECTED && r != ADDR_POLICY_PROBABLY_REJECTED;
         }
         if (ok) {
@@ -1262,10 +1262,12 @@ circuit_get_open_circ_or_launch(edge_connection_t *conn,
   if (check_exit_policy) {
     if (!conn->chosen_exit_name) {
       struct in_addr in;
-      uint32_t addr = 0;
-      if (tor_inet_aton(conn->socks_request->address, &in))
-        addr = ntohl(in.s_addr);
-      if (router_exit_policy_all_nodes_reject(addr,
+      tor_addr_t addr, *addrp=NULL;
+      if (tor_inet_aton(conn->socks_request->address, &in)) {
+        tor_addr_from_in(&addr, &in);
+        addrp = &addr;
+      }
+      if (router_exit_policy_all_nodes_reject(addrp,
                                               conn->socks_request->port,
                                               need_uptime)) {
         log_notice(LD_APP,

+ 6 - 4
src/or/connection_edge.c

@@ -3193,11 +3193,13 @@ connection_ap_can_use_exit(edge_connection_t *conn, const node_t *exit)
   if (conn->socks_request->command == SOCKS_COMMAND_CONNECT &&
       !conn->use_begindir) {
     struct in_addr in;
-    uint32_t addr = 0;
+    tor_addr_t addr, *addrp = NULL;
     addr_policy_result_t r;
-    if (tor_inet_aton(conn->socks_request->address, &in))
-      addr = ntohl(in.s_addr);
-    r = compare_addr_to_node_policy(addr, conn->socks_request->port, exit);
+    if (tor_inet_aton(conn->socks_request->address, &in)) {
+      tor_addr_from_in(&addr, &in);
+      addrp = &addr;
+    }
+    r = compare_tor_addr_to_node_policy(addrp, conn->socks_request->port, exit);
     if (r == ADDR_POLICY_REJECTED)
       return 0; /* We know the address, and the exit policy rejects it. */
     if (r == ADDR_POLICY_PROBABLY_REJECTED && !conn->chosen_exit_name)

+ 1 - 12
src/or/policies.c

@@ -689,7 +689,7 @@ compare_tor_addr_to_addr_policy(const tor_addr_t *addr, uint16_t port,
   if (!policy) {
     /* no policy? accept all. */
     return ADDR_POLICY_ACCEPTED;
-  } else if (tor_addr_is_null(addr)) {
+  } else if (addr == NULL || tor_addr_is_null(addr)) {
     tor_assert(port != 0);
     return compare_unknown_tor_addr_to_addr_policy(port, policy);
   } else if (port == 0) {
@@ -1457,17 +1457,6 @@ short_policy_is_reject_star(const short_policy_t *policy)
           policy->entries[0].max_port == 65535);
 }
 
-/** Decides whether addr:port is probably or definitely accepted or rejcted by
- * <b>node</b>.  See compare_tor_addr_to_addr_policy for details on addr/port
- * interpretation. */
-addr_policy_result_t
-compare_addr_to_node_policy(uint32_t addr, uint16_t port, const node_t *node)
-{
-  tor_addr_t a;
-  tor_addr_from_ipv4h(&a, addr);
-  return compare_tor_addr_to_node_policy(&a, port, node);
-}
-
 /** Decides whether addr:port is probably or definitely accepted or rejcted by
  * <b>node</b>.  See compare_tor_addr_to_addr_policy for details on addr/port
  * interpretation. */

+ 0 - 2
src/or/policies.h

@@ -38,8 +38,6 @@ int cmp_addr_policies(smartlist_t *a, smartlist_t *b);
 addr_policy_result_t compare_tor_addr_to_addr_policy(const tor_addr_t *addr,
                               uint16_t port, const smartlist_t *policy);
 
-addr_policy_result_t compare_addr_to_node_policy(uint32_t addr,
-                              uint16_t port, const node_t *node);
 addr_policy_result_t compare_tor_addr_to_node_policy(const tor_addr_t *addr,
                               uint16_t port, const node_t *node);
 

+ 2 - 2
src/or/routerlist.c

@@ -4028,7 +4028,7 @@ routerlist_retry_directory_downloads(time_t now)
 /** Return 1 if all running sufficiently-stable routers we can use will reject
  * addr:port, return 0 if any might accept it. */
 int
-router_exit_policy_all_nodes_reject(uint32_t addr, uint16_t port,
+router_exit_policy_all_nodes_reject(const tor_addr_t *addr, uint16_t port,
                                     int need_uptime)
 { /* XXXX MOVE */
   addr_policy_result_t r;
@@ -4037,7 +4037,7 @@ router_exit_policy_all_nodes_reject(uint32_t addr, uint16_t port,
     if (node->is_running &&
         !node_is_unreliable(node, need_uptime, 0, 0)) {
 
-      r = compare_addr_to_node_policy(addr, port, node);
+      r = compare_tor_addr_to_node_policy(addr, port, node);
 
       if (r != ADDR_POLICY_REJECTED && r != ADDR_POLICY_PROBABLY_REJECTED)
         return 0; /* this one could be ok. good enough. */

+ 1 - 1
src/or/routerlist.h

@@ -129,7 +129,7 @@ void router_load_extrainfo_from_string(const char *s, const char *eos,
                                        int descriptor_digests);
 
 void routerlist_retry_directory_downloads(time_t now);
-int router_exit_policy_all_nodes_reject(uint32_t addr, uint16_t port,
+int router_exit_policy_all_nodes_reject(const tor_addr_t *addr, uint16_t port,
                                         int need_uptime);
 
 int router_exit_policy_rejects_all(const routerinfo_t *router);