From: Wouter Wijngaards Date: Fri, 23 Apr 2010 09:07:05 +0000 (+0000) Subject: - Fix to fetch data as last resort more tenaciously. When cycle X-Git-Tag: release-1.4.5rc1~50 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=35f3d4ecb1cf67ee747f9d8e5c948360091c7b6c;p=thirdparty%2Funbound.git - 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. git-svn-id: file:///svn/unbound/trunk@2089 be551aaa-1e26-0410-a405-d3ace91eadb9 --- diff --git a/doc/Changelog b/doc/Changelog index 1874a1235..030dc3237 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -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. diff --git a/iterator/iter_utils.c b/iterator/iter_utils.c index a706e6b64..9082055c0 100644 --- a/iterator/iter_utils.c +++ b/iterator/iter_utils.c @@ -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"); diff --git a/iterator/iterator.c b/iterator/iterator.c index e8345c804..c7cdbc876 100644 --- a/iterator/iterator.c +++ b/iterator/iterator.c @@ -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