From 9fc9be6abe376425dd96c743ab1a3ea2b5bb6fa9 Mon Sep 17 00:00:00 2001 From: Pieter Lexis Date: Fri, 11 Jan 2019 14:51:37 +0100 Subject: [PATCH] getFakeAAAARecords: strip double CNAME records --- pdns/lua-recursor4.cc | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) 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) { -- 2.47.2