}
-void PacketHandler::emitNSEC(const DNSName& begin, const DNSName& end, const DNSName& toNSEC, const SOAData& sd, DNSPacket *r, int mode)
+void PacketHandler::emitNSEC(DNSPacket *r, const SOAData& sd, const DNSName& name, const DNSName& next, int mode)
{
- // cerr<<"We should emit '"<<begin<<"' - ('"<<toNSEC<<"') - '"<<end<<"'"<<endl;
NSECRecordContent nrc;
- nrc.d_set.insert(QType::RRSIG);
+ nrc.d_next = next;
+
nrc.d_set.insert(QType::NSEC);
- if(pdns_iequals(sd.qname, begin)) {
- nrc.d_set.insert(QType::SOA);
+ nrc.d_set.insert(QType::RRSIG);
+ if(sd.qname == name)
nrc.d_set.insert(QType::DNSKEY);
- }
DNSResourceRecord rr;
- B.lookup(QType(QType::ANY), begin, NULL, sd.domain_id);
+ B.lookup(QType(QType::ANY), name, NULL, sd.domain_id);
while(B.get(rr)) {
if(rr.qtype.getCode() == QType::NS || rr.auth)
nrc.d_set.insert(rr.qtype.getCode());
}
- nrc.d_next=end;
-
- rr.qname=begin;
+ rr.qname = name;
rr.ttl = sd.default_ttl;
- rr.qtype=QType::NSEC;
- rr.content=nrc.getZoneRepresentation();
+ rr.qtype = QType::NSEC;
+ rr.content = nrc.getZoneRepresentation();
rr.d_place = (mode == 5 ) ? DNSResourceRecord::ANSWER: DNSResourceRecord::AUTHORITY;
rr.auth = true;
r->addRecord(rr);
}
+
void emitNSEC3(UeberBackend& B, const NSEC3PARAMRecordContent& ns3prc, const SOAData& sd, const DNSName& unhashed, const string& begin, const string& end, const DNSName& toNSEC3, DNSPacket *r, int mode)
{
// cerr<<"We should emit NSEC3 '"<<toBase32Hex(begin)<<"' - ('"<<toNSEC3<<"') - '"<<toBase32Hex(end)<<"' (unhashed: '"<<unhashed<<"')"<<endl;
rr.auth=false;
// if(!B.getDirectNSECx(sd.domain_id, toLower(labelReverse(makeRelative(target.toString(), auth.toString()))) /* FIXME DNSName should do this */, QType(QType::NSEC), before, rr)) {
sd.db->getBeforeAndAfterNames(sd.domain_id, auth, target, before, after);
- emitNSEC(before, after, target, sd, r, mode);
+ emitNSEC(r, sd, before, after, mode);
// } else if(rr.auth) {
// if (mode == 5)
// rr.d_place=DNSResourceRecord::ANSWER;
rr.auth=false;
if(!B.getDirectNSECx(sd.domain_id, toLower(labelReverse(makeRelative(closest.toString(), auth.toString()))), QType(QType::NSEC), before, rr)) {
sd.db->getBeforeAndAfterNames(sd.domain_id, auth, closest, before, after);
- emitNSEC(before, after, target, sd, r, mode);
+ emitNSEC(r, sd, before, after, mode);
} else if(rr.auth)
r->addRecord(rr);
}
void addNSECX(DNSPacket *p, DNSPacket* r, const DNSName &target, const DNSName &wildcard, const DNSName &auth, int mode);
void addNSEC(DNSPacket *p, DNSPacket* r, const DNSName &target, const DNSName &wildcard, const DNSName& auth, int mode);
void addNSEC3(DNSPacket *p, DNSPacket* r, const DNSName &target, const DNSName &wildcard, const DNSName& auth, const NSEC3PARAMRecordContent& nsec3param, bool narrow, int mode);
- void emitNSEC(const DNSName& before, const DNSName& after, const DNSName& toNSEC, const SOAData& sd, DNSPacket *r, int mode);
+ void emitNSEC(DNSPacket *r, const SOAData& sd, const DNSName& name, const DNSName& next, int mode);
void emitNSEC3(const NSEC3PARAMRecordContent &ns3rc, const SOAData& sd, const DNSName& unhashed, /* FIXME400 should this be DNSName? */ const string& begin, const string& end, const DNSName& toNSEC3, DNSPacket *r, int mode);
int processUpdate(DNSPacket *p);
int forwardPacket(const string &msgPrefix, DNSPacket *p, DomainInfo *di);