]> granicus.if.org Git - pdns/commitdiff
synthesise ALIAS during outgoing AXFR
authorPeter van Dijk <peter.van.dijk@powerdns.com>
Fri, 1 Apr 2016 10:34:03 +0000 (12:34 +0200)
committerPeter van Dijk <peter.van.dijk@powerdns.com>
Mon, 9 May 2016 12:43:42 +0000 (14:43 +0200)
pdns/tcpreceiver.cc

index c855b8dda60c7700cc523308d82dd76638c0a429..fc771a36e5c844894757fbe4d79a956f992bd83c 100644 (file)
@@ -737,6 +737,22 @@ 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) {
+        FindNS fns;
+        vector<string> ips=fns.lookup(DNSName(rr.content), (DNSBackend *) NULL);
+        for(const auto& ip: ips) {
+          if(ip.find(":") == string::npos)
+            rr.qtype = QType(QType::A);
+          else
+            rr.qtype = QType(QType::AAAA);
+          rr.content = ip;
+          rrs.push_back(rr);
+        }
+      }
+      else {
+        rrs.push_back(rr);
+      }
+
       if (rectify) {
         if (rr.qtype.getCode()) {
           qnames.insert(rr.qname);
@@ -747,7 +763,6 @@ int TCPNameserver::doAXFR(const DNSName &target, shared_ptr<DNSPacket> q, int ou
           continue;
         }
       }
-      rrs.push_back(rr);
     } else {
       if (rr.qtype.getCode())
         L<<Logger::Warning<<"Zone '"<<target<<"' contains out-of-zone data '"<<rr.qname<<"|"<<rr.qtype.getName()<<"', ignoring"<<endl;