]> granicus.if.org Git - pdns/commitdiff
don't send covering nsec records for direct nsec queries
authorKees Monshouwer <mind04@monshouwer.org>
Thu, 28 Jul 2016 13:17:39 +0000 (15:17 +0200)
committermind04 <mind04@monshouwer.org>
Thu, 28 Jul 2016 13:17:39 +0000 (15:17 +0200)
pdns/packethandler.cc

index 90a66d2790e675c939a26982451ce77a826b3cb8..843d275167c709a3ab66a0d6e707ba10dfc94fe0 100644 (file)
@@ -700,7 +700,8 @@ void PacketHandler::addNSEC(DNSPacket *p, DNSPacket *r, const DNSName& target, c
 
   DNSName before,after;
   sd.db->getBeforeAndAfterNames(sd.domain_id, auth, target, before, after);
-  emitNSEC(r, sd, before, after, mode);
+  if (mode != 5 || before == target)
+    emitNSEC(r, sd, before, after, mode);
 
   if (mode == 2 || mode == 4) {
     // wildcard NO-DATA or wildcard denial
@@ -1330,7 +1331,8 @@ DNSPacket *PacketHandler::questionOrRecurse(DNSPacket *p, bool *shouldRecurse)
     // this TRUMPS a cname!
     if(p->qtype.getCode() == QType::NSEC && d_dk.isSecuredZone(sd.qname) && !d_dk.getNSEC3PARAM(sd.qname, 0)) {
       addNSEC(p, r, target, DNSName(), sd.qname, 5);
-      goto sendit;
+      if (!r->isEmpty())
+        goto sendit;
     }
 
     // this TRUMPS a cname!