diff options
-rw-r--r-- | src/or/dns.c | 12 | ||||
-rw-r--r-- | src/or/router.c | 4 |
2 files changed, 13 insertions, 3 deletions
diff --git a/src/or/dns.c b/src/or/dns.c index fe77a76d7b..7f60c651f3 100644 --- a/src/or/dns.c +++ b/src/or/dns.c @@ -617,10 +617,16 @@ dns_resolve_impl(edge_connection_t *exitconn, int is_resolve, /* first check if exitconn->_base.address is an IP. If so, we already * know the answer. */ if (tor_addr_from_str(&addr, exitconn->_base.address) >= 0) { - tor_addr_assign(&exitconn->_base.addr, &addr); - exitconn->address_ttl = DEFAULT_DNS_TTL; - return 1; + if (tor_addr_family(&addr) == AF_INET) { + tor_addr_assign(&exitconn->_base.addr, &addr); + exitconn->address_ttl = DEFAULT_DNS_TTL; + return 1; + } else { + /* XXXX IPv6 */ + return -1; + } } + /* If we're a non-exit, don't even do DNS lookups. */ if (!(me = router_get_my_routerinfo()) || policy_is_reject_star(me->exit_policy)) { diff --git a/src/or/router.c b/src/or/router.c index ec36bdfe91..a3cb7c49e0 100644 --- a/src/or/router.c +++ b/src/or/router.c @@ -1140,6 +1140,10 @@ router_compare_to_my_exit_policy(edge_connection_t *conn) if (tor_addr_is_null(&conn->_base.addr)) return -1; + /* XXXX IPv6 */ + if (tor_addr_family(&conn->_base.addr) != AF_INET) + return -1; + return compare_tor_addr_to_addr_policy(&conn->_base.addr, conn->_base.port, desc_routerinfo->exit_policy) != ADDR_POLICY_ACCEPTED; } |