|
@@ -553,15 +553,10 @@ dns_resolve(edge_connection_t *exitconn)
|
|
|
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 @@ dns_resolve_impl(edge_connection_t *exitconn, int is_resolve,
|
|
|
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 @@ dns_resolve_impl(edge_connection_t *exitconn, int is_resolve,
|
|
|
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",
|