]> granicus.if.org Git - pdns/commitdiff
Use DNSName in RecordTextReader
authorAki Tuomi <cmouse@cmouse.fi>
Sat, 27 Jan 2018 23:18:15 +0000 (01:18 +0200)
committerAki Tuomi <cmouse@cmouse.fi>
Sat, 27 Jan 2018 23:18:15 +0000 (01:18 +0200)
pdns/nsecrecords.cc
pdns/rcpgenerator.cc
pdns/rcpgenerator.hh

index ab6a468a201c743fcb54e8379f81a160b5979888..1e212ae02d4d6d1287c7f128400130dc24f540fe 100644 (file)
@@ -36,7 +36,7 @@ DNSRecordContent* NSECRecordContent::make(const string& content)
 
 NSECRecordContent::NSECRecordContent(const string& content, const string& zone) 
 {
-  RecordTextReader rtr(content, zone);
+  RecordTextReader rtr(content, DNSName(zone));
   rtr.xfrName(d_next);
 
   while(!rtr.eof()) {
@@ -143,7 +143,7 @@ DNSRecordContent* NSEC3RecordContent::make(const string& content)
 
 NSEC3RecordContent::NSEC3RecordContent(const string& content, const string& zone)
 {
-  RecordTextReader rtr(content, zone);
+  RecordTextReader rtr(content, DNSName(zone));
   rtr.xfr8BitInt(d_algorithm);
   rtr.xfr8BitInt(d_flags);
   rtr.xfr16BitInt(d_iterations);
@@ -279,7 +279,7 @@ DNSRecordContent* NSEC3PARAMRecordContent::make(const string& content)
 
 NSEC3PARAMRecordContent::NSEC3PARAMRecordContent(const string& content, const string& zone) 
 {
-  RecordTextReader rtr(content, zone);
+  RecordTextReader rtr(content, DNSName(zone));
   rtr.xfr8BitInt(d_algorithm); 
   rtr.xfr8BitInt(d_flags); 
   rtr.xfr16BitInt(d_iterations); 
index 2797955defc1d473db66f603a411bc33cf50a23e..371158582f738e4deabd5145fc883b323a78507e 100644 (file)
@@ -35,7 +35,7 @@
 #include "base64.hh"
 #include "namespaces.hh"
 
-RecordTextReader::RecordTextReader(const string& str, const string& zone) : d_string(str), d_zone(zone), d_pos(0)
+RecordTextReader::RecordTextReader(const string& str, const DNSName& zone) : d_string(str), d_zone(zone), d_pos(0)
 {
    /* remove whitespace */
    boost::trim_if(d_string, boost::algorithm::is_space());
@@ -229,8 +229,7 @@ void RecordTextReader::xfr8BitInt(uint8_t &val)
 void RecordTextReader::xfrName(DNSName& val, bool, bool)
 {
   skipSpaces();
-  string sval;
-  sval.reserve(d_end - d_pos);
+  DNSName sval;
 
   const char* strptr=d_string.c_str();
   string::size_type begin_pos = d_pos;
@@ -240,19 +239,13 @@ void RecordTextReader::xfrName(DNSName& val, bool, bool)
       
     d_pos++;
   }
-  sval.append(strptr+begin_pos, strptr+d_pos);      
+  sval = DNSName(std::string(strptr+begin_pos, strptr+d_pos));
 
   if(sval.empty())
     sval=d_zone;
-  else if(!d_zone.empty()) {
-    char last=sval[sval.size()-1];
-   
-    if(last =='.')
-      sval.resize(sval.size()-1);
-    else if(last != '.' && !isdigit(last)) // don't add zone to IP address
-      sval+="."+d_zone;
-  }
-  val = DNSName(sval);
+  else if(!d_zone.empty())
+    sval+=d_zone;
+  val = sval;
 }
 
 static bool isbase64(char c, bool acceptspace)
index efb409397266a7c31fd760e7a78510b6401418ea..6553ffac1e53b99b3dadbec56f108f28b42437e6 100644 (file)
@@ -39,7 +39,7 @@ public:
 class RecordTextReader
 {
 public:
-  RecordTextReader(const string& str, const string& zone="");
+  RecordTextReader(const string& str, const DNSName& zone=DNSName(""));
   void xfr64BitInt(uint64_t& val);
   void xfr48BitInt(uint64_t& val);
   void xfr32BitInt(uint32_t& val);
@@ -69,7 +69,7 @@ public:
   bool eof();
 private:
   string d_string;
-  string d_zone;
+  DNSName d_zone;
   string::size_type d_pos;
   string::size_type d_end;
   void skipSpaces();