From cb047f40786bf87f7fb17a500ca35eca9ba34f7c Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Tue, 13 Jan 2015 00:18:17 +0000 Subject: [PATCH] Fix ipv4/ipv6 traffic bits on AF_UNIX socks listeners and remove hacky workarounds for brokenness --- src/or/config.c | 14 ++++++++++++++ src/or/connection_edge.c | 6 +----- src/or/relay.c | 3 +-- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/or/config.c b/src/or/config.c index aea0498712..219200f799 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -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 */ diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c index 390ad07b83..d8f397bd90 100644 --- a/src/or/connection_edge.c +++ b/src/or/connection_edge.c @@ -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) { diff --git a/src/or/relay.c b/src/or/relay.c index b7ab8081e9..ac36e72b3b 100644 --- a/src/or/relay.c +++ b/src/or/relay.c @@ -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));