Skip to content

Commit

Permalink
zoneparser: reduce DNSName usage to avoid trailing dot mess
Browse files Browse the repository at this point in the history
  • Loading branch information
mind04 committed Jun 5, 2015
1 parent 4e2a1bb commit 3e24378
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 25 deletions.
8 changes: 1 addition & 7 deletions pdns/misc.hh
Original file line number Diff line number Diff line change
Expand Up @@ -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]=='@')
Expand Down
35 changes: 18 additions & 17 deletions pdns/zoneparser-tng.cc
Original file line number Diff line number Diff line change
Expand Up @@ -36,17 +36,18 @@
#include <boost/algorithm/string.hpp>
#include <boost/lexical_cast.hpp>

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<string> zonedata, const DNSName& zname):
d_zonename(zname), d_defaultttl(3600),
d_havedollarttl(false)
ZoneParserTNG::ZoneParserTNG(const vector<string> 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;
Expand Down Expand Up @@ -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
Expand All @@ -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())
Expand Down Expand Up @@ -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, ')')) {
Expand All @@ -392,16 +393,16 @@ 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;

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;
Expand All @@ -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;
Expand All @@ -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) {
Expand Down
2 changes: 1 addition & 1 deletion pdns/zoneparser-tng.hh
Original file line number Diff line number Diff line change
Expand Up @@ -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<string> d_zonedata;
vector<string>::iterator d_zonedataline;
int d_defaultttl;
Expand Down

0 comments on commit 3e24378

Please sign in to comment.