From: Nick Mathewson Date: Thu, 1 Nov 2012 02:04:25 +0000 (-0400) Subject: Better checking of exit policies for connections by hostname X-Git-Tag: tor-0.2.4.7-alpha~35^2~29 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6e27282dab8f4d4999830f0310ea3f8aa75c6b63;p=thirdparty%2Ftor.git Better checking of exit policies for connections by hostname --- diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c index e1c6938a93..c14e116706 100644 --- a/src/or/connection_edge.c +++ b/src/or/connection_edge.c @@ -2625,11 +2625,15 @@ connection_ap_can_use_exit(const entry_connection_t *conn, const node_t *exit) } if (conn->socks_request->command == SOCKS_COMMAND_CONNECT) { - struct in_addr in; tor_addr_t addr, *addrp = NULL; addr_policy_result_t r; - if (tor_inet_aton(conn->socks_request->address, &in)) { - tor_addr_from_in(&addr, &in); + if (0 == tor_addr_parse(&addr, conn->socks_request->address)) { + addrp = &addr; + } else if (!conn->ipv4_traffic_ok && conn->ipv6_traffic_ok) { + tor_addr_make_null(&addr, AF_INET6); + addrp = &addr; + } else if (conn->ipv4_traffic_ok && !conn->ipv6_traffic_ok) { + tor_addr_make_null(&addr, AF_INET); addrp = &addr; } r = compare_tor_addr_to_node_policy(addrp, conn->socks_request->port,exit);