From: Bert Hubert Date: Wed, 12 Jan 2011 19:27:43 +0000 (+0000) Subject: make packetcache further aware of difference between tcp and udp, so we don't serve... X-Git-Tag: auth-3.0~367 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9a8a1c8b056b7c3b3945de8ea2aa70e70a7c4259;p=pdns make packetcache further aware of difference between tcp and udp, so we don't serve truncated packets over tcp git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@1880 d19b8d6e-7fed-0310-83ef-9ca221ded41b --- diff --git a/pdns/packetcache.cc b/pdns/packetcache.cc index 250932d6a..c75ce9433 100644 --- a/pdns/packetcache.cc +++ b/pdns/packetcache.cc @@ -84,7 +84,8 @@ int PacketCache::get(DNSPacket *p, DNSPacket *cached) return 0; } - haveSomething=getEntryLocked(p->qdomain, p->qtype, PacketCache::PACKETCACHE, value, -1, packetMeritsRecursion, p->getMaxReplyLen(), p->d_dnssecOk); + uint16_t maxReplyLen = p->d_tcp ? 0xffff : p->getMaxReplyLen(); + haveSomething=getEntryLocked(p->qdomain, p->qtype, PacketCache::PACKETCACHE, value, -1, packetMeritsRecursion, maxReplyLen, p->d_dnssecOk); } if(haveSomething) { (*d_statnumhit)++; @@ -122,9 +123,9 @@ void PacketCache::insert(DNSPacket *q, DNSPacket *r) return; bool packetMeritsRecursion=d_doRecursion && q->d.rd; - + uint16_t maxReplyLen = q->d_tcp ? 0xffff : q->getMaxReplyLen(); insert(q->qdomain, q->qtype, PacketCache::PACKETCACHE, r->getString(), packetMeritsRecursion ? d_recursivettl : d_ttl, -1, packetMeritsRecursion, - q->getMaxReplyLen(), q->d_dnssecOk); + maxReplyLen, q->d_dnssecOk); } // universal key appears to be: qname, qtype, kind (packet, query cache), optionally zoneid, meritsRecursion @@ -138,7 +139,7 @@ void PacketCache::insert(const string &qname, const QType& qtype, CacheEntryType if(!ttl) return; - // cerr<<"Inserting qname '"<ttd > now); diff --git a/pdns/packethandler.cc b/pdns/packethandler.cc index ef6efbae7..efe61c478 100644 --- a/pdns/packethandler.cc +++ b/pdns/packethandler.cc @@ -1344,9 +1344,7 @@ DNSPacket *PacketHandler::questionOrRecurse(DNSPacket *p, bool *shouldRecurse) // doDNSSECProcessing(p, r); r->wrapup(&d_dk); // needed for inserting in cache - if(!p->d_tcp) { - PC.insert(p, r); // in the packet cache - } + PC.insert(p, r); // in the packet cache } catch(DBException &e) { L< reply; shared_ptr cached= shared_ptr(new DNSPacket); if(logDNSDetails) - L << Logger::Notice<<"Remote "<< packet->remote.toString() <<" wants '" << packet->qdomain<<"|"<qtype.getName() << + L << Logger::Notice<<"TCP Remote "<< packet->remote.toString() <<" wants '" << packet->qdomain<<"|"<qtype.getName() << "', do = " <d_dnssecOk <<", bufsize = "<< packet->getMaxReplyLen()<<": ";