]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Fix ipv4/ipv6 traffic bits on AF_UNIX socks listeners and remove hacky workarounds...
authorAndrea Shepard <andrea@torproject.org>
Tue, 13 Jan 2015 00:18:17 +0000 (00:18 +0000)
committerAndrea Shepard <andrea@torproject.org>
Tue, 13 Jan 2015 00:18:17 +0000 (00:18 +0000)
src/or/config.c
src/or/connection_edge.c
src/or/relay.c

index aea049871267d31f4bf6b4ef06b149d4e406353a..219200f7993f68c643f9bcb106acafa252d6d270 100644 (file)
@@ -6053,6 +6053,20 @@ parse_unix_socket_config(smartlist_t *out, smartlist_t *defaults,
       port->is_unix_addr = 1;
       memcpy(port->unix_addr, cfg->value, len+1);
       port->type = listener_type;
+      if (listener_type == CONN_TYPE_AP_LISTENER) {
+        /* Some more bits to twiddle for this case
+         *
+         * XXX this should support parsing the same options
+         * parse_port_config() does, and probably that code should be
+         * factored out into a function we can call from here.  For
+         * now, some reasonable defaults.
+         */
+
+        port->ipv4_traffic = 1;
+        port->ipv6_traffic = 1;
+        port->cache_ipv4_answers = 1;
+        port->cache_ipv6_answers = 1;
+      }
       smartlist_add(ports_to_add, port);
     } else {
       /* Keep track that we've seen a disable */
index 390ad07b8374cbe2120ac39568b7c4121095eabe..d8f397bd905b65a83bbc0044b0511899156818b3 100644 (file)
@@ -1233,8 +1233,7 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
       {
         tor_addr_t addr;
         /* XXX Duplicate call to tor_addr_parse. */
-        if (tor_addr_parse(&addr, socks->address) >= 0 &&
-            !conn->is_socks_socket) {
+        if (tor_addr_parse(&addr, socks->address) >= 0) {
           sa_family_t family = tor_addr_family(&addr);
           if ((family == AF_INET && ! conn->ipv4_traffic_ok) ||
               (family == AF_INET6 && ! conn->ipv4_traffic_ok)) {
@@ -1837,9 +1836,6 @@ connection_ap_get_begincell_flags(entry_connection_t *ap_conn)
   if (!ap_conn->ipv4_traffic_ok)
     flags |= BEGIN_FLAG_IPV4_NOT_OK;
 
-  if (ap_conn->is_socks_socket)
-    return 0;
-
   exitnode = node_get_by_id(cpath_layer->extend_info->identity_digest);
 
   if (ap_conn->ipv6_traffic_ok && exitnode) {
index b7ab8081e98f6e1ca1c349435456c5b9e7d4f8e3..ac36e72b3be13fc265fd215fd6d12a2b9bdbedbf 100644 (file)
@@ -1328,8 +1328,7 @@ connection_edge_process_relay_cell_not_open(
       }
 
       if (((family == AF_INET && ! entry_conn->ipv4_traffic_ok) ||
-          (family == AF_INET6 && ! entry_conn->ipv6_traffic_ok)) &&
-          (!entry_conn->is_socks_socket)) {
+          (family == AF_INET6 && ! entry_conn->ipv6_traffic_ok))) {
         log_fn(LOG_PROTOCOL_WARN, LD_APP,
                "Got a connected cell to %s with unsupported address family."
                " Closing.", fmt_addr(&addr));