else
remote = P->getRemote().toString();
L << Logger::Notice<<"Remote "<< remote <<" wants '" << P->qdomain<<"|"<<P->qtype.getName() <<
- "', do = " <<P->d_dnssecOk <<", bufsize = "<< P->getMaxReplyLen()<<": ";
+ "', do = " <<P->d_dnssecOk <<", bufsize = "<< P->getMaxReplyLen();
+ if(P->d_ednsRawPacketSizeLimit > 0 && P->getMaxReplyLen() != (unsigned int)P->d_ednsRawPacketSizeLimit)
+ L<<" ("<<P->d_ednsRawPacketSizeLimit<<")";
+ L<<": ";
}
if((P->d.opcode != Opcode::Notify && P->d.opcode != Opcode::Update) && P->couldBeCached()) {
d_tsigtimersonly = orig.d_tsigtimersonly;
d_trc = orig.d_trc;
d_tsigsecret = orig.d_tsigsecret;
-
+ d_ednsRawPacketSizeLimit = orig.d_ednsRawPacketSizeLimit;
d_havetsig = orig.d_havetsig;
d_wrapped=orig.d_wrapped;
d_havetsig = mdp.getTSIGPos();
d_haveednssubnet = false;
d_haveednssection = false;
-
if(getEDNSOpts(mdp, &edo)) {
d_haveednssection=true;
/* rfc6891 6.2.3:
"Values lower than 512 MUST be treated as equal to 512."
*/
+ d_ednsRawPacketSizeLimit=edo.d_packetsize;
d_maxreplylen=std::min(std::max(static_cast<uint16_t>(512), edo.d_packetsize), s_udpTruncationThreshold);
// cerr<<edo.d_Z<<endl;
if(edo.d_Z & EDNSOpts::DNSSECOK)
}
d_ednsversion = edo.d_version;
d_ednsrcode = edo.d_extRCode;
- }
+ }
else {
d_maxreplylen=512;
+ d_ednsRawPacketSizeLimit=-1;
}
memcpy((void *)&d,(const void *)d_rawpacket.c_str(),12);
bool checkForCorrectTSIG(UeberBackend* B, DNSName* keyname, string* secret, TSIGRecordContent* trc) const;
static bool s_doEDNSSubnetProcessing;
- static uint16_t s_udpTruncationThreshold; //2
+ static uint16_t s_udpTruncationThreshold;
+ int d_ednsRawPacketSizeLimit; // only used for Lua record
private:
void pasteQ(const char *question, int length); //!< set the question of this packet, useful for crafting replies
EDNSSubnetOpts d_eso;
int d_maxreplylen;
+
uint8_t d_ednsversion;
// WARNING! This is really 12 bits
uint16_t d_ednsrcode;