]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- Fix unable to resolve after new WLAN connection, due to auth-zone
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Tue, 3 Apr 2018 12:22:35 +0000 (12:22 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Tue, 3 Apr 2018 12:22:35 +0000 (12:22 +0000)
  failing with a forwarder set.  Now, auth-zone is only used for
  answers (not referrals) when a forwarder is set.

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

doc/Changelog
iterator/iterator.c

index 385d04b84b31b6dfe4b39186b2a6424c9b7651ad..25e8d308f95df2430d08b1a5b09964739f9f4559 100644 (file)
@@ -1,5 +1,8 @@
 3 April 2018: Wouter
        - Fix #4043: make test fails due to v6 presentation issue in macOS.
+       - Fix unable to resolve after new WLAN connection, due to auth-zone
+         failing with a forwarder set.  Now, auth-zone is only used for
+         answers (not referrals) when a forwarder is set.
 
 29 March 2018: Ralph
        - Check "result" in dup_all(), by Florian Obser.
index 57fa839bdab975fc88efb38a5030957d66b6cbb2..25713af1ef0c5bcfe969395a22a929b246a0ea0e 100644 (file)
@@ -2161,11 +2161,15 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq,
                        log_dns_msg("msg from auth zone",
                                &iq->response->qinfo, iq->response->rep);
                }
-               iq->num_current_queries++;
-               iq->chase_to_rd = 0;
-               iq->dnssec_lame_query = 0;
-               iq->auth_zone_response = 1;
-               return next_state(iq, QUERY_RESP_STATE);
+               if((iq->chase_flags&BIT_RD) && !(iq->response->rep->flags&BIT_AA)) {
+                       verbose(VERB_ALGO, "forwarder, ignoring referral from auth zone");
+               } else {
+                       iq->num_current_queries++;
+                       iq->chase_to_rd = 0;
+                       iq->dnssec_lame_query = 0;
+                       iq->auth_zone_response = 1;
+                       return next_state(iq, QUERY_RESP_STATE);
+               }
        }
        iq->auth_zone_response = 0;
        if(auth_fallback == 0) {
@@ -2443,7 +2447,8 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq,
                (int)((iq->chase_flags&BIT_RD) || iq->chase_to_rd),
                iq->response, &iq->qchase, iq->dp);
        iq->chase_to_rd = 0;
-       if(type == RESPONSE_TYPE_REFERRAL && (iq->chase_flags&BIT_RD)) {
+       if(type == RESPONSE_TYPE_REFERRAL && (iq->chase_flags&BIT_RD) &&
+               !iq->auth_zone_response) {
                /* When forwarding (RD bit is set), we handle referrals 
                 * differently. No queries should be sent elsewhere */
                type = RESPONSE_TYPE_ANSWER;