s.hoogeveen@nederhost.nl. Additional help in debugging by Totaalnet, Miek
Gieben en Roland van Rijswijk.
This fixes presigned wildcard record signatures. (r2674)
git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@2676
d19b8d6e-7fed-0310-83ef-
9ca221ded41b
return addKey(name, true, algorithm);
}
-bool DNSSECKeeper::getPreRRSIGs(DNSBackend& db, const std::string& signer, const std::string& qname, const QType& qtype,
+bool DNSSECKeeper::getPreRRSIGs(DNSBackend& db, const std::string& signer, const std::string& qname,
+ const std::string& wildcardname, const QType& qtype,
DNSPacketWriter::Place signPlace, vector<DNSResourceRecord>& rrsigs)
{
- // cerr<<"Doing DB lookup for precomputed RRSIGs for '"<<qname<<"'"<<endl;
- db.lookup(QType(QType::RRSIG), qname);
+ // cerr<<"Doing DB lookup for precomputed RRSIGs for '"<<(wildcardname.empty() ? qname : wildcardname)<<"'"<<endl;
+ db.lookup(QType(QType::RRSIG), wildcardname.empty() ? qname : wildcardname);
DNSResourceRecord rr;
while(db.get(rr)) {
// cerr<<"Considering for '"<<qtype.getName()<<"' RRSIG '"<<rr.content<<"'\n";
if(boost::starts_with(rr.content, qtype.getName()+" ")) {
// cerr<<"Got it"<<endl;
+ if (!wildcardname.empty())
+ rr.qname = qname;
rr.d_place = (DNSResourceRecord::Place)signPlace;
rrsigs.push_back(rr);
}
void setNSEC3PARAM(const std::string& zname, const NSEC3PARAMRecordContent& n3p, const bool& narrow=false);
void unsetNSEC3PARAM(const std::string& zname);
void clearCaches(const std::string& name);
- bool getPreRRSIGs(DNSBackend& db, const std::string& signer, const std::string& qname, const QType& qtype, DNSPacketWriter::Place, vector<DNSResourceRecord>& rrsigs);
+ bool getPreRRSIGs(DNSBackend& db, const std::string& signer, const std::string& qname, const std::string& wildcardname, const QType& qtype, DNSPacketWriter::Place, vector<DNSResourceRecord>& rrsigs);
bool isPresigned(const std::string& zname);
void setPresigned(const std::string& zname);
void unsetPresigned(const std::string& zname);
vector<RRSIGRecordContent> rrcs;
if(dk.isPresigned(signer)) {
//cerr<<"Doing presignatures"<<endl;
- dk.getPreRRSIGs(db, signer, signQName, QType(signQType), signPlace, outsigned); // does it all
+ dk.getPreRRSIGs(db, signer, signQName, wildcardname, QType(signQType), signPlace, outsigned); // does it all
}
else {
if(getRRSIGsForRRSET(dk, signer, wildcardname.empty() ? signQName : wildcardname, signQType, signTTL, toSign, rrcs, signQType == QType::DNSKEY) < 0) {