Commit cb047f40 authored by Andrea Shepard's avatar Andrea Shepard
Browse files

Fix ipv4/ipv6 traffic bits on AF_UNIX socks listeners and remove hacky workarounds for brokenness

parent f50068b1
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -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 */
+1 −5
Original line number Diff line number Diff line
@@ -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) {
+1 −2
Original line number Diff line number Diff line
@@ -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));