]> granicus.if.org Git - pdns/commitdiff
add stripDot() for use by bindbackend, spiff up zoneparser-tng.cc to know about the...
authorBert Hubert <bert.hubert@netherlabs.nl>
Sun, 18 Feb 2007 19:39:27 +0000 (19:39 +0000)
committerBert Hubert <bert.hubert@netherlabs.nl>
Sun, 18 Feb 2007 19:39:27 +0000 (19:39 +0000)
git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@953 d19b8d6e-7fed-0310-83ef-9ca221ded41b

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

index 9b2fe4e14fc34812342a8c4a57160d33da031911..41291bc25d75c978b047366259a84dff5c58dedf 100644 (file)
@@ -197,7 +197,7 @@ int sendData(const char *buffer, int replen, int outsock)
   iov[1].iov_len=replen;
   int ret=Utility::writev(outsock,iov,2);
 
-  if(ret<0)  // "EOF is error" - we can't deal with EAGAIN errors at this stage yet
+  if(ret <= 0)  // "EOF is error" - we can't deal with EAGAIN errors at this stage yet
     return -1;
 
   if(ret!=replen+2) {
@@ -587,3 +587,14 @@ boost::optional<int> logFacilityToLOG(unsigned int facility)
     return ret;
   }
 }
+
+string stripDot(const string& dom)
+{
+  if(dom.empty())
+    return dom;
+
+  if(dom[dom.size()-1]!='.')
+    return dom;
+
+  return dom.substr(0,dom.size()-1);
+}
index 483cf1f13fb12344d72b244955aa156de0662278..2ee9dcfa8f2c2e79d594fd79eb0943dcb0c13a4e 100644 (file)
@@ -383,4 +383,7 @@ inline string toCanonic(const string& zone, const string& domain)
   ret.append(zone);
   return ret;
 }
+
+string stripDot(const string& dom);
+
 #endif
index 8ccab97f8ec50e16c0b42bf8bb752372ec2d6170..11a5d56eecebcdadb0667c1381d31d93ec7030dc 100644 (file)
@@ -29,7 +29,7 @@
 #include <boost/algorithm/string.hpp>
 #include <boost/lexical_cast.hpp>
 
-ZoneParserTNG::ZoneParserTNG(const string& fname, const string& zname) : 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)
 {
   stackFile(fname);
 }
@@ -180,7 +180,10 @@ bool ZoneParserTNG::get(DNSResourceRecord& rr)
     if(command=="$TTL" && parts.size() > 1)
       d_defaultttl=makeTTLFromZone(makeString(d_line,parts[1]));
     else if(command=="$INCLUDE" && parts.size() > 1) {
-      stackFile(unquotify(makeString(d_line, parts[1])));
+      string fname=unquotify(makeString(d_line, parts[1]));
+      if(!fname.empty() && fname[0]!='/' && !d_reldir.empty())
+       fname=d_reldir+"/"+fname;
+      stackFile(fname);
     }
     else if(command=="$ORIGIN" && parts.size() > 1) {
       d_zonename = toCanonic("", makeString(d_line, parts[1]));
index 6ccf1f1585acdb55acee81475408d53aab96eb1a..e83e1f8a19bbf34bc92e0d8f50ed8fd9a0334c64 100644 (file)
@@ -28,7 +28,7 @@ using namespace std;
 class ZoneParserTNG
 {
 public:
-  ZoneParserTNG(const string& fname, const string& zname="");
+  ZoneParserTNG(const string& fname, const string& zname="", const string& reldir="");
 
   ~ZoneParserTNG();
 
@@ -40,6 +40,7 @@ private:
   bool getTemplateLine();
   void stackFile(const std::string& fname);
   stack<FILE *> d_fps;
+  string d_reldir;
   string d_line;
   string d_prevqname;
   string d_zonename;