bool DNSPacket::couldBeCached()
{
- return d_ednsping.empty() && !d_wantsnsid;
+ return d_ednsping.empty() && !d_wantsnsid && qclass==QClass::IN;
}
/** Must be called before attempting to access getData(). This function stuffs all resource
d_wrapped=true;
vector<uint8_t> packet;
- DNSPacketWriter pw(packet, qdomain, qtype.getCode(), 1);
+ DNSPacketWriter pw(packet, qdomain, qtype.getCode(), qclass);
pw.getHeader()->rcode=d.rcode;
pw.getHeader()->aa=d.aa;
if(pos->auth)
toSign.push_back(drc);
}
- pw.startRecord(pos->qname, pos->qtype.getCode(), pos->ttl, 1, (DNSPacketWriter::Place)pos->d_place);
+
+ pw.startRecord(pos->qname, pos->qtype.getCode(), pos->ttl, pos->qclass, (DNSPacketWriter::Place)pos->d_place);
drc->toPacket(pw);
r->d_tcp = d_tcp;
r->qdomain = qdomain;
r->qtype = qtype;
+ r->qclass = qclass;
r->d_maxreplylen = d_maxreplylen;
r->d_ednsping = d_ednsping;
r->d_wantsnsid = d_wantsnsid;
return; // do not try to cache packets with multiple questions
}
+ if(q->qclass != QClass::IN) // we only cache the INternet
+ return;
+
bool packetMeritsRecursion=d_doRecursion && q->d.rd;
insert(q->qdomain, q->qtype, PacketCache::PACKETCACHE, r->getString(), packetMeritsRecursion ? d_recursivettl : d_ttl, -1, packetMeritsRecursion);
// modes: anonymous, powerdns only, full, spoofed
const string mode=::arg()["version-string"];
- if(p->qtype.getCode()==QType::TXT && target=="version.bind") {// TXT
+
+ if(p->qclass == QClass::CHAOS && p->qtype.getCode()==QType::TXT && target=="version.bind") {// TXT
if(mode.empty() || mode=="full")
rr.content="Served by POWERDNS "VERSION" $Id$";
else if(mode=="anonymous") {
rr.ttl=5;
rr.qname=target;
- rr.qtype=QType::TXT; // TXT
+ rr.qtype=QType::TXT;
+ rr.qclass=QClass::CHAOS;
r->addRecord(rr);
return 1;
if(p->qclass==255) // any class query
r->setA(false);
- else if(p->qclass!=1) // we only know about IN, so we don't find anything
+ else if(p->qclass != QClass::IN) // we only know about IN, so we don't find anything
goto sendit;
retargeted:;
rrset.push_back(rr);
}
- cerr<<"After first ANY query: weDone="<<weDone<<", weHaveUnauth="<<weHaveUnauth<<", weRedirected="<<weRedirected<<endl;
+ //cerr<<"After first ANY query: weDone="<<weDone<<", weHaveUnauth="<<weHaveUnauth<<", weRedirected="<<weRedirected<<endl;
if(rrset.empty()) {
// try wildcards, and if they don't work, go look for NS records
static bool uninit;
};
-
+struct QClass
+{
+ enum QClassEnum {IN=1, CHAOS=3};
+};
#endif