From: Bert Hubert Date: Sat, 8 May 2010 20:18:46 +0000 (+0000) Subject: rectify tabs/spaces, plus clarify debugging output, plus stop NS/Wildcard traversal... X-Git-Tag: rec-3.3~103 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=82cc1f7193cc57da5fb3d0edb8b7bb9a311d46b6;p=pdns rectify tabs/spaces, plus clarify debugging output, plus stop NS/Wildcard traversal at zone edge git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@1599 d19b8d6e-7fed-0310-83ef-9ca221ded41b --- diff --git a/pdns/packethandler.cc b/pdns/packethandler.cc index ea5808a40..41b5deb4e 100644 --- a/pdns/packethandler.cc +++ b/pdns/packethandler.cc @@ -286,10 +286,12 @@ vector PacketHandler::getBestReferralNS(DNSPacket *p, SOAData DNSResourceRecord rr; string subdomain(target); do { + if(subdomain == sd.qname) // stop at SOA + break; B.lookup(QType(QType::NS), subdomain, p, sd.domain_id); while(B.get(rr)) { if(!rr.auth) - ret.push_back(rr); + ret.push_back(rr); } if(!ret.empty()) return ret; @@ -306,11 +308,14 @@ vector PacketHandler::getBestWildcard(DNSPacket *p, SOAData& B.lookup(QType(QType::ANY), "*."+subdomain, p, sd.domain_id); while(B.get(rr)) { if(rr.qtype == p->qtype ||rr.qtype.getCode() == QType::CNAME ) - ret.push_back(rr); + ret.push_back(rr); } if(!ret.empty()) return ret; + + if(subdomain == sd.qname) // stop at SOA + break; } return ret; @@ -483,8 +488,8 @@ void PacketHandler::addNSEC(DNSPacket *p, DNSPacket *r, const string& target, co string before,after; cerr<<"Calling getBeforeandAfter!"<getBeforeAndAfterNames(sd.domain_id, target, before, after); - cerr<<"Done calling"<getBeforeAndAfterNames(sd.domain_id, auth, target, before, after); + cerr<<"Done calling, before='"<getBeforeAndAfterNames(sd.domain_id, auth, before, after); + sd.db->getBeforeAndAfterNames(sd.domain_id, auth, auth, before, after); emitNSEC(auth, after, auth, r, mode); } @@ -809,7 +814,7 @@ void PacketHandler::synthesiseRRSIGs(DNSPacket* p, DNSPacket* r) getAuth(p, &sd, p->qdomain, 0); string before,after; - sd.db->getBeforeAndAfterNames(sd.domain_id, p->qdomain, before, after); + sd.db->getBeforeAndAfterNames(sd.domain_id, sd.qname, p->qdomain, before, after); nrc.d_next=after; @@ -1050,13 +1055,13 @@ DNSPacket *PacketHandler::questionOrRecurse(DNSPacket *p, bool *shouldRecurse) if(!getAuth(p, &sd, target, 0)) { r->setA(false); if(::arg().mustDo("send-root-referral")) { - DLOG(L<setRcode(RCode::ServFail); // 'sorry' - } + DLOG(L<setRcode(RCode::ServFail); // 'sorry' + } goto sendit; } @@ -1092,12 +1097,12 @@ DNSPacket *PacketHandler::questionOrRecurse(DNSPacket *p, bool *shouldRecurse) while(B.get(rr)) { if((p->qtype.getCode() == QType::ANY || rr.qtype == p->qtype) && rr.auth) - weDone=1; + weDone=1; if((rr.qtype == p->qtype || rr.qtype.getCode() == QType::NS) && !rr.auth) - weHaveUnauth=1; + weHaveUnauth=1; if(rr.qtype.getCode() == QType::CNAME && p->qtype.getCode() != QType::CNAME) - weRedirected=1; + weRedirected=1; rrset.push_back(rr); } @@ -1105,55 +1110,55 @@ DNSPacket *PacketHandler::questionOrRecurse(DNSPacket *p, bool *shouldRecurse) if(rrset.empty()) { // try wildcards, and if they don't work, go look for NS records - cerr<<"Found nothing in the ANY, but let's try the NS set"<addRecord(rr); - target = rr.content; - retargetcount++; - goto retargeted; - } + if(rr.qtype.getCode() == QType::CNAME) { + r->addRecord(rr); + target = rr.content; + retargetcount++; + goto retargeted; } + } - } + } else if(weDone) { BOOST_FOREACH(rr, rrset) { - if((p->qtype.getCode() == QType::ANY || rr.qtype == p->qtype) && rr.auth) + if((p->qtype.getCode() == QType::ANY || rr.qtype == p->qtype) && rr.auth) r->addRecord(rr); - } + } if(p->qtype.getCode() == QType::ANY) { - completeANYRecords(p, r, sd, target); - } + completeANYRecords(p, r, sd, target); + } goto sendit; - } + } else if(weHaveUnauth) { cerr<<"Have unauth data, so need to hunt for best NS records"<