]> granicus.if.org Git - pdns/commitdiff
rec: Fix cache-only queries against a forward-zone
authorRemi Gacogne <remi.gacogne@powerdns.com>
Mon, 3 Apr 2017 08:53:41 +0000 (10:53 +0200)
committerPieter Lexis <pieter.lexis@powerdns.com>
Tue, 9 May 2017 10:12:02 +0000 (12:12 +0200)
We used to pass the return code from `asyncresolve` directly to the
caller, leading the success code (1) to be interpreted as `RCode::FormErr`.

(cherry picked from commit 6148fa9731f6e4cef35243c8f35399d2b1e89215)

pdns/syncres.cc

index 11f35b0ff287f4ad6e06de7d3e9cbdc1d7b71b1b..6f16f340653570d29154b4d46339240a71bd52ba 100644 (file)
@@ -439,15 +439,19 @@ int SyncRes::doResolve(const DNSName &qname, const QType &qtype, vector<DNSRecor
           const ComboAddress remoteIP = servers.front();
           LOG(prefix<<qname<<": forwarding query to hardcoded nameserver '"<< remoteIP.toStringWithPort()<<"' for zone '"<<authname<<"'"<<endl);
 
-         boost::optional<Netmask> nm;
+          boost::optional<Netmask> nm;
           res=asyncresolveWrapper(remoteIP, d_doDNSSEC, qname, qtype.getCode(), false, false, &d_now, nm, &lwr);
           // filter out the good stuff from lwr.result()
-
-         for(const auto& rec : lwr.d_records) {
-            if(rec.d_place == DNSResourceRecord::ANSWER)
-              ret.push_back(rec);
+          if (res == 1) {
+            for(const auto& rec : lwr.d_records) {
+              if(rec.d_place == DNSResourceRecord::ANSWER)
+                ret.push_back(rec);
+            }
+            return 0;
+          }
+          else {
+            return RCode::ServFail;
           }
-          return res;
         }
       }
     }