diff options
author | Nick Mathewson <nickm@torproject.org> | 2006-08-14 21:44:34 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2006-08-14 21:44:34 +0000 |
commit | 200e24981a997bd529febc3f447db9e383305086 (patch) | |
tree | d895f24a5949e17a88b4bda90a1c859605da61dc | |
parent | 65b58e13f58af0d3d544b1c18247f3fbbf0aad5c (diff) | |
download | tor-200e24981a997bd529febc3f447db9e383305086.tar.gz tor-200e24981a997bd529febc3f447db9e383305086.zip |
r7046@Kushana: nickm | 2006-08-05 13:57:04 -0400
Make it possible for dns_init() to fail; note failure of eventdns configuratoin.
svn:r7059
-rw-r--r-- | src/or/dns.c | 39 | ||||
-rw-r--r-- | src/or/or.h | 2 |
2 files changed, 32 insertions, 9 deletions
diff --git a/src/or/dns.c b/src/or/dns.c index e868b1207a..6195e3bea6 100644 --- a/src/or/dns.c +++ b/src/or/dns.c @@ -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; diff --git a/src/or/or.h b/src/or/or.h index 94f2a6b2cf..4175b24e62 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -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); |