From 064438a0cdd82644d63b625f015bc25e5a3a20ba Mon Sep 17 00:00:00 2001 From: Johan Jatko Date: Tue, 5 Sep 2017 17:59:55 +0200 Subject: [PATCH] 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) --- pdns/zoneparser-tng.cc | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) 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) -- 2.47.2