From: Aki Tuomi Date: Sat, 27 Jan 2018 23:18:15 +0000 (+0200) Subject: Use DNSName in RecordTextReader X-Git-Tag: dnsdist-1.3.0~115^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3716f081d611c2800d9d11e61d1bc8f21861b4ab;p=pdns Use DNSName in RecordTextReader --- diff --git a/pdns/nsecrecords.cc b/pdns/nsecrecords.cc index ab6a468a2..1e212ae02 100644 --- a/pdns/nsecrecords.cc +++ b/pdns/nsecrecords.cc @@ -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); diff --git a/pdns/rcpgenerator.cc b/pdns/rcpgenerator.cc index 2797955de..371158582 100644 --- a/pdns/rcpgenerator.cc +++ b/pdns/rcpgenerator.cc @@ -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) diff --git a/pdns/rcpgenerator.hh b/pdns/rcpgenerator.hh index efb409397..6553ffac1 100644 --- a/pdns/rcpgenerator.hh +++ b/pdns/rcpgenerator.hh @@ -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();