mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-11 05:33:47 +01:00
check if we have a cached resolve for a tor-resolve address *after*
we remove the .foo.exit part of the address. svn:r3082
This commit is contained in:
parent
5ba3328172
commit
1c9c813866
@ -363,25 +363,6 @@ static int connection_ap_handshake_process_socks(connection_t *conn) {
|
||||
return sockshere;
|
||||
} /* else socks handshake is done, continue processing */
|
||||
|
||||
if (socks->command == SOCKS_COMMAND_RESOLVE) {
|
||||
uint32_t answer;
|
||||
/* Reply to resolves immediately if we can. */
|
||||
if (strlen(socks->address) > RELAY_PAYLOAD_SIZE) {
|
||||
log_fn(LOG_WARN,"Address to be resolved is too large. Failing.");
|
||||
connection_ap_handshake_socks_resolved(conn,RESOLVED_TYPE_ERROR,0,NULL);
|
||||
return -1;
|
||||
}
|
||||
answer = htonl(client_dns_lookup_entry(socks->address));
|
||||
if (answer) {
|
||||
connection_ap_handshake_socks_resolved(conn,RESOLVED_TYPE_IPV4,4,
|
||||
(char*)&answer);
|
||||
conn->has_sent_end = 1;
|
||||
connection_mark_for_close(conn);
|
||||
conn->hold_open_until_flushed = 1;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* Parse the address provided by SOCKS. Modify it in-place if it
|
||||
* specifies a hidden-service (.onion) or particular exit node (.exit).
|
||||
*/
|
||||
@ -400,6 +381,26 @@ static int connection_ap_handshake_process_socks(connection_t *conn) {
|
||||
|
||||
if (addresstype != ONION_HOSTNAME) {
|
||||
/* not a hidden-service request (i.e. normal or .exit) */
|
||||
|
||||
if (socks->command == SOCKS_COMMAND_RESOLVE) {
|
||||
uint32_t answer;
|
||||
/* Reply to resolves immediately if we can. */
|
||||
if (strlen(socks->address) > RELAY_PAYLOAD_SIZE) {
|
||||
log_fn(LOG_WARN,"Address to be resolved is too large. Failing.");
|
||||
connection_ap_handshake_socks_resolved(conn,RESOLVED_TYPE_ERROR,0,NULL);
|
||||
return -1;
|
||||
}
|
||||
answer = htonl(client_dns_lookup_entry(socks->address));
|
||||
if (answer) {
|
||||
connection_ap_handshake_socks_resolved(conn,RESOLVED_TYPE_IPV4,4,
|
||||
(char*)&answer);
|
||||
conn->has_sent_end = 1;
|
||||
connection_mark_for_close(conn);
|
||||
conn->hold_open_until_flushed = 1;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (socks->command == SOCKS_COMMAND_CONNECT && socks->port == 0) {
|
||||
log_fn(LOG_WARN,"Application asked to connect to port 0. Refusing.");
|
||||
return -1;
|
||||
|
Loading…
Reference in New Issue
Block a user