From: Pieter Lexis Date: Fri, 11 Jan 2019 13:51:37 +0000 (+0100) Subject: getFakeAAAARecords: strip double CNAME records X-Git-Tag: rec-4.2.0-alpha1~10^2~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9fc9be6abe376425dd96c743ab1a3ea2b5bb6fa9;p=thirdparty%2Fpdns.git getFakeAAAARecords: strip double CNAME records --- diff --git a/pdns/lua-recursor4.cc b/pdns/lua-recursor4.cc index d0f1af10a2..ddf7722203 100644 --- a/pdns/lua-recursor4.cc +++ b/pdns/lua-recursor4.cc @@ -65,6 +65,27 @@ static int getFakeAAAARecords(const DNSName& qname, const std::string& prefix, v ComboAddress prefixAddress(prefix); + // Remove double CNAME records + std::set seenCNAMEs; + ret.erase(std::remove_if( + ret.begin(), + ret.end(), + [&seenCNAMEs](DNSRecord& rr) { + if (rr.d_type == QType::CNAME) { + auto target = getRR(rr); + if (target == nullptr) { + return false; + } + if (seenCNAMEs.count(target->getTarget()) > 0) { + // We've had this CNAME before, remove it + return true; + } + seenCNAMEs.insert(target->getTarget()); + } + return false; + }), + ret.end()); + for(DNSRecord& rr : ret) { if(rr.d_type == QType::A && rr.d_place==DNSResourceRecord::ANSWER) {