Skip to content

Commit

Permalink
set AA on CNAME into referral, fixes PowerDNS#589
Browse files Browse the repository at this point in the history
  • Loading branch information
Peter van Dijk committed Sep 30, 2014
1 parent 231d93d commit 95c7970
Show file tree
Hide file tree
Showing 3 changed files with 5 additions and 5 deletions.
6 changes: 3 additions & 3 deletions pdns/packethandler.cc
Original file line number Diff line number Diff line change
Expand Up @@ -315,7 +315,7 @@ bool PacketHandler::getBestWildcard(DNSPacket *p, SOAData& sd, const string &tar
}

/** dangling is declared true if we were unable to resolve everything */
int PacketHandler::doAdditionalProcessingAndDropAA(DNSPacket *p, DNSPacket *r, const SOAData& soadata)
int PacketHandler::doAdditionalProcessingAndDropAA(DNSPacket *p, DNSPacket *r, const SOAData& soadata, bool retargeted)
{
DNSResourceRecord rr;
SOAData sd;
Expand All @@ -335,7 +335,7 @@ int PacketHandler::doAdditionalProcessingAndDropAA(DNSPacket *p, DNSPacket *r, c

// we now have a copy, push_back on packet might reallocate!
for(vector<DNSResourceRecord>::const_iterator i=crrs.begin(); i!=crrs.end(); ++i) {
if(r->d.aa && !i->qname.empty() && i->qtype.getCode()==QType::NS && !B.getSOA(i->qname,sd,p)) { // drop AA in case of non-SOA-level NS answer, except for root referral
if(r->d.aa && !i->qname.empty() && i->qtype.getCode()==QType::NS && !B.getSOA(i->qname,sd,p) && !retargeted) { // drop AA in case of non-SOA-level NS answer, except for root referral
r->setA(false);
// i->d_place=DNSResourceRecord::AUTHORITY; // XXX FIXME
}
Expand Down Expand Up @@ -1296,7 +1296,7 @@ DNSPacket *PacketHandler::questionOrRecurse(DNSPacket *p, bool *shouldRecurse)
}

sendit:;
if(doAdditionalProcessingAndDropAA(p, r, sd)<0) {
if(doAdditionalProcessingAndDropAA(p, r, sd, retargetcount)<0) {
delete r;
return 0;
}
Expand Down
2 changes: 1 addition & 1 deletion pdns/packethandler.hh
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ private:
bool addDNSKEY(DNSPacket *p, DNSPacket *r, const SOAData& sd);
bool addNSEC3PARAM(DNSPacket *p, DNSPacket *r, const SOAData& sd);
bool getTLDAuth(DNSPacket *p, SOAData *sd, const string &target, int *zoneId);
int doAdditionalProcessingAndDropAA(DNSPacket *p, DNSPacket *r, const SOAData& sd);
int doAdditionalProcessingAndDropAA(DNSPacket *p, DNSPacket *r, const SOAData& sd, bool retargeted);
bool doDNSSECProcessing(DNSPacket* p, DNSPacket *r);
void addNSECX(DNSPacket *p, DNSPacket* r, const string &target, const string &wildcard, const std::string &auth, int mode);
void addNSEC(DNSPacket *p, DNSPacket* r, const string &target, const string &wildcard, const std::string& auth, int mode);
Expand Down
2 changes: 1 addition & 1 deletion regression-tests/tests/cname-to-referral/expected_result
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
0 server1.example.com. IN CNAME 120 server1.france.example.com.
1 france.example.com. IN NS 120 ns1.otherprovider.net.
1 france.example.com. IN NS 120 ns2.otherprovider.net.
Rcode: 0, RD: 0, QR: 1, TC: 0, AA: 0, opcode: 0
Rcode: 0, RD: 0, QR: 1, TC: 0, AA: 1, opcode: 0
Reply to question for qname='server1.example.com.', qtype=A

0 comments on commit 95c7970

Please sign in to comment.