]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
partial de-chompification, plus fix up bad SOA ttl usage in case of $TTL
authorBert Hubert <bert.hubert@netherlabs.nl>
Fri, 25 Jul 2008 19:58:35 +0000 (19:58 +0000)
committerBert Hubert <bert.hubert@netherlabs.nl>
Fri, 25 Jul 2008 19:58:35 +0000 (19:58 +0000)
git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@1240 d19b8d6e-7fed-0310-83ef-9ca221ded41b

pdns/zoneparser-tng.cc
pdns/zoneparser-tng.hh

index 582d8ab484c0b4520b6f0787eaacbbdac7516002..1f2fd2ed5bcd1f3b0b271f97a725dffb8ca9a17e 100644 (file)
@@ -29,7 +29,9 @@
 #include <boost/algorithm/string.hpp>
 #include <boost/lexical_cast.hpp>
 
-ZoneParserTNG::ZoneParserTNG(const string& fname, const string& zname, const string& reldir) : d_reldir(reldir), d_zonename(zname), d_defaultttl(3600)
+ZoneParserTNG::ZoneParserTNG(const string& fname, const string& zname, const string& reldir) : d_reldir(reldir), 
+                                                                                              d_zonename(zname), d_defaultttl(3600), 
+                                                                                              d_havedollarttl(false)
 {
   d_zonename = toCanonic("", d_zonename);
   stackFile(fname);
@@ -227,7 +229,7 @@ bool ZoneParserTNG::get(DNSResourceRecord& rr)
   if(!getTemplateLine() && !getLine())
     return false;
 
-  chomp(d_line, " \r\n\x1a");
+  boost::trim_right_if(d_line, is_any_of(" \r\n\x1a"));
 
   parts_t parts;
   vstringtok(parts, d_line);
@@ -240,8 +242,10 @@ bool ZoneParserTNG::get(DNSResourceRecord& rr)
 
   if(d_line[0]=='$') { 
     string command=makeString(d_line, parts[0]);
-    if(iequals(command,"$TTL") && parts.size() > 1)
+    if(iequals(command,"$TTL") && parts.size() > 1) {
       d_defaultttl=makeTTLFromZone(trim_right_copy_if(makeString(d_line, parts[1]), is_any_of(";")));
+      d_havedollarttl=true;
+    }
     else if(iequals(command,"$INCLUDE") && parts.size() > 1) {
       string fname=unquotify(makeString(d_line, parts[1]));
       if(!fname.empty() && fname[0]!='/' && !d_reldir.empty())
@@ -345,7 +349,7 @@ bool ZoneParserTNG::get(DNSResourceRecord& rr)
   if(findAndElide(rr.content, '(')) {      // have found a ( and elided it
     if(!findAndElide(rr.content, ')')) {
       while(getLine()) {
-       chomp(d_line,"\t\r\n ");
+       trim_right(d_line);
        chopComment(d_line);
        trim(d_line);
        
@@ -384,7 +388,7 @@ bool ZoneParserTNG::get(DNSResourceRecord& rr)
       else
        rr.content+=soaparts[n];
 
-      if(n==6)
+      if(n==6 && !d_havedollarttl)
        d_defaultttl=makeTTLFromZone(soaparts[n]);
     }
     break;
index 64487b2485255bdcfbe79c64b106ae088c51e214..8206c940048b707763a200dfa06d43e61c776e48 100644 (file)
@@ -46,6 +46,7 @@ private:
   string d_prevqname;
   string d_zonename;
   int d_defaultttl;
+  bool d_havedollarttl;
   uint32_t d_templatecounter, d_templatestop, d_templatestep;
   string d_templateline;
   parts_t d_templateparts;