]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Handle AFSDB record separately due to record structure.
authorJohan Jatko <armedguy@ludd.ltu.se>
Tue, 5 Sep 2017 15:59:55 +0000 (17:59 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Tue, 21 Nov 2017 14:49:45 +0000 (15:49 +0100)
Closes #4703.

AFSDB records has two elements, <subtype> <hostname>,
as per RFC1183, and needs special treatment when parsing.

(cherry picked from commit 319d6e47e219ec2fb0b829943040457cbb22ff30)

pdns/zoneparser-tng.cc

index 16afed667561d087190c2a3e177fb6d942e6813c..f9a23a08c8e9b23bc22095fac71cc597458a465b 100644 (file)
@@ -450,10 +450,28 @@ bool ZoneParserTNG::get(DNSResourceRecord& rr, std::string* comment)
   case QType::CNAME:
   case QType::DNAME:
   case QType::PTR:
-  case QType::AFSDB:
     rr.content=toCanonic(d_zonename, rr.content).toStringRootDot();
     break;
+  case QType::AFSDB:
+    try {
+      stringtok(recparts, rr.content);
+      if(recparts.size() == 2)
+      {
+        recparts[1]=toCanonic(d_zonename, recparts[1]).toStringRootDot();
+      } else {
+        throw PDNSException("AFSDB record for "+rr.qname.toString()+" invalid");
+      }
+      rr.content.clear();
+      for(string::size_type n = 0; n < recparts.size(); ++n) {
+        if(n)
+          rr.content.append(1,' ');
 
+        rr.content+=recparts[n];
+      }
+    } catch (std::exception &e) {
+      throw PDNSException("Error in record '" + rr.qname.toString() + " " + rr.qtype.getName() + "': " + e.what());
+    }
+    break;
   case QType::SOA:
     stringtok(recparts, rr.content);
     if(recparts.size() > 7)