mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-28 06:13:31 +01:00
Let tor-resolve generate PTR requests for IPv6 addresses
This commit is contained in:
parent
50af1087c4
commit
053f2cb7c8
@ -89,6 +89,7 @@ evdns_server_callback(struct evdns_server_request *req, void *data_)
|
||||
continue;
|
||||
switch (req->questions[i]->type) {
|
||||
case EVDNS_TYPE_A:
|
||||
case EVDNS_TYPE_AAAA:
|
||||
case EVDNS_TYPE_PTR:
|
||||
q = req->questions[i];
|
||||
default:
|
||||
|
@ -74,23 +74,29 @@ build_socks_resolve_request(char **out,
|
||||
memcpy((*out)+8+strlen(username)+1, hostname, strlen(hostname)+1);
|
||||
} else if (version == 5) {
|
||||
int is_ip_address;
|
||||
struct in_addr in;
|
||||
tor_addr_t addr;
|
||||
size_t addrlen;
|
||||
is_ip_address = tor_inet_aton(hostname, &in);
|
||||
int ipv6;
|
||||
is_ip_address = tor_addr_parse(&addr, hostname) != -1;
|
||||
if (!is_ip_address && reverse) {
|
||||
log_err(LD_GENERAL, "Tried to do a reverse lookup on a non-IP!");
|
||||
return -1;
|
||||
}
|
||||
addrlen = reverse ? 4 : 1 + strlen(hostname);
|
||||
ipv6 = reverse && tor_addr_family(&addr) == AF_INET6;
|
||||
addrlen = reverse ? (ipv6 ? 16 : 4) : 1 + strlen(hostname);
|
||||
len = 6 + addrlen;
|
||||
*out = tor_malloc(len);
|
||||
(*out)[0] = 5; /* SOCKS version 5 */
|
||||
(*out)[1] = reverse ? '\xF1' : '\xF0'; /* RESOLVE_PTR or RESOLVE */
|
||||
(*out)[2] = 0; /* reserved. */
|
||||
(*out)[3] = reverse ? 1 : 3;
|
||||
if (reverse) {
|
||||
set_uint32((*out)+4, in.s_addr);
|
||||
(*out)[3] = ipv6 ? 4 : 1;
|
||||
if (ipv6)
|
||||
memcpy((*out)+4, tor_addr_to_in6_addr8(&addr), 16);
|
||||
else
|
||||
set_uint32((*out)+4, tor_addr_to_ipv4n(&addr));
|
||||
} else {
|
||||
(*out)[3] = 3;
|
||||
(*out)[4] = (char)(uint8_t)(addrlen - 1);
|
||||
memcpy((*out)+5, hostname, addrlen - 1);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user