From: Bert Hubert Date: Fri, 16 Feb 2007 23:06:12 +0000 (+0000) Subject: teach zoneparser-tng about $INCLUDE and partially implement $GENERATE X-Git-Tag: pdns-2.9.21~94 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=bf503cc0fa6840a8cebd05ddbca9c996df53fc1c;p=pdns teach zoneparser-tng about $INCLUDE and partially implement $GENERATE git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@951 d19b8d6e-7fed-0310-83ef-9ca221ded41b --- diff --git a/pdns/zoneparser-tng.cc b/pdns/zoneparser-tng.cc index 9e6f522dd..42b2e2ad2 100644 --- a/pdns/zoneparser-tng.cc +++ b/pdns/zoneparser-tng.cc @@ -31,14 +31,23 @@ ZoneParserTNG::ZoneParserTNG(const string& fname, const string& zname) : d_zonename(zname), d_defaultttl(3600) { - d_fp=fopen(fname.c_str(), "r"); - if(!d_fp) + stackFile(fname); +} + +void ZoneParserTNG::stackFile(const std::string& fname) +{ + FILE *fp=fopen(fname.c_str(), "r"); + if(!fp) throw runtime_error("Unable to open file '"+fname+"': "+stringerror()); + d_fps.push(fp); } ZoneParserTNG::~ZoneParserTNG() { - fclose(d_fp); + while(!d_fps.empty()) { + fclose(d_fps.top()); + d_fps.pop(); + } } static string makeString(const string& line, const pair& range) @@ -90,8 +99,21 @@ bool ZoneParserTNG::get(DNSResourceRecord& rr) goto retry; if(d_line[0]=='$') { - if(makeString(d_line, parts[0])=="$TTL" && parts.size() > 1) + string command=makeString(d_line, parts[0]); + 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]))); + } +#if 0 + else if(command=="$GENERATE" && parts.size() > 2) { + // $GENERATE 1-127 $ CNAME $.0 + string range=makeString(d_line, parts[1]); + int start, stop, step=0; + int ret=sscanf(range.c_str(),"%d-%d/%d", &start, & stop, &step); + cerr<<"ret="< #include #include +#include using namespace std; @@ -35,8 +36,8 @@ public: typedef runtime_error exception; private: bool getLine(); - - FILE *d_fp; + void stackFile(const std::string& fname); + stack d_fps; string d_line; string d_prevqname; string d_zonename;