From: Bert Hubert Date: Fri, 28 May 2010 12:26:38 +0000 (+0000) Subject: Aki Tuomi discovered that the zoneparser messes up 'blah IN MX 15 @'. Fixed. X-Git-Tag: rec-3.3~81 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=43f40013e20a100969d1cf4b7db4ce5cbacf55de;p=pdns Aki Tuomi discovered that the zoneparser messes up 'blah IN MX 15 @'. Fixed. git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@1621 d19b8d6e-7fed-0310-83ef-9ca221ded41b --- diff --git a/pdns/misc.hh b/pdns/misc.hh index ce83248eb..4b138da62 100644 --- a/pdns/misc.hh +++ b/pdns/misc.hh @@ -363,6 +363,9 @@ inline bool isCanonical(const string& dom) inline string toCanonic(const string& zone, const string& domain) { + if(domain.length()==1 && domain[0]=='@') + return zone; + if(isCanonical(domain)) return domain; string ret=domain; diff --git a/pdns/zoneparser-tng.cc b/pdns/zoneparser-tng.cc index 3c52cc327..a224d935e 100644 --- a/pdns/zoneparser-tng.cc +++ b/pdns/zoneparser-tng.cc @@ -225,6 +225,7 @@ string ZoneParserTNG::getLineOfFile() return "on line "+lexical_cast(d_filestates.top().d_lineno)+" of file '"+d_filestates.top().d_filename+"'"; } +// ODD: this function never fills out the prio field! rest of pdns compensates though bool ZoneParserTNG::get(DNSResourceRecord& rr) { retry:; @@ -365,9 +366,16 @@ bool ZoneParserTNG::get(DNSResourceRecord& rr) } } - vector soaparts; + vector recparts; switch(rr.qtype.getCode()) { case QType::MX: + stringtok(recparts, rr.content); + if(recparts.size()==2) { + recparts[1] = toCanonic(d_zonename, recparts[1]); + rr.content=recparts[0]+" "+recparts[1]; + } + break; + case QType::NS: case QType::CNAME: case QType::PTR: @@ -377,23 +385,23 @@ bool ZoneParserTNG::get(DNSResourceRecord& rr) break; case QType::SOA: - stringtok(soaparts, rr.content); - if(soaparts.size() > 1) { - soaparts[0]=toCanonic(d_zonename, soaparts[0]); - soaparts[1]=toCanonic(d_zonename, soaparts[1]); + stringtok(recparts, rr.content); + if(recparts.size() > 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 < soaparts.size(); ++n) { + for(string::size_type n = 0; n < recparts.size(); ++n) { if(n) rr.content.append(1,' '); if(n > 1) - rr.content+=lexical_cast(makeTTLFromZone(soaparts[n])); + rr.content+=lexical_cast(makeTTLFromZone(recparts[n])); else - rr.content+=soaparts[n]; + rr.content+=recparts[n]; if(n==6 && !d_havedollarttl) - d_defaultttl=makeTTLFromZone(soaparts[n]); + d_defaultttl=makeTTLFromZone(recparts[n]); } break; default:;