From: Kees Monshouwer Date: Fri, 5 Jun 2015 08:50:32 +0000 (+0200) Subject: fix non canonical names in zoneparser X-Git-Tag: dnsdist-1.0.0-alpha1~248^2~58^2~21^2~5^2~50 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d66269ef512978c50d3ef88044a55ce04220df69;p=thirdparty%2Fpdns.git fix non canonical names in zoneparser --- diff --git a/pdns/test-zoneparser_tng_cc.cc b/pdns/test-zoneparser_tng_cc.cc index 021ec7c14b..34de26b2d8 100644 --- a/pdns/test-zoneparser_tng_cc.cc +++ b/pdns/test-zoneparser_tng_cc.cc @@ -42,7 +42,7 @@ BOOST_AUTO_TEST_CASE(test_tng_record_types) { std::getline(ifs, type, ' '); std::getline(ifs, data, '\n'); // see if these agree - BOOST_CHECK_EQUAL(rr.qname, host); + BOOST_CHECK_EQUAL(rr.qname.toString(), host); BOOST_CHECK_EQUAL(rr.ttl, ttl); BOOST_CHECK_EQUAL(rr.qtype.getName(), type); if (*(rr.content.rbegin()) != '.' && *(data.rbegin()) == '.') diff --git a/pdns/zoneparser-tng.cc b/pdns/zoneparser-tng.cc index 3f9dedfd4a..3952d5fb95 100644 --- a/pdns/zoneparser-tng.cc +++ b/pdns/zoneparser-tng.cc @@ -298,17 +298,18 @@ bool ZoneParserTNG::get(DNSResourceRecord& rr, std::string* comment) goto retry; } - if(isspace(d_line[0])) + string qname = makeString(d_line, parts[0]); // Don't use DNSName here! + if(isspace(d_line[0])) rr.qname=d_prevqname; else { - rr.qname=makeString(d_line, parts[0]); + rr.qname=qname; parts.pop_front(); if(!rr.qname.countLabels() || rr.qname.toString()[0]==';') goto retry; } - if(rr.qname=="@") + if(qname=="@") rr.qname=d_zonename; - else + else if(!isCanonical(qname)) rr.qname += d_zonename; d_prevqname=rr.qname;