|
@@ -594,13 +594,13 @@ client_dns_clear_failures(const char *address)
|
|
|
* <b>ttl</b>seconds; otherwise, we use the default.
|
|
|
*/
|
|
|
static void
|
|
|
-client_dns_set_addressmap_impl(origin_circuit_t *on_circ,
|
|
|
+client_dns_set_addressmap_impl(entry_connection_t *for_conn,
|
|
|
const char *address, const char *name,
|
|
|
const char *exitname,
|
|
|
int ttl)
|
|
|
{
|
|
|
char *extendedaddress=NULL, *extendedval=NULL;
|
|
|
- (void)on_circ;
|
|
|
+ (void)for_conn;
|
|
|
|
|
|
tor_assert(address);
|
|
|
tor_assert(name);
|
|
@@ -640,7 +640,7 @@ client_dns_set_addressmap_impl(origin_circuit_t *on_circ,
|
|
|
* <b>ttl</b>seconds; otherwise, we use the default.
|
|
|
*/
|
|
|
void
|
|
|
-client_dns_set_addressmap(origin_circuit_t *on_circ,
|
|
|
+client_dns_set_addressmap(entry_connection_t *for_conn,
|
|
|
const char *address,
|
|
|
const tor_addr_t *val,
|
|
|
const char *exitname,
|
|
@@ -655,14 +655,18 @@ client_dns_set_addressmap(origin_circuit_t *on_circ,
|
|
|
if (tor_addr_parse(&addr_tmp, address) >= 0)
|
|
|
return; /* If address was an IP address already, don't add a mapping. */
|
|
|
|
|
|
- /* XXXXX For now, don't cache IPv6 addresses. */
|
|
|
- if (tor_addr_family(val) != AF_INET)
|
|
|
- return;
|
|
|
+ if (tor_addr_family(val) == AF_INET) {
|
|
|
+ if (! for_conn->cache_ipv4_answers)
|
|
|
+ return;
|
|
|
+ } else if (tor_addr_family(val) == AF_INET6) {
|
|
|
+ if (! for_conn->cache_ipv6_answers)
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
if (! tor_addr_to_str(valbuf, val, sizeof(valbuf), 1))
|
|
|
return;
|
|
|
|
|
|
- client_dns_set_addressmap_impl(on_circ, address, valbuf, exitname, ttl);
|
|
|
+ client_dns_set_addressmap_impl(for_conn, address, valbuf, exitname, ttl);
|
|
|
}
|
|
|
|
|
|
/** Add a cache entry noting that <b>address</b> (ordinarily a dotted quad)
|
|
@@ -675,14 +679,21 @@ client_dns_set_addressmap(origin_circuit_t *on_circ,
|
|
|
* <b>ttl</b>seconds; otherwise, we use the default.
|
|
|
*/
|
|
|
void
|
|
|
-client_dns_set_reverse_addressmap(origin_circuit_t *on_circ,
|
|
|
+client_dns_set_reverse_addressmap(entry_connection_t *for_conn,
|
|
|
const char *address, const char *v,
|
|
|
const char *exitname,
|
|
|
int ttl)
|
|
|
{
|
|
|
char *s = NULL;
|
|
|
+ {
|
|
|
+ tor_addr_t tmp_addr;
|
|
|
+ sa_family_t f = tor_addr_parse(&tmp_addr, address);
|
|
|
+ if ((f == AF_INET && ! for_conn->cache_ipv4_answers) ||
|
|
|
+ (f == AF_INET6 && ! for_conn->cache_ipv6_answers))
|
|
|
+ return;
|
|
|
+ }
|
|
|
tor_asprintf(&s, "REVERSE[%s]", address);
|
|
|
- client_dns_set_addressmap_impl(on_circ, s, v, exitname, ttl);
|
|
|
+ client_dns_set_addressmap_impl(for_conn, s, v, exitname, ttl);
|
|
|
tor_free(s);
|
|
|
}
|
|
|
|