]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
r7046@Kushana: nickm | 2006-08-05 13:57:04 -0400
authorNick Mathewson <nickm@torproject.org>
Mon, 14 Aug 2006 21:44:34 +0000 (21:44 +0000)
committerNick Mathewson <nickm@torproject.org>
Mon, 14 Aug 2006 21:44:34 +0000 (21:44 +0000)
 Make it possible for dns_init() to fail; note failure of eventdns configuratoin.

svn:r7059

src/or/dns.c
src/or/or.h

index e868b1207a9c76d3af31589baa7168968da06d10..6195e3bea600bcd5bb976dfdf3dbdfa3a4930f0b 100644 (file)
@@ -105,7 +105,7 @@ static int dnsworker_main(void *data);
 static int spawn_dnsworker(void);
 static int spawn_enough_dnsworkers(void);
 #else
-static void configure_nameservers(void);
+static int configure_nameservers(void);
 #endif
 static void _assert_cache_ok(void);
 #ifdef DEBUG_DNS_CACHE
@@ -160,14 +160,16 @@ eventdns_log_cb(const char *msg)
 #endif
 
 /** Initialize the DNS subsystem; called by the OR process. */
-void
+int
 dns_init(void)
 {
   init_cache_map();
   dnsworkers_rotate();
 #ifdef USE_EVENTDNS
   if (server_mode(get_options()))
-    configure_nameservers();
+    return configure_nameservers();
+  return 0;
+#endif
 #endif
 }
 
@@ -1180,7 +1182,7 @@ connection_dns_reached_eof(connection_t *conn)
   return 0;
 }
 static int nameservers_configured = 0;
-static void
+static int
 configure_nameservers(void)
 {
   or_options_t *options;
@@ -1195,16 +1197,37 @@ configure_nameservers(void)
         struct in_addr in;
         if (tor_inet_aton(ip, &in)) {
           log_info(LD_EXIT, "Adding nameserver '%s'", ip);
-          eventdns_nameserver_add(in.s_addr);
+          if (eventdns_nameserver_add(in.s_addr))
+            log_warn(LD_EXIT, "Unable to add nameserver '%s'", ip);
         }
       });
+    if (eventdns_count_nameservers() == 0) {
+      log_err(LD_EXIT, "Unable to add any configured nameserver.  "
+              "Either remove the Nameservers line from your configuration, or "
+              "put in a namerserver that we can parse.");
+      return -1;
+    }
   } else {
 #ifdef MS_WINDOWS
-    eventdns_config_windows_nameservers();
+    if (eventdns_config_windows_nameservers())
+      return -1;
+    if (eventdns_count_nameservers() == 0) {
+      log_err(LD_EXIT, "Unable to find any platform nameservers in "
+              "your Windows configuration.  Perhaps you should add a "
+              "Nameservers line to your torrc?");
+      return -1;
+    }
 #else
     log_info(LD_EXIT, "Parsing /etc/resolv.conf");
-    eventdns_resolv_conf_parse(DNS_OPTION_NAMESERVERS|DNS_OPTION_MISC,
-                               "/etc/resolv.conf");
+    if (eventdns_resolv_conf_parse(DNS_OPTION_NAMESERVERS|DNS_OPTION_MISC,
+                                   "/etc/resolv.conf"))
+      return -1;
+    if (eventdns_count_nameservers() == 0) {
+      log_err(LD_EXIT, "Unable to find any platform nameservers in "
+              "/etc/resolv.conf.  Perhaps you should add a Nameservers line "
+              "to your torrc?");
+      return -1;
+    }
 #endif
   }
   nameservers_configured = 1;
index 94f2a6b2cf6b53932bc53a672c5746b76a734de0..4175b24e62663eebd41481ab6b1fb87a868f8237 100644 (file)
@@ -2123,7 +2123,7 @@ void cached_dir_decref(cached_dir_t *d);
 
 /********************************* dns.c ***************************/
 
-void dns_init(void);
+int dns_init(void);
 void dns_free_all(void);
 uint32_t dns_clip_ttl(uint32_t ttl);
 int connection_dns_finished_flushing(connection_t *conn);