]> granicus.if.org Git - pdns/commitdiff
prepare getBeforeAndAfter for NSEC3 usage..
authorBert Hubert <bert.hubert@netherlabs.nl>
Sun, 9 May 2010 07:44:40 +0000 (07:44 +0000)
committerBert Hubert <bert.hubert@netherlabs.nl>
Sun, 9 May 2010 07:44:40 +0000 (07:44 +0000)
git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@1605 d19b8d6e-7fed-0310-83ef-9ca221ded41b

pdns/backends/bind/bindbackend2.cc
pdns/backends/bind/bindbackend2.hh
pdns/backends/gsql/gsqlbackend.cc
pdns/backends/gsql/gsqlbackend.hh
pdns/dnsbackend.cc
pdns/dnsbackend.hh
pdns/misc.cc
pdns/misc.hh

index 0d857349765289acc93e32fe07b8ab71a30ec924..a7ef5b2f044fdc8b50572a1fed57de836aa60226 100644 (file)
@@ -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> 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: '"<<domain<<"', search is for: '"<<lname<<"'"<<endl;
@@ -819,7 +807,7 @@ bool Bind2Backend::getBeforeAndAfterNames(uint32_t id, const std::string& zonena
   }
   if(iter != bbd.d_records->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!"<<endl;
@@ -837,7 +825,7 @@ bool Bind2Backend::getBeforeAndAfterNames(uint32_t id, const std::string& zonena
     after = dotConcat(labelReverse(bbd.d_records->begin()->qname), bbd.d_name);
   } else {
     cerr<<"\tFound: '"<<iter->qname<<"'"<<endl;
-    after = dotConcat(labelReverse((iter)->qname), bbd.d_name);
+    after = (iter)->qname;
   }
 
   cerr<<"Before: '"<<before<<"', after: '"<<after<<"'\n";
index cbe11b6ad35f4acfeecfdc184bb8b1f3bb3b5c80..baf1a2d6ba74c968a8ba4f7c008e0ffe658d8109 100644 (file)
@@ -108,7 +108,7 @@ public:
   void getUpdatedMasters(vector<DomainInfo> *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 &);
index 3505322281e80549e35a894c9b649e0d785e813e..c34cfe923902a1a9e80a72cbb1e0029c56c303d0 100644 (file)
@@ -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="<<id<<", qname="<<qname<<endl;
   string lcqname=toLower(qname);
 
-  if(lcqname == zonename)  // XXX FIXME NEED A CALL THAT DOES THIS RIGHT
-    lcqname.clear();
-  else 
-    lcqname = lcqname.substr(0, lcqname.size() - zonename.length() - 1); // strip domain name
-  
-  lcqname=labelReverse(lcqname);
-
   SSql::row_t row;
 
   char output[1024];
@@ -276,16 +270,16 @@ bool GSQLBackend::getBeforeAndAfterNames(uint32_t id, const std::string& zonenam
   
   d_db->doQuery(output);
   while(d_db->getRow(row)) {
-    after=labelReverse(row[0])+"."+zonename;
+    after=row[0];
   }
 
   snprintf(output, sizeof(output)-1, d_beforeOrderQuery.c_str(), sqlEscape(lcqname).c_str(), id);
   d_db->doQuery(output);
   while(d_db->getRow(row)) {
-    before=labelReverse(row[0])+"."+zonename;
+    before=row[0];
   }
 
-  return false;
+  return true;
 }
 
 
index 55b6836cf1fab03810115acfabcdc395c38c0dda..56b88c568e38f15b121e7b308094af628b981daa 100644 (file)
@@ -39,7 +39,7 @@ public:
   void getUpdatedMasters(vector<DomainInfo> *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:
index 5b54f1fe7df664e77852c3e513c00f06b563932c..ad2cdc4c7f2b624788319568dbefd20499e82f65 100644 (file)
@@ -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;
+}
index edebb3d4dd76fea783301a15ed4c26d6a6493715..d23637093eb3042de52f1f5b6371a985fdf131a6 100644 (file)
@@ -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!"<<std::endl;
+    std::cerr<<"Default beforeAndAfterAbsolute called!"<<std::endl;
     return false;
   }
 
+  bool getBeforeAndAfterNames(uint32_t id, const std::string& zonename, const std::string& qname, std::string& before, std::string& after);
+
   virtual bool updateDNSSECOrderAndAuth(uint32_t domain_id, const std::string& zonename, const std::string& qname, bool auth)
   {
     return false;
index a85887e71c03f11494a3f02ab12e20f023d13bbe..586f4a8d55495019bfcbf7ec10dee465bf2b0b9c 100644 (file)
@@ -657,3 +657,11 @@ string makeRelative(const std::string& fqdn, const std::string& zone)
     return fqdn.substr(0, fqdn.size() - zone.length() - 1); // strip domain name
   return "";
 }
+
+string dotConcat(const std::string& a, const std::string &b)
+{
+  if(a.empty() || b.empty())
+    return a+b;
+  else 
+    return a+"."+b;
+}
index b81c976ebebd9d2d9cf4b3ee66cde625c893ecea..010c21a11de168b214641a2f6a7570e4034f3c59 100644 (file)
@@ -382,5 +382,6 @@ string stripDot(const string& dom);
 void seedRandom(const string& source);
 string makeRelative(const std::string& fqdn, const std::string& zone);
 string labelReverse(const std::string& qname);
+std::string dotConcat(const std::string& a, const std::string &b);
 
 #endif