diff options
-rw-r--r-- | src/or/dns.c | 7 | ||||
-rw-r--r-- | src/or/routerlist.c | 5 |
2 files changed, 9 insertions, 3 deletions
diff --git a/src/or/dns.c b/src/or/dns.c index 66e9334b1..851041d77 100644 --- a/src/or/dns.c +++ b/src/or/dns.c @@ -634,6 +634,7 @@ static int dnsworker_main(void *data) { uint32_t ip; int *fdarray = data; int fd; + int result; tor_close_socket(fdarray[0]); /* this is the side of the socketpair the parent uses */ fd = fdarray[1]; /* this side is ours */ @@ -655,7 +656,11 @@ static int dnsworker_main(void *data) { } address[address_len] = 0; /* null terminate it */ - switch (tor_lookup_hostname(address, &ip)) { + result = tor_lookup_hostname(address, &ip); + /* Make 0.0.0.0 an error, so that we can use "0" to mean "no addr") */ + if (!ip) + result = -1; + switch (result) { case 1: log_fn(LOG_INFO,"Could not resolve dest addr %s (transient).",address); answer[0] = DNS_RESOLVE_FAILED_TRANSIENT; diff --git a/src/or/routerlist.c b/src/or/routerlist.c index 1c9d83756..1d03a6d1b 100644 --- a/src/or/routerlist.c +++ b/src/or/routerlist.c @@ -237,7 +237,7 @@ int router_nickname_matches(routerinfo_t *router, const char *nickname) */ routerinfo_t *router_get_by_nickname(const char *nickname) { - int i, maybedigest, mustbedigest; + int i, maybedigest; routerinfo_t *router; char digest[DIGEST_LEN]; @@ -562,7 +562,8 @@ int router_load_routerlist_from_directory(const char *s, static int router_resolve(routerinfo_t *router) { - if (tor_lookup_hostname(router->address, &router->addr) != 0) { + if (tor_lookup_hostname(router->address, &router->addr) != 0 + || !router->addr) { log_fn(LOG_WARN,"Could not get address for router %s (%s).", router->address, router->nickname); return -1; |