Browse Source

r11931@Kushana: nickm | 2007-01-11 09:12:49 -0500
Fix a crash bug in the presence of DNS hijacking.


svn:r9333

Nick Mathewson 18 years ago
parent
commit
3dfeaaaf6e
2 changed files with 11 additions and 6 deletions
  1. 4 0
      ChangeLog
  2. 7 6
      src/or/dns.c

+ 4 - 0
ChangeLog

@@ -1,4 +1,8 @@
 Changes in version 0.1.2.7-alpha - 2007-??-??
 Changes in version 0.1.2.7-alpha - 2007-??-??
+ o Major bugfixes:
+    - Fix a crash bug in the presence of DNS hijacking  (reported by Andrew
+      Del Vecchio).
+
  o Minor bugfixes:
  o Minor bugfixes:
     - When computing clock skew from directory HTTP headers, consider what
     - When computing clock skew from directory HTTP headers, consider what
       time it was when we finished asking for the directory, not what time it
       time it was when we finished asking for the directory, not what time it

+ 7 - 6
src/or/dns.c

@@ -1625,12 +1625,10 @@ evdns_callback(int result, char type, int count, int ttl, void *addresses,
       status = DNS_RESOLVE_FAILED_TRANSIENT;
       status = DNS_RESOLVE_FAILED_TRANSIENT;
   }
   }
   if (was_wildcarded) {
   if (was_wildcarded) {
-    int is_test_addr = is_test_address(hostname);
+    if (is_test_address(string_address)) {
-
-    if (is_test_addr) {
       /* Ick.  We're getting redirected on known-good addresses.  Our DNS
       /* Ick.  We're getting redirected on known-good addresses.  Our DNS
        * server must really hate us.  */
        * server must really hate us.  */
-      add_wildcarded_test_address(hostname);
+      add_wildcarded_test_address(string_address);
     }
     }
   }
   }
   if (result != DNS_ERR_SHUTDOWN)
   if (result != DNS_ERR_SHUTDOWN)
@@ -1744,16 +1742,19 @@ wildcard_increment_answer(const char *id)
 static void
 static void
 add_wildcarded_test_address(const char *address)
 add_wildcarded_test_address(const char *address)
 {
 {
-  int n;
+  int n, n_test_addrs;
   if (!dns_wildcarded_test_address_list)
   if (!dns_wildcarded_test_address_list)
     dns_wildcarded_test_address_list = smartlist_create();
     dns_wildcarded_test_address_list = smartlist_create();
 
 
   if (smartlist_string_isin_case(dns_wildcarded_test_address_list, address))
   if (smartlist_string_isin_case(dns_wildcarded_test_address_list, address))
     return;
     return;
 
 
+  n_test_addrs = get_options()->ServerDNSTestAddresses ?
+    smartlist_len(get_options()->ServerDNSTestAddresses) : 0;
+
   smartlist_add(dns_wildcarded_test_address_list, tor_strdup(address));
   smartlist_add(dns_wildcarded_test_address_list, tor_strdup(address));
   n = smartlist_len(dns_wildcarded_test_address_list);
   n = smartlist_len(dns_wildcarded_test_address_list);
-  if (n > smartlist_len(get_options()->ServerDNSTestAddresses)/2) {
+  if (n > n_test_addrs/2) {
     log(dns_wildcarded_test_address_notice_given ? LOG_INFO : LOG_NOTICE,
     log(dns_wildcarded_test_address_notice_given ? LOG_INFO : LOG_NOTICE,
         LD_EXIT, "Your DNS provider tried to redirect \"%s\" to a junk "
         LD_EXIT, "Your DNS provider tried to redirect \"%s\" to a junk "
         "address.  It has done this with %d test addresses so far.  I'm "
         "address.  It has done this with %d test addresses so far.  I'm "