]> granicus.if.org Git - pdns/commitdiff
Leave bitshifting Extended RCode to addOpt
authorPieter Lexis <pieter.lexis@powerdns.com>
Wed, 21 Mar 2018 15:17:54 +0000 (16:17 +0100)
committerPieter Lexis <pieter.lexis@powerdns.com>
Wed, 30 May 2018 08:00:51 +0000 (10:00 +0200)
pdns/dnswriter.cc
pdns/packethandler.cc

index d788217e8c7cb4c5ab89bc19d3af702d18a79813..4f7656f60034e2c8a39df0127e2b87b230547bde 100644 (file)
@@ -110,7 +110,7 @@ void DNSPacketWriter::addOpt(uint16_t udpsize, int extRCode, int Z, const vector
    *        indicates that an unextended RCODE is in use (values 0 through 15).
    */
   stuff.extRCode = extRCode>>4;
-  if (extRCode != 0) { // As this trumps the existing RCODE
+  if (extRCode > 15) { // As this trumps the existing RCODE
     getHeader()->rcode = extRCode;
   }
 
index 9e2ca7e89e8bda857a50cc35f58ea404a7108510..415e283430d3303b86fdea0d54be5e0487dbf91a 100644 (file)
@@ -1145,8 +1145,9 @@ DNSPacket *PacketHandler::doQuestion(DNSPacket *p)
 
   if (p->hasEDNS() && p->getEDNSVersion() > 0) {
     r = p->replyPacket();
-    r->setRcode(16 & 0xF);
-    r->setEDNSRcode((16 & 0xFFF0)>>4); // set rcode to BADVERS
+
+    // PacketWriter::addOpt will take care of setting this correctly in the packet
+    r->setEDNSRcode(ERCode::BADVERS);
     return r;
   }