From: Bert Hubert Date: Sun, 18 Feb 2007 19:39:27 +0000 (+0000) Subject: add stripDot() for use by bindbackend, spiff up zoneparser-tng.cc to know about the... X-Git-Tag: pdns-2.9.21~92 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=da042e6e01b7fc65a0d227679e622ca62b6976f3;p=pdns add stripDot() for use by bindbackend, spiff up zoneparser-tng.cc to know about the 'relative' directory git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@953 d19b8d6e-7fed-0310-83ef-9ca221ded41b --- diff --git a/pdns/misc.cc b/pdns/misc.cc index 9b2fe4e14..41291bc25 100644 --- a/pdns/misc.cc +++ b/pdns/misc.cc @@ -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 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); +} diff --git a/pdns/misc.hh b/pdns/misc.hh index 483cf1f13..2ee9dcfa8 100644 --- a/pdns/misc.hh +++ b/pdns/misc.hh @@ -383,4 +383,7 @@ inline string toCanonic(const string& zone, const string& domain) ret.append(zone); return ret; } + +string stripDot(const string& dom); + #endif diff --git a/pdns/zoneparser-tng.cc b/pdns/zoneparser-tng.cc index 8ccab97f8..11a5d56ee 100644 --- a/pdns/zoneparser-tng.cc +++ b/pdns/zoneparser-tng.cc @@ -29,7 +29,7 @@ #include #include -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])); diff --git a/pdns/zoneparser-tng.hh b/pdns/zoneparser-tng.hh index 6ccf1f158..e83e1f8a1 100644 --- a/pdns/zoneparser-tng.hh +++ b/pdns/zoneparser-tng.hh @@ -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 d_fps; + string d_reldir; string d_line; string d_prevqname; string d_zonename;