From: Wouter Wijngaards Date: Wed, 19 May 2010 12:59:27 +0000 (+0000) Subject: - Fix resolution for domains like safesvc.com.cn. If the iterator X-Git-Tag: release-1.4.5rc1~25 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4cc482e222c494e1f6a018e5b6ff4204af5b08c8;p=thirdparty%2Funbound.git - Fix resolution for domains like safesvc.com.cn. If the iterator can not recurse further and it finds the delegation in a state where it would otherwise have rejected it outhand if so received from a cache lookup, then it can try to ask higherup (with loop protection). - Fix comments in iter_utils:dp_is_useless. git-svn-id: file:///svn/unbound/trunk@2114 be551aaa-1e26-0410-a405-d3ace91eadb9 --- diff --git a/doc/Changelog b/doc/Changelog index 5616ab8ff..012ece3ba 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,11 @@ +19 May 2010: Wouter + - Fix resolution for domains like safesvc.com.cn. If the iterator + can not recurse further and it finds the delegation in a state + where it would otherwise have rejected it outhand if so received + from a cache lookup, then it can try to ask higherup (with loop + protection). + - Fix comments in iter_utils:dp_is_useless. + 18 May 2010: Wouter - Fix various compiler warnings from the clang llvm compiler. - iana portlist updated. diff --git a/iterator/iter_utils.c b/iterator/iter_utils.c index 3a75d0349..ee3e7e771 100644 --- a/iterator/iter_utils.c +++ b/iterator/iter_utils.c @@ -522,11 +522,11 @@ iter_dp_is_useless(struct query_info* qinfo, uint16_t qflags, { struct delegpt_ns* ns; /* check: - * o RD qflag is off. + * o RD qflag is on. * o no addresses are provided. * o all NS items are required glue. * OR - * o RD qflag is off. + * o RD qflag is on. * o no addresses are provided. * o the query is for one of the nameservers in dp, * and that nameserver is a glue-name for this dp. diff --git a/testdata/iter_dp_turnsuseless.rpl b/testdata/iter_dp_turnsuseless.rpl new file mode 100644 index 000000000..9d0c35518 --- /dev/null +++ b/testdata/iter_dp_turnsuseless.rpl @@ -0,0 +1,166 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test parent-child dichotomy where dp turns useless + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END + +; data for ns-crap does not exist. +ENTRY_BEGIN +MATCH opcode qname +ADJUST copy_id copy_query +REPLY QR NXDOMAIN +SECTION QUESTION +ns-crap. IN NS +SECTION AUTHORITY +; very short TTL so it'll expire. +. 2 SOA . . 1 2 3 4 5 +SECTION ADDITIONAL +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION ANSWER +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +; very short TTL so it can time out quickly. +example.com. 2 IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.4 +ENTRY_END +RANGE_END + +; ns.example.com. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.4 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns-crap. +SECTION ADDITIONAL +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. 2 IN A 10.20.30.40 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +example.com. IN NS +ENTRY_END + +STEP 10 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +example.com. IN NS +SECTION ANSWER +example.com. IN NS ns-crap. +SECTION AUTHORITY +SECTION ADDITIONAL +ENTRY_END + +STEP 20 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +STEP 30 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. 2 IN A 10.20.30.40 +ENTRY_END + +; parent side stuff times out +STEP 40 TIME_PASSES ELAPSE 5.0 + +; actual retry logic must fire +STEP 50 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +STEP 60 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. 2 IN A 10.20.30.40 +ENTRY_END + + + +SCENARIO_END diff --git a/testdata/nomem_cnametopos.rpl b/testdata/nomem_cnametopos.rpl index 93b6a3952..df3a4bf41 100644 --- a/testdata/nomem_cnametopos.rpl +++ b/testdata/nomem_cnametopos.rpl @@ -6,6 +6,7 @@ server: val-override-date: "20070916134226" msg-cache-size: 8 rrset-cache-size: 8 + target-fetch-policy: "0 0 0 0 0" stub-zone: name: "."