From 9f0076d7bc2f783799995851ecadfe6f3d7ad1fd Mon Sep 17 00:00:00 2001 From: Bert Hubert Date: Sat, 7 Apr 2007 15:54:30 +0000 Subject: [PATCH] improved support for multiline records in zones, plus accept @ as part of queries git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@1014 d19b8d6e-7fed-0310-83ef-9ca221ded41b --- pdns/packethandler.cc | 2 +- pdns/zoneparser-tng.cc | 64 +++++++++++++++++++-------------------- regression-tests/test.com | 3 +- 3 files changed, 33 insertions(+), 36 deletions(-) diff --git a/pdns/packethandler.cc b/pdns/packethandler.cc index 3ee3fe44f..ca000dfc7 100644 --- a/pdns/packethandler.cc +++ b/pdns/packethandler.cc @@ -547,7 +547,7 @@ bool validDNSName(const string &name) if(!((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || - c =='-' || c == '_' || c=='*' || c=='.' || c=='/')) + c =='-' || c == '_' || c=='*' || c=='.' || c=='/' || c=='@')) return false; } return true; diff --git a/pdns/zoneparser-tng.cc b/pdns/zoneparser-tng.cc index 85a8741ea..588a85ffe 100644 --- a/pdns/zoneparser-tng.cc +++ b/pdns/zoneparser-tng.cc @@ -178,6 +178,26 @@ void chopComment(string& line) line.resize(pos); } +bool findAndElide(string& line, char c) +{ + string::size_type pos, len = line.length(); + bool inQuote=false; + for(pos = 0 ; pos < len; ++pos) { + if(line[pos]=='\\') + pos++; + else if(line[pos]=='"') + inQuote=!inQuote; + else if(line[pos]==c && !inQuote) + break; + } + if(pos != len) { + line.erase(pos, 1); + return true; + } + return false; +} + + bool ZoneParserTNG::get(DNSResourceRecord& rr) { retry:; @@ -289,27 +309,22 @@ bool ZoneParserTNG::get(DNSResourceRecord& rr) rr.content=d_line.substr(range.first); chopComment(rr.content); - string::size_type pos; - - if(rr.qtype.getCode()!=QType::TXT && (pos=rr.content.find('('))!=string::npos) { - rr.content.resize(pos); // chop off ( - trim(rr.content); - while(getLine()) { - chomp(d_line,"\r\n "); - chopComment(d_line); - - trim(d_line); - - pos=d_line.find(')'); - if(pos!=string::npos) { - d_line.resize(pos); + // cerr<<"rr.content before possible elide: '"< soaparts; switch(rr.qtype.getCode()) { case QType::MX: @@ -356,20 +371,3 @@ bool ZoneParserTNG::getLine() } return false; } - - -#if 0 -int main(int argc, char** argv) -try -{ - reportAllTypes(); - ZoneParserTNG zpt(argv[1]); - DNSResourceRecord rr; - while(zpt.get(rr)) { - } - - -} -catch(...) -{} -#endif diff --git a/regression-tests/test.com b/regression-tests/test.com index ea14d5818..debd8fd34 100644 --- a/regression-tests/test.com +++ b/regression-tests/test.com @@ -1,7 +1,6 @@ $TTL 3600 $ORIGIN test.com. -@ IN SOA ns1.test.com. ahu.example.com. ( - 2005092501 +@ IN SOA ns1.test.com. ahu.example.com. ( 2005092501 8H ; refresh 2H ; retry 1W ; expire -- 2.49.0