Permalink
Browse files

Improve robustness of root-nx-trust

Query names with embedded dots or 00's in labels will no longer make the
recursor (possibly) forget existing TLDs.
  • Loading branch information...
1 parent 686b392 commit 9d835ed9560e38c5f4acbc8f6a918d250ac66b73 @pieterlexis pieterlexis committed Apr 17, 2015
Showing with 6 additions and 7 deletions.
  1. +6 −7 pdns/syncres.cc
View
@@ -681,15 +681,14 @@ bool SyncRes::doCNAMECacheCheck(const string &qname, const QType &qtype, vector<
// accepts . terminated names, www.powerdns.com. -> com.
static const string getLastLabel(const std::string& qname)
{
- if(qname.empty())
+ if(qname.empty() || qname == ".")
return qname;
- string ret=qname.substr(0, qname.length()-1); // strip .
- string::size_type pos = ret.rfind('.');
- if(pos != string::npos) {
- ret = ret.substr(pos+1) + ".";
- }
- return ret;
+ labelparts_t parts;
+ labeltokUnescape(parts, qname);
+ int offset = (parts.end()-1)->first;
+
+ return qname.substr(offset, qname.size()-offset);
}
bool SyncRes::doCacheCheck(const string &qname, const QType &qtype, vector<DNSResourceRecord>&ret, int depth, int &res)

0 comments on commit 9d835ed

Please sign in to comment.