]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Backport #5730
authorRemi Gacogne <remi.gacogne@powerdns.com>
Tue, 21 Nov 2017 16:07:04 +0000 (17:07 +0100)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Tue, 21 Nov 2017 16:07:04 +0000 (17:07 +0100)
1  2 
pdns/zoneparser-tng.cc

index b573c76499626d695feacb3835b5bc83429c3bf0,3fd66f30dd6d1534a5a0d756036eddd06d9a2dfb..53149464b3d3ce3493e7c1aa58ecfebed521515f
@@@ -460,14 -450,27 +460,32 @@@ bool ZoneParserTNG::get(DNSResourceReco
    case QType::CNAME:
    case QType::DNAME:
    case QType::PTR:
-   case QType::AFSDB:
 +    try {
 +      rr.content = toCanonic(d_zonename, rr.content).toStringRootDot();
 +    } catch (std::exception &e) {
 +      throw PDNSException("Error in record '" + rr.qname.toString() + " " + rr.qtype.getName() + "': " + e.what());
 +    }
+     rr.content=toCanonic(d_zonename, rr.content).toStringRootDot();
      break;
+   case QType::AFSDB:
+     stringtok(recparts, rr.content);
+     if(recparts.size() == 2) {
+       try {
+         recparts[1]=toCanonic(d_zonename, recparts[1]).toStringRootDot();
+       } catch (std::exception &e) {
+         throw PDNSException("Error in record '" + rr.qname.toString() + " " + rr.qtype.getName() + "': " + e.what());
+       }
+     } 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];
+     }
+     break;
    case QType::SOA:
      stringtok(recparts, rr.content);
      if(recparts.size() > 7)