From: Peter van Dijk Date: Thu, 26 Jul 2018 12:28:16 +0000 (+0200) Subject: apply ALIAS scopemask after chasing X-Git-Tag: dnsdist-1.3.3~103^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0abea1ca19249f9028e85dec3cf7535d0598fede;p=thirdparty%2Fpdns.git apply ALIAS scopemask after chasing --- diff --git a/pdns/dnsproxy.cc b/pdns/dnsproxy.cc index 6cad953fb8..aed97610b4 100644 --- a/pdns/dnsproxy.cc +++ b/pdns/dnsproxy.cc @@ -88,7 +88,7 @@ void DNSProxy::go() } //! look up qname target with r->qtype, plonk it in the answer section of 'r' with name aname -bool DNSProxy::completePacket(DNSPacket *r, const DNSName& target,const DNSName& aname) +bool DNSProxy::completePacket(DNSPacket *r, const DNSName& target,const DNSName& aname, const uint8_t scopeMask) { if(r->d_tcp) { vector ips; @@ -106,6 +106,7 @@ bool DNSProxy::completePacket(DNSPacket *r, const DNSName& target,const DNSName& for (auto &ip : ips) { ip.dr.d_name = aname; + ip.scopeMask = scopeMask; r->addRecord(ip); } @@ -132,6 +133,7 @@ bool DNSProxy::completePacket(DNSPacket *r, const DNSName& target,const DNSName& ce.anyLocal = r->d_anyLocal; ce.complete = r; ce.aname=aname; + ce.anameScopeMask = scopeMask; d_conntrack[id]=ce; } @@ -247,6 +249,7 @@ void DNSProxy::mainloop(void) if(j->first.d_type == i->second.qtype || (i->second.qtype == QType::ANY && (j->first.d_type == QType::A || j->first.d_type == QType::AAAA))) { DNSZoneRecord dzr; dzr.dr.d_name=i->second.aname; + dzr.scopeMask=i->second.anameScopeMask; dzr.dr.d_type = j->first.d_type; dzr.dr.d_ttl=j->first.d_ttl; dzr.dr.d_place= j->first.d_place; diff --git a/pdns/dnsproxy.hh b/pdns/dnsproxy.hh index 9d968834df..4478ef4955 100644 --- a/pdns/dnsproxy.hh +++ b/pdns/dnsproxy.hh @@ -54,7 +54,7 @@ public: DNSProxy(const string &ip); //!< creates socket ~DNSProxy(); // rrset; bool weDone=0, weRedirected=0, weHaveUnauth=0; DNSName haveAlias; + uint8_t aliasScopeMask; DNSPacket *r=0; bool noCache=false; @@ -1353,6 +1354,7 @@ DNSPacket *PacketHandler::doQuestion(DNSPacket *p) B.lookup(QType(QType::ANY), target, p, sd.domain_id); rrset.clear(); haveAlias.trimToLabels(0); + aliasScopeMask = 0; weDone = weRedirected = weHaveUnauth = false; while(B.get(rr)) { @@ -1409,6 +1411,7 @@ DNSPacket *PacketHandler::doQuestion(DNSPacket *p) continue; } haveAlias=getRR(rr.dr)->d_content; + aliasScopeMask=rr.scopeMask; } // Filter out all SOA's and add them in later @@ -1440,7 +1443,7 @@ DNSPacket *PacketHandler::doQuestion(DNSPacket *p) if(!haveAlias.empty() && (!weDone || p->qtype.getCode() == QType::ANY)) { DLOG(g_log<completePacket(r, haveAlias, target); + DP->completePacket(r, haveAlias, target, aliasScopeMask); return 0; }