From 6a046bf39d55d981bb240fdb4f443034f24c85ad Mon Sep 17 00:00:00 2001 From: Peter van Dijk Date: Thu, 26 Jul 2018 14:28:16 +0200 Subject: [PATCH] apply ALIAS scopemask after chasing (cherry picked from commit 0abea1ca19249f9028e85dec3cf7535d0598fede) --- pdns/dnsproxy.cc | 5 ++++- pdns/dnsproxy.hh | 3 ++- pdns/packethandler.cc | 5 ++++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/pdns/dnsproxy.cc b/pdns/dnsproxy.cc index 515aed127..2fd513a87 100644 --- a/pdns/dnsproxy.cc +++ b/pdns/dnsproxy.cc @@ -84,7 +84,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; @@ -102,6 +102,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); } @@ -128,6 +129,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; } @@ -237,6 +239,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 040fe1dca..3db94baf0 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; @@ -1288,6 +1289,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)) { @@ -1313,6 +1315,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 @@ -1343,7 +1346,7 @@ DNSPacket *PacketHandler::doQuestion(DNSPacket *p) if(!haveAlias.empty() && (!weDone || p->qtype.getCode() == QType::ANY)) { DLOG(L<completePacket(r, haveAlias, target); + DP->completePacket(r, haveAlias, target, aliasScopeMask); return 0; } -- 2.49.0