]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- Fix to fetch data as last resort more tenaciously. When cycle
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Fri, 23 Apr 2010 09:07:05 +0000 (09:07 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Fri, 23 Apr 2010 09:07:05 +0000 (09:07 +0000)
  targets cause the server selection to believe there are more options
  when they really are not there, the server selection is reinitiated.
- Fix fetch from blacklisted dnssec lame servers as last resort.  The
  servers IP address is then given in validator errors as well.

git-svn-id: file:///svn/unbound/trunk@2089 be551aaa-1e26-0410-a405-d3ace91eadb9

doc/Changelog
iterator/iter_utils.c
iterator/iterator.c

index 1874a12353d6322fcbb34da10ae1cf37cb62e3b6..030dc3237fcb6341a062704b90be8f2892045042 100644 (file)
@@ -1,6 +1,11 @@
 23 April 2010: Wouter
        - Squelch log message: sendto failed permission denied for
          255.255.255.255, it is visible in VERB_DETAIL (verbosity 2).
+       - Fix to fetch data as last resort more tenaciously.  When cycle
+         targets cause the server selection to believe there are more options
+         when they really are not there, the server selection is reinitiated.
+       - Fix fetch from blacklisted dnssec lame servers as last resort.  The
+         servers IP address is then given in validator errors as well.
 
 22 April 2010: Wouter
        - tag 1.4.4.
index a706e6b6489d1c3fb65aabc5f06a72d38e4db0c9..9082055c0c62a3b7b6d07e5f311be36fd9a68467 100644 (file)
@@ -322,9 +322,15 @@ iter_server_selection(struct iter_env* iter_env,
        verbose(VERB_ALGO, "selrtt %d", selrtt);
        if(selrtt > BLACKLIST_PENALTY) {
                if(selrtt-BLACKLIST_PENALTY > USEFUL_SERVER_TOP_TIMEOUT*2) {
-                       verbose(VERB_ALGO, "chase to recursion lame server");
+                       verbose(VERB_ALGO, "chase to "
+                               "blacklisted recursion lame server");
                        *chase_to_rd = 1;
                }
+               if(selrtt-BLACKLIST_PENALTY > USEFUL_SERVER_TOP_TIMEOUT) {
+                       verbose(VERB_ALGO, "chase to "
+                               "blacklisted dnssec lame server");
+                       *dnssec_expected = 0;
+               }
        } else {
                if(selrtt > USEFUL_SERVER_TOP_TIMEOUT*2) {
                        verbose(VERB_ALGO, "chase to recursion lame server");
index e8345c8045e1d9876f1ca1b3303c5865cc5d2eaf..c7cdbc8763f05389821a80d03ac1e47898bd3afa 100644 (file)
@@ -1469,6 +1469,15 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq,
                                        return error_response(qstate, id,
                                                LDNS_RCODE_SERVFAIL);
                                }
+                               if(qs == 0 && 
+                                  delegpt_count_missing_targets(iq->dp) == 0){
+                                       /* it looked like there were missing
+                                        * targets, but they did not turn up.
+                                        * Try the bad choices again (if any),
+                                        * when we get back here missing==0,
+                                        * so this is not a loop. */
+                                       return 1;
+                               }
                                iq->num_target_queries += qs;
                        }
                        /* Since a target query might have been made, we