diff --git a/src/or/dns.c b/src/or/dns.c index de30fe09e0..5ae666effc 100644 --- a/src/or/dns.c +++ b/src/or/dns.c @@ -81,7 +81,7 @@ static SPLAY_HEAD(cache_tree, cached_resolve) cache_root; static int compare_cached_resolves(struct cached_resolve *a, struct cached_resolve *b) { /* make this smarter one day? */ - return strncasecmp(a->address, b->address, MAX_ADDRESSLEN); + return strncmp(a->address, b->address, MAX_ADDRESSLEN); } SPLAY_PROTOTYPE(cache_tree, cached_resolve, node, compare_cached_resolves); @@ -246,6 +246,9 @@ int dns_resolve(connection_t *exitconn) { * resolves in the tree. */ purge_expired_resolves(now); + /* lower-case exitconn->address, so it's in canonical form */ + tor_strlower(exitconn->address); + /* now check the tree to see if 'address' is already there. */ strlcpy(search.address, exitconn->address, sizeof(search.address)); resolve = SPLAY_FIND(cache_tree, &cache_root, &search);