From: Johan Jatko Date: Tue, 5 Sep 2017 15:59:55 +0000 (+0200) Subject: Handle AFSDB record separately due to record structure. X-Git-Tag: auth-4.0.5~1^2~2^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=064438a0cdd82644d63b625f015bc25e5a3a20ba;p=thirdparty%2Fpdns.git Handle AFSDB record separately due to record structure. Closes #4703. AFSDB records has two elements, , as per RFC1183, and needs special treatment when parsing. (cherry picked from commit 319d6e47e219ec2fb0b829943040457cbb22ff30) --- diff --git a/pdns/zoneparser-tng.cc b/pdns/zoneparser-tng.cc index 16afed6675..f9a23a08c8 100644 --- a/pdns/zoneparser-tng.cc +++ b/pdns/zoneparser-tng.cc @@ -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)