mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-12-06 19:41:15 +01:00
Add options to turn DNS cache use on or off per client port.
(This is part 1 of making DNS cache use enabled/disabled on a per-client port basis. These options are shuffled around correctly, but don't do anything yet.)
This commit is contained in:
+28
-1
@@ -4790,6 +4790,7 @@ parse_port_config(smartlist_t *out,
|
||||
cfg->isolation_flags = ISO_DEFAULT;
|
||||
cfg->no_advertise = 1;
|
||||
cfg->ipv4_traffic = 1;
|
||||
cfg->cache_ipv4_answers = cfg->use_cached_ipv4_answers = 1;
|
||||
smartlist_add(out, cfg);
|
||||
}
|
||||
}
|
||||
@@ -4814,6 +4815,7 @@ parse_port_config(smartlist_t *out,
|
||||
cfg->session_group = SESSION_GROUP_UNSET;
|
||||
cfg->isolation_flags = ISO_DEFAULT;
|
||||
cfg->ipv4_traffic = 1;
|
||||
cfg->cache_ipv4_answers = cfg->use_cached_ipv4_answers = 1;
|
||||
smartlist_add(out, cfg);
|
||||
}
|
||||
return 0;
|
||||
@@ -4834,7 +4836,9 @@ parse_port_config(smartlist_t *out,
|
||||
int ok;
|
||||
int no_listen = 0, no_advertise = 0, all_addrs = 0,
|
||||
bind_ipv4_only = 0, bind_ipv6_only = 0,
|
||||
ipv4_traffic = 1, ipv6_traffic = 0, prefer_ipv6 = 0;
|
||||
ipv4_traffic = 1, ipv6_traffic = 0, prefer_ipv6 = 0,
|
||||
cache_ipv4 = 1, use_cached_ipv4 = 1,
|
||||
cache_ipv6 = 0, use_cached_ipv6 = 0;
|
||||
|
||||
smartlist_split_string(elts, ports->value, NULL,
|
||||
SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
|
||||
@@ -4971,6 +4975,25 @@ parse_port_config(smartlist_t *out,
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (!strcasecmp(elt, "CacheIPv4DNS")) {
|
||||
cache_ipv4 = ! no;
|
||||
continue;
|
||||
} else if (!strcasecmp(elt, "CacheIPv6DNS")) {
|
||||
cache_ipv6 = ! no;
|
||||
continue;
|
||||
} else if (!strcasecmp(elt, "CacheDNS")) {
|
||||
cache_ipv4 = cache_ipv6 = ! no;
|
||||
continue;
|
||||
} else if (!strcasecmp(elt, "UseIPv4Cache")) {
|
||||
use_cached_ipv4 = ! no;
|
||||
continue;
|
||||
} else if (!strcasecmp(elt, "UseIPv6Cache")) {
|
||||
use_cached_ipv6 = ! no;
|
||||
continue;
|
||||
} else if (!strcasecmp(elt, "UseDNSCache")) {
|
||||
use_cached_ipv4 = use_cached_ipv6 = ! no;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!strcasecmpend(elt, "s"))
|
||||
elt[strlen(elt)-1] = '\0'; /* kill plurals. */
|
||||
@@ -5024,6 +5047,10 @@ parse_port_config(smartlist_t *out,
|
||||
cfg->ipv4_traffic = ipv4_traffic;
|
||||
cfg->ipv6_traffic = ipv6_traffic;
|
||||
cfg->prefer_ipv6 = prefer_ipv6;
|
||||
cfg->cache_ipv4_answers = cache_ipv4;
|
||||
cfg->cache_ipv6_answers = cache_ipv6;
|
||||
cfg->use_cached_ipv4_answers = use_cached_ipv4;
|
||||
cfg->use_cached_ipv6_answers = use_cached_ipv6;
|
||||
|
||||
smartlist_add(out, cfg);
|
||||
}
|
||||
|
||||
@@ -1130,6 +1130,10 @@ connection_listener_new(const struct sockaddr *listensockaddr,
|
||||
lis_conn->socks_ipv4_traffic = 1;
|
||||
lis_conn->socks_ipv6_traffic = 1;
|
||||
}
|
||||
lis_conn->cache_ipv4_answers = port_cfg->cache_ipv4_answers;
|
||||
lis_conn->cache_ipv6_answers = port_cfg->cache_ipv6_answers;
|
||||
lis_conn->use_cached_ipv4_answers = port_cfg->use_cached_ipv4_answers;
|
||||
lis_conn->use_cached_ipv6_answers = port_cfg->use_cached_ipv6_answers;
|
||||
|
||||
if (connection_add(conn) < 0) { /* no space, forget it */
|
||||
log_warn(LD_NET,"connection_add for listener failed. Giving up.");
|
||||
@@ -1366,6 +1370,13 @@ connection_init_accepted_conn(connection_t *conn,
|
||||
TO_ENTRY_CONN(conn)->ipv4_traffic_ok = listener->socks_ipv4_traffic;
|
||||
TO_ENTRY_CONN(conn)->ipv6_traffic_ok = listener->socks_ipv6_traffic;
|
||||
TO_ENTRY_CONN(conn)->prefer_ipv6_traffic = listener->socks_prefer_ipv6;
|
||||
TO_ENTRY_CONN(conn)->cache_ipv4_answers = listener->cache_ipv4_answers;
|
||||
TO_ENTRY_CONN(conn)->cache_ipv6_answers = listener->cache_ipv6_answers;
|
||||
TO_ENTRY_CONN(conn)->use_cached_ipv4_answers =
|
||||
listener->use_cached_ipv4_answers;
|
||||
TO_ENTRY_CONN(conn)->use_cached_ipv6_answers =
|
||||
listener->use_cached_ipv6_answers;
|
||||
|
||||
switch (TO_CONN(listener)->type) {
|
||||
case CONN_TYPE_AP_LISTENER:
|
||||
conn->state = AP_CONN_STATE_SOCKS_WAIT;
|
||||
|
||||
+20
@@ -1237,6 +1237,12 @@ typedef struct listener_connection_t {
|
||||
* addresses? */
|
||||
unsigned int socks_prefer_ipv6 : 1;
|
||||
|
||||
/*DOCDOC*/
|
||||
unsigned int cache_ipv4_answers : 1;
|
||||
unsigned int cache_ipv6_answers : 1;
|
||||
unsigned int use_cached_ipv4_answers : 1;
|
||||
unsigned int use_cached_ipv6_answers : 1;
|
||||
|
||||
} listener_connection_t;
|
||||
|
||||
/** Minimum length of the random part of an AUTH_CHALLENGE cell. */
|
||||
@@ -1545,6 +1551,12 @@ typedef struct entry_connection_t {
|
||||
/** Should we say we prefer IPv6 traffic? */
|
||||
unsigned int prefer_ipv6_traffic : 1;
|
||||
|
||||
/* DOCDOC*/
|
||||
unsigned int cache_ipv4_answers : 1;
|
||||
unsigned int cache_ipv6_answers : 1;
|
||||
unsigned int use_cached_ipv4_answers : 1;
|
||||
unsigned int use_cached_ipv6_answers : 1;
|
||||
|
||||
} entry_connection_t;
|
||||
|
||||
/** Subtype of connection_t for an "directory connection" -- that is, an HTTP
|
||||
@@ -3084,10 +3096,18 @@ typedef struct port_cfg_t {
|
||||
unsigned int all_addrs : 1;
|
||||
unsigned int bind_ipv4_only : 1;
|
||||
unsigned int bind_ipv6_only : 1;
|
||||
|
||||
/* Client port types only: */
|
||||
unsigned int ipv4_traffic : 1;
|
||||
unsigned int ipv6_traffic : 1;
|
||||
unsigned int prefer_ipv6 : 1;
|
||||
|
||||
/* DOCDOC */
|
||||
unsigned int cache_ipv4_answers : 1;
|
||||
unsigned int cache_ipv6_answers : 1;
|
||||
unsigned int use_cached_ipv4_answers : 1;
|
||||
unsigned int use_cached_ipv6_answers : 1;
|
||||
|
||||
/* Unix sockets only: */
|
||||
/** Path for an AF_UNIX address */
|
||||
char unix_addr[FLEXIBLE_ARRAY_MEMBER];
|
||||
|
||||
Reference in New Issue
Block a user