Przeglądaj źródła

When tor_lookup_hostname says 0.0.0.0, treat it as an error.

svn:r2003
Nick Mathewson 21 lat temu
rodzic
commit
0f3fcfd1db
2 zmienionych plików z 9 dodań i 3 usunięć
  1. 6 1
      src/or/dns.c
  2. 3 2
      src/or/routerlist.c

+ 6 - 1
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;

+ 3 - 2
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;