From 3e24378777b9aed9e495ed6f010ac6fb3b7637e4 Mon Sep 17 00:00:00 2001 From: Kees Monshouwer Date: Fri, 5 Jun 2015 20:12:36 +0200 Subject: [PATCH] zoneparser: reduce DNSName usage to avoid trailing dot mess --- pdns/misc.hh | 8 +------- pdns/zoneparser-tng.cc | 35 ++++++++++++++++++----------------- pdns/zoneparser-tng.hh | 2 +- 3 files changed, 20 insertions(+), 25 deletions(-) diff --git a/pdns/misc.hh b/pdns/misc.hh index 4c91fb0e6494e..0911359eb0377 100644 --- a/pdns/misc.hh +++ b/pdns/misc.hh @@ -490,13 +490,7 @@ inline bool isCanonical(const string& dom) return dom[dom.size()-1]=='.'; } -// get rid of this? -inline string toCanonic(const DNSName& zone, const string& domain) -{ - return toCanonic(zone.toString(), domain); -} - -// and this? +// TODO move to zoneparser-tng.hh ? inline string toCanonic(const string& zone, const string& domain) { if(domain.length()==1 && domain[0]=='@') diff --git a/pdns/zoneparser-tng.cc b/pdns/zoneparser-tng.cc index 3952d5fb956e9..f50cd9a0ba5c4 100644 --- a/pdns/zoneparser-tng.cc +++ b/pdns/zoneparser-tng.cc @@ -36,17 +36,18 @@ #include #include -ZoneParserTNG::ZoneParserTNG(const string& fname, const DNSName& zname, const string& reldir) : d_reldir(reldir), - d_zonename(zname), d_defaultttl(3600), - d_havedollarttl(false) +ZoneParserTNG::ZoneParserTNG(const string& fname, const DNSName& zname, const string& reldir) : d_reldir(reldir), + d_defaultttl(3600), + d_havedollarttl(false) { + d_zonename = stripDot(zname.toString()); stackFile(fname); } -ZoneParserTNG::ZoneParserTNG(const vector zonedata, const DNSName& zname): - d_zonename(zname), d_defaultttl(3600), - d_havedollarttl(false) +ZoneParserTNG::ZoneParserTNG(const vector zonedata, const DNSName& zname) : d_defaultttl(3600), + d_havedollarttl(false) { + d_zonename = stripDot(zname.toString()); d_zonedata = zonedata; d_zonedataline = d_zonedata.begin(); d_fromfile = false; @@ -278,7 +279,7 @@ bool ZoneParserTNG::get(DNSResourceRecord& rr, std::string* comment) stackFile(fname); } else if(pdns_iequals(command, "$ORIGIN") && parts.size() > 1) { - d_zonename = DNSName(toCanonic(string(""), makeString(d_line, parts[1]))); + d_zonename = toCanonic("", makeString(d_line, parts[1])); } else if(pdns_iequals(command, "$GENERATE") && parts.size() > 2) { // $GENERATE 1-127 $ CNAME $.0 @@ -304,13 +305,13 @@ bool ZoneParserTNG::get(DNSResourceRecord& rr, std::string* comment) else { rr.qname=qname; parts.pop_front(); - if(!rr.qname.countLabels() || rr.qname.toString()[0]==';') + if(qname.empty() || qname[0]==';') goto retry; } if(qname=="@") rr.qname=d_zonename; else if(!isCanonical(qname)) - rr.qname += d_zonename; + rr.qname += DNSName(d_zonename); d_prevqname=rr.qname; if(parts.empty()) @@ -369,7 +370,7 @@ bool ZoneParserTNG::get(DNSResourceRecord& rr, std::string* comment) trim(rr.content); if(equals(rr.content, "@")) - rr.content=d_zonename.toString(); + rr.content=d_zonename; if(findAndElide(rr.content, '(')) { // have found a ( and elided it if(!findAndElide(rr.content, ')')) { @@ -392,7 +393,7 @@ bool ZoneParserTNG::get(DNSResourceRecord& rr, std::string* comment) stringtok(recparts, rr.content); if(recparts.size()==2) { if (recparts[1]!=".") - recparts[1] = stripDot(toCanonic(d_zonename.toString(), recparts[1])); + recparts[1] = stripDot(toCanonic(d_zonename, recparts[1])); rr.content=recparts[0]+" "+recparts[1]; } break; @@ -400,8 +401,8 @@ bool ZoneParserTNG::get(DNSResourceRecord& rr, std::string* comment) case QType::RP: stringtok(recparts, rr.content); if(recparts.size()==2) { - recparts[0] = stripDot(toCanonic(d_zonename.toString(), recparts[0])); - recparts[1] = stripDot(toCanonic(d_zonename.toString(), recparts[1])); + recparts[0] = stripDot(toCanonic(d_zonename, recparts[0])); + recparts[1] = stripDot(toCanonic(d_zonename, recparts[1])); rr.content=recparts[0]+" "+recparts[1]; } break; @@ -410,7 +411,7 @@ bool ZoneParserTNG::get(DNSResourceRecord& rr, std::string* comment) stringtok(recparts, rr.content); if(recparts.size()==4) { if(recparts[3]!=".") - recparts[3] = stripDot(toCanonic(d_zonename.toString(), recparts[3])); + recparts[3] = stripDot(toCanonic(d_zonename, recparts[3])); rr.content=recparts[0]+" "+recparts[1]+" "+recparts[2]+" "+recparts[3]; } break; @@ -421,14 +422,14 @@ bool ZoneParserTNG::get(DNSResourceRecord& rr, std::string* comment) case QType::DNAME: case QType::PTR: case QType::AFSDB: - rr.content=stripDot(toCanonic(d_zonename.toString(), rr.content)); + rr.content=stripDot(toCanonic(d_zonename, rr.content)); break; case QType::SOA: stringtok(recparts, rr.content); if(recparts.size() > 1) { - recparts[0]=toCanonic(d_zonename.toString(), recparts[0]); - recparts[1]=toCanonic(d_zonename.toString(), recparts[1]); + recparts[0]=toCanonic(d_zonename, recparts[0]); + recparts[1]=toCanonic(d_zonename, recparts[1]); } rr.content.clear(); for(string::size_type n = 0; n < recparts.size(); ++n) { diff --git a/pdns/zoneparser-tng.hh b/pdns/zoneparser-tng.hh index 89888b0efdb7f..c82372e0b79a0 100644 --- a/pdns/zoneparser-tng.hh +++ b/pdns/zoneparser-tng.hh @@ -48,7 +48,7 @@ private: string d_reldir; string d_line; DNSName d_prevqname; - DNSName d_zonename; + string d_zonename; // Please no DNSName here (for now?) vector d_zonedata; vector::iterator d_zonedataline; int d_defaultttl;