]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
change axfr-time ALIAS expansion to use stubDoResolve; catch errors
authorPeter van Dijk <peter.van.dijk@powerdns.com>
Mon, 9 May 2016 10:10:28 +0000 (12:10 +0200)
committerPeter van Dijk <peter.van.dijk@powerdns.com>
Mon, 9 May 2016 12:43:43 +0000 (14:43 +0200)
pdns/tcpreceiver.cc

index 3417fd11db3df4c8376e69fb1c7f41e8f0784bb0..3ac1b9a843c7eeb7812a11b604ba2f7c0378c0e7 100644 (file)
@@ -54,6 +54,7 @@
 #include "communicator.hh"
 #include "namespaces.hh"
 #include "signingpipe.hh"
+#include "stubresolver.hh"
 extern PacketCache PC;
 extern StatBag S;
 
@@ -738,14 +739,18 @@ int TCPNameserver::doAXFR(const DNSName &target, shared_ptr<DNSPacket> q, int ou
   while(sd.db->get(rr)) {
     if(rr.qname.isPartOf(target)) {
       if (rr.qtype.getCode() == QType::ALIAS && ::arg().mustDo("outgoing-axfr-expand-alias")) {
-        FindNS fns;
-        vector<string> ips=fns.lookup(DNSName(rr.content), (DNSBackend *) NULL);
+        vector<DNSResourceRecord> ips;
+        int ret1 = stubDoResolve(rr.content, QType::A, ips);
+        int ret2 = stubDoResolve(rr.content, QType::AAAA, ips);
+        if(ret1 != RCode::NoError || ret2 != RCode::NoError) {
+          L<<Logger::Error<<"Error resolving for ALIAS "<<rr.content<<", aborting AXFR"<<endl;
+          outpacket->setRcode(2); // 'SERVFAIL'
+          sendPacket(outpacket,outsock);
+          return 0;
+        }
         for(const auto& ip: ips) {
-          if(ip.find(":") == string::npos)
-            rr.qtype = QType(QType::A);
-          else
-            rr.qtype = QType(QType::AAAA);
-          rr.content = ip;
+          rr.qtype = ip.qtype;
+          rr.content = ip.content;
           rrs.push_back(rr);
         }
       }