From: Remi Gacogne Date: Tue, 21 Nov 2017 16:07:04 +0000 (+0100) Subject: Backport #5730 X-Git-Tag: auth-4.0.5~1^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=041fef983cbdca271c87e12081b4ec2625a1a636;p=thirdparty%2Fpdns.git Backport #5730 --- 041fef983cbdca271c87e12081b4ec2625a1a636 diff --cc pdns/zoneparser-tng.cc index b573c76499,3fd66f30dd..53149464b3 --- a/pdns/zoneparser-tng.cc +++ b/pdns/zoneparser-tng.cc @@@ -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)