Changeset 1877

Show
Ignore:
Timestamp:
01/12/11 17:30:48 (2 years ago)
Author:
ahu
Message:

don't interleave DNSBackend::lookup and ::getSOA!
Plus don't add NSEC to the RRSIG set for explicit RRSIG queries for NSEC3 zones.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/pdns/pdns/packethandler.cc

    r1868 r1877  
    603603   
    604604  getNSEC3Hashes(narrow, sd.db, sd.domain_id,  hashed, false, unhashed, before, after);  
    605   cerr<<"Done calling for closest encloser, before='"<<toBase32Hex(before)<<"', after='"<<toBase32Hex(after)<<"'"<<endl; 
     605  cerr<<"Done calling for closest encloser, before='"<<toBase32Hex(before)<<"', after='"<<toBase32Hex(after)<<"', unhashed: '"<<unhashed<<"'"<<endl; 
    606606  emitNSEC3(ns3rc, sd, unhashed, before, after, target, r, mode); 
    607607 
     
    610610  hashed=hashQNameWithSalt(ns3rc.d_iterations, ns3rc.d_salt, unhashed); 
    611611  getNSEC3Hashes(narrow, sd.db,sd.domain_id,  hashed, true, unhashed, before, after);  
    612   cerr<<"Done calling for main, before='"<<toBase32Hex(before)<<"', after='"<<toBase32Hex(after)<<"'"<<endl; 
     612  cerr<<"Done calling for main, before='"<<toBase32Hex(before)<<"', after='"<<toBase32Hex(after)<<"', unhashed: '"<<unhashed<<"'"<<endl; 
    613613  emitNSEC3( ns3rc, sd, unhashed, before, after, target, r, mode); 
    614614   
     
    618618   
    619619  getNSEC3Hashes(narrow, sd.db, sd.domain_id,  hashed, true, unhashed, before, after);  
    620   cerr<<"Done calling for '*', before='"<<toBase32Hex(before)<<"', after='"<<toBase32Hex(after)<<"'"<<endl; 
     620  cerr<<"Done calling for '*', before='"<<toBase32Hex(before)<<"', after='"<<toBase32Hex(after)<<"', unhashed: '"<<unhashed<<"'"<<endl; 
    621621  emitNSEC3( ns3rc, sd, unhashed, before, after, target, r, mode); 
    622622} 
     
    928928{ 
    929929  cerr<<"Need to fake up the RRSIGs if someone asked for them explicitly"<<endl; 
    930   B.lookup(QType(QType::ANY), p->qdomain, p); 
    931    
    932930  typedef map<uint16_t, vector<shared_ptr<DNSRecordContent> > > records_t; 
    933931  records_t records; 
     
    944942 
    945943  rr.ttl=sd.default_ttl; 
     944  B.lookup(QType(QType::ANY), p->qdomain, p); 
    946945 
    947946  while(B.get(rr)) { 
     
    964963    nrc.d_set.insert(rr.qtype.getCode()); 
    965964  } 
    966  
    967   // now get the NSEC too (since we must sign it!) 
    968   string before,after; 
    969   sd.db->getBeforeAndAfterNames(sd.domain_id, sd.qname, p->qdomain, before, after);  
    970  
    971   nrc.d_next=after; 
    972  
    973   rr.qname=p->qdomain; 
    974   // rr.ttl is already set.. we hope 
    975   rr.qtype=QType::NSEC; 
    976   rr.content=nrc.getZoneRepresentation(); 
    977  
    978   records[QType::NSEC].push_back(shared_ptr<DNSRecordContent>(DNSRecordContent::mastermake(rr.qtype.getCode(), 1, rr.content))); 
    979  
    980   // ok, the NSEC is in.. 
    981  
     965  bool narrow; 
     966  NSEC3PARAMRecordContent ns3pr; 
     967  bool doNSEC3= d_dk.getNSEC3PARAM(sd.qname, &ns3pr, &narrow); 
     968  if(doNSEC3) { 
     969    cerr<<"We don't yet add NSEC3 to explicit RRSIG queries correctly yet! (narrow="<<narrow<<")\n"; 
     970  } 
     971  else { 
     972    // now get the NSEC too (since we must sign it!) 
     973    string before,after; 
     974    sd.db->getBeforeAndAfterNames(sd.domain_id, sd.qname, p->qdomain, before, after);  
     975   
     976    nrc.d_next=after; 
     977   
     978    rr.qname=p->qdomain; 
     979    // rr.ttl is already set.. we hope 
     980    rr.qtype=QType::NSEC; 
     981    rr.content=nrc.getZoneRepresentation(); 
     982    records[QType::NSEC].push_back(shared_ptr<DNSRecordContent>(DNSRecordContent::mastermake(rr.qtype.getCode(), 1, rr.content))); 
     983   
     984    // ok, the NSEC is in.. 
     985  } 
    982986  cerr<<"Have "<<records.size()<<" rrsets to sign"<<endl; 
    983987