[tor-commits] [tor/master] Refactor fascist_firewall_allows_address without changing behaviour

nickm at torproject.org nickm at torproject.org
Tue Feb 23 12:38:37 UTC 2016


commit a4eddfff666226014545efd6f5bf390173c0fdfa
Author: teor (Tim Wilson-Brown) <teor2345 at gmail.com>
Date:   Sat Feb 20 19:32:33 2016 +1100

    Refactor fascist_firewall_allows_address without changing behaviour
---
 src/or/policies.c | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/src/or/policies.c b/src/or/policies.c
index 2c24555..e8f4a82 100644
--- a/src/or/policies.c
+++ b/src/or/policies.c
@@ -399,20 +399,26 @@ fascist_firewall_allows_address(const tor_addr_t *addr,
                                 int pref_only, int pref_ipv6)
 {
   const or_options_t *options = get_options();
+  const int client_mode = !server_mode(options);
 
   if (!addr || tor_addr_is_null(addr) || !port) {
     return 0;
   }
 
-  if (!server_mode(options)) {
-    if (tor_addr_family(addr) == AF_INET &&
-        (!options->ClientUseIPv4 || (pref_only && pref_ipv6)))
-      return 0;
+  /* Clients stop using IPv4 if it's disabled. In most cases, clients also
+   * stop using IPv4 if it's not preferred.
+   * Servers must have IPv4 enabled and preferred. */
+  if (tor_addr_family(addr) == AF_INET && client_mode &&
+      (!options->ClientUseIPv4 || (pref_only && pref_ipv6))) {
+    return 0;
   }
 
+  /* Clients and Servers won't use IPv6 unless it's enabled (and in most
+   * cases, IPv6 must also be preferred before it will be used). */
   if (tor_addr_family(addr) == AF_INET6 &&
-      (!fascist_firewall_use_ipv6(options) || (pref_only && !pref_ipv6)))
+      (!fascist_firewall_use_ipv6(options) || (pref_only && !pref_ipv6))) {
     return 0;
+  }
 
   return addr_policy_permits_tor_addr(addr, port,
                                       firewall_policy);





More information about the tor-commits mailing list