[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] r17138: {tor} Fix the rest of bug 619: reject *:* servers should not do DN (in tor/trunk: . src/or)
Author: nickm
Date: 2008-10-21 12:51:59 -0400 (Tue, 21 Oct 2008)
New Revision: 17138
Modified:
tor/trunk/ChangeLog
tor/trunk/src/or/dns.c
Log:
Fix the rest of bug 619: reject *:* servers should not do DNS lookups, even if broken clients send them RELAY_BEGIN cells. Patch from rovv.
Modified: tor/trunk/ChangeLog
===================================================================
--- tor/trunk/ChangeLog 2008-10-21 16:41:20 UTC (rev 17137)
+++ tor/trunk/ChangeLog 2008-10-21 16:51:59 UTC (rev 17138)
@@ -31,6 +31,9 @@
- Send a valid END cell back when a client tries to connect to a
nonexistent hidden service port. Bugfix on 0.1.2.15. Fixes bug
840. Patch from rovv.
+ - If a broken client asks a non-exit router to connect somewhere,
+ do not even do the DNS lookup before rejecting the connection.
+ Fixes another case of bug 619. Patch from rovv.
Changes in version 0.2.1.6-alpha - 2008-09-30
Modified: tor/trunk/src/or/dns.c
===================================================================
--- tor/trunk/src/or/dns.c 2008-10-21 16:41:20 UTC (rev 17137)
+++ tor/trunk/src/or/dns.c 2008-10-21 16:51:59 UTC (rev 17138)
@@ -553,15 +553,10 @@
or_circuit_t *oncirc = TO_OR_CIRCUIT(exitconn->on_circuit);
int is_resolve, r;
char *hostname = NULL;
- routerinfo_t *me;
is_resolve = exitconn->_base.purpose == EXIT_PURPOSE_RESOLVE;
- if (is_resolve &&
- (!(me = router_get_my_routerinfo()) ||
- policy_is_reject_star(me->exit_policy))) /* non-exit */
- r = -1;
- else
- r = dns_resolve_impl(exitconn, is_resolve, oncirc, &hostname);
+ r = dns_resolve_impl(exitconn, is_resolve, oncirc, &hostname);
+
switch (r) {
case 1:
/* We got an answer without a lookup -- either the answer was
@@ -636,6 +631,7 @@
cached_resolve_t *resolve;
cached_resolve_t search;
pending_connection_t *pending_connection;
+ routerinfo_t *me;
struct in_addr in;
time_t now = time(NULL);
uint8_t is_reverse = 0;
@@ -652,6 +648,11 @@
exitconn->address_ttl = DEFAULT_DNS_TTL;
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)) {
+ return -1;
+ }
if (address_is_invalid_destination(exitconn->_base.address, 0)) {
log(LOG_PROTOCOL_WARN, LD_EXIT,
"Rejecting invalid destination address %s",