From: Bert Hubert Date: Sun, 9 May 2010 07:44:40 +0000 (+0000) Subject: prepare getBeforeAndAfter for NSEC3 usage.. X-Git-Tag: rec-3.3~97 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=75943e62ad4d21389fca99c6e1d543443d190d4d;p=pdns prepare getBeforeAndAfter for NSEC3 usage.. git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@1605 d19b8d6e-7fed-0310-83ef-9ca221ded41b --- diff --git a/pdns/backends/bind/bindbackend2.cc b/pdns/backends/bind/bindbackend2.cc index 0d8573497..a7ef5b2f0 100644 --- a/pdns/backends/bind/bindbackend2.cc +++ b/pdns/backends/bind/bindbackend2.cc @@ -781,26 +781,14 @@ void Bind2Backend::queueReload(BB2DomainInfo *bbd) } } -string dotConcat(const std::string& a, const std::string &b) -{ - if(a.empty() || b.empty()) - return a+b; - else - return a+"."+b; -} -bool Bind2Backend::getBeforeAndAfterNames(uint32_t id, const std::string& zonename, const std::string& qname, std::string& before, std::string& after) + +bool Bind2Backend::getBeforeAndAfterNamesAbsolute(uint32_t id, const std::string& qname, std::string& before, std::string& after) { shared_ptr state = s_state; BB2DomainInfo& bbd = state->id_zone_map[id]; string domain=toLower(qname); - - if(domain == bbd.d_name) - domain.clear(); - else - domain = domain.substr(0, domain.size() - bbd.d_name.length() - 1); // strip domain name - string lname = labelReverse(domain); cout<<"starting lower bound for: '"<begin()) { cerr<<"\tFound: '"<<(iter-1)->qname<<"', auth = "<<(iter-1)->auth<<"\n"; - before = dotConcat(labelReverse((iter - 1)->qname), bbd.d_name); + before = (iter - 1)->qname; } else { cerr<<"PANIC! Wanted something before the first record!"<begin()->qname), bbd.d_name); } else { cerr<<"\tFound: '"<qname<<"'"<qname), bbd.d_name); + after = (iter)->qname; } cerr<<"Before: '"< *changedDomains); bool getDomainInfo(const string &domain, DomainInfo &di); time_t getCtime(const string &fname); - virtual bool getBeforeAndAfterNames(uint32_t id, const std::string& zname, const std::string& qname, std::string& before, std::string& after); + virtual bool getBeforeAndAfterNamesAbsolute(uint32_t id, const std::string& qname, std::string& before, std::string& after); void lookup(const QType &, const string &qdomain, DNSPacket *p=0, int zoneId=-1); bool list(const string &target, int id); bool get(DNSResourceRecord &); diff --git a/pdns/backends/gsql/gsqlbackend.cc b/pdns/backends/gsql/gsqlbackend.cc index 350532228..c34cfe923 100644 --- a/pdns/backends/gsql/gsqlbackend.cc +++ b/pdns/backends/gsql/gsqlbackend.cc @@ -257,18 +257,12 @@ bool GSQLBackend::updateDNSSECOrderAndAuth(uint32_t domain_id, const std::string return true; } -bool GSQLBackend::getBeforeAndAfterNames(uint32_t id, const std::string& zonename, const std::string& qname, std::string& before, std::string& after) + +bool GSQLBackend::getBeforeAndAfterNamesAbsolute(uint32_t id, const std::string& qname, std::string& before, std::string& after) { cerr<<"gsql before/after called for id="<doQuery(output); while(d_db->getRow(row)) { - before=labelReverse(row[0])+"."+zonename; + before=row[0]; } - return false; + return true; } diff --git a/pdns/backends/gsql/gsqlbackend.hh b/pdns/backends/gsql/gsqlbackend.hh index 55b6836cf..56b88c568 100644 --- a/pdns/backends/gsql/gsqlbackend.hh +++ b/pdns/backends/gsql/gsqlbackend.hh @@ -39,7 +39,7 @@ public: void getUpdatedMasters(vector *updatedDomains); bool getDomainInfo(const string &domain, DomainInfo &di); void setNotified(uint32_t domain_id, uint32_t serial); - bool getBeforeAndAfterNames(uint32_t id, const std::string& zname, const std::string& qname, std::string& before, std::string& after); + virtual bool getBeforeAndAfterNamesAbsolute(uint32_t id, const std::string& qname, std::string& before, std::string& after); bool updateDNSSECOrderAndAuth(uint32_t domain_id, const std::string& zonename, const std::string& qname, bool auth); private: diff --git a/pdns/dnsbackend.cc b/pdns/dnsbackend.cc index 5b54f1fe7..ad2cdc4c7 100644 --- a/pdns/dnsbackend.cc +++ b/pdns/dnsbackend.cc @@ -254,3 +254,15 @@ bool DNSBackend::getSOA(const string &domain, SOAData &sd, DNSPacket *p) return true; } +bool DNSBackend::getBeforeAndAfterNames(uint32_t id, const std::string& zonename, const std::string& qname, std::string& before, std::string& after) +{ + string lcqname=toLower(qname); + lcqname=makeRelative(qname, zonename); + + lcqname=labelReverse(lcqname); + bool ret = this->getBeforeAndAfterNamesAbsolute(id, lcqname, before, after); + + before=dotConcat(labelReverse(before), zonename); + after=dotConcat(labelReverse(after), zonename); + return ret; +} diff --git a/pdns/dnsbackend.hh b/pdns/dnsbackend.hh index edebb3d4d..d23637093 100644 --- a/pdns/dnsbackend.hh +++ b/pdns/dnsbackend.hh @@ -74,12 +74,14 @@ public: virtual void lookup(const QType &qtype, const string &qdomain, DNSPacket *pkt_p=0, int zoneId=-1)=0; virtual bool get(DNSResourceRecord &)=0; //!< retrieves one DNSResource record, returns false if no more were available - virtual bool getBeforeAndAfterNames(uint32_t id, const std::string& zonename, const std::string& qname, std::string& before, std::string& after) + virtual bool getBeforeAndAfterNamesAbsolute(uint32_t id, const std::string& qname, std::string& before, std::string& after) { - std::cerr<<"Default beforeAndAfter called!"<