]> granicus.if.org Git - pdns/commitdiff
bind tests pass
authorKees Monshouwer <mind04@monshouwer.org>
Tue, 23 Jun 2015 23:45:10 +0000 (01:45 +0200)
committermind04 <mind04@monshouwer.org>
Tue, 30 Jun 2015 06:12:50 +0000 (08:12 +0200)
modules/bindbackend/bindbackend2.cc
modules/bindbackend/bindbackend2.hh
modules/bindbackend/binddnssec.cc

index 6e8afeedd97438a65a9e575ea315c224f8447318..8710219158596836a0fbf2a846e3b32ff5138fab 100644 (file)
@@ -493,7 +493,7 @@ void Bind2Backend::insertRecord(BB2DomainInfo& bb2, const DNSName &qname, const
   if(!records->empty() && bdr.qname==boost::prior(records->end())->qname)
     bdr.qname=boost::prior(records->end())->qname;
 
-  bdr.qname=bdr.qname.labelReverse();
+  bdr.qname=bdr.qname;
   bdr.qtype=qtype.getCode();
   bdr.content=content; 
   bdr.nsec3hash = hashed;
@@ -666,7 +666,7 @@ void Bind2Backend::fixupAuth(shared_ptr<recordstorage_t> records)
     if(bdr.qtype == QType::DS) // as are delegation signer records
       continue;
 
-    sqname = bdr.qname.labelReverse();
+    sqname = bdr.qname;
     
     do {
       if(sqname.empty() || sqname.isRoot()) // this is auth of course!
@@ -690,10 +690,10 @@ void Bind2Backend::doEmptyNonTerminals(BB2DomainInfo& bbd, bool nsec3zone, NSEC3
   uint32_t maxent = ::arg().asNum("max-ent-entries");
 
   for(const auto& bdr : *records)
-    qnames.insert(bdr.qname.labelReverse());
+    qnames.insert(bdr.qname);
 
   for(const auto& bdr : *records) {
-    shorter=bdr.qname.labelReverse();
+    shorter=bdr.qname;
 
     if (!bdr.auth && bdr.qtype == QType::NS)
       auth=(!nsec3zone || !ns3pr.d_flags);
@@ -886,19 +886,24 @@ void Bind2Backend::queueReloadAndStore(unsigned int id)
 bool Bind2Backend::findBeforeAndAfterUnhashed(BB2DomainInfo& bbd, const DNSName& qname, DNSName& unhashed, string& before, string& after)
 {
   shared_ptr<const recordstorage_t> records = bbd.d_records.get();
+
+//  BOOST_FOREACH(const Bind2DNSRecord& bdr, *records) {
+//    cerr<<"Hash: "<<bdr.qname.toString()<<"\t"<< (qname < bdr.qname) <<"\t"<<qname.toString()<<endl;
+//  }
+
   recordstorage_t::const_iterator iter = records->upper_bound(qname);
 
   if (before.empty()){
     //cout<<"starting before for: '"<<domain<<"'"<<endl;
     iter = records->upper_bound(qname);
 
-    while(iter == records->end() || (qname < iter->qname) || (!(iter->auth) && (!(iter->qtype == QType::NS))) || (!(iter->qtype)))
+    while(iter == records->end() || (qname.canonCompare(iter->qname)) || (!(iter->auth) && (!(iter->qtype == QType::NS))) || (!(iter->qtype)))
       iter--;
 
-    before=iter->qname.toString(" ",false);
+    before=iter->qname.labelReverse().toString(" ",false);
   }
   else {
-    before=qname.toString(" ",false);
+    before=qname.labelReverse().toString(" ",false);
   }
 
   //cerr<<"Now after"<<endl;
@@ -920,7 +925,7 @@ bool Bind2Backend::findBeforeAndAfterUnhashed(BB2DomainInfo& bbd, const DNSName&
         break;
       }
     }
-    after = (iter)->qname.toString(" ",false);
+    after = (iter)->qname.labelReverse().toString(" ",false);
   }
 
   cerr<<"Before: '"<<before<<"', after: '"<<after<<"'\n";
@@ -943,7 +948,7 @@ bool Bind2Backend::getBeforeAndAfterNamesAbsolute(uint32_t id, const std::string
     nsec3zone=getNSEC3PARAM(auth, &ns3pr);
 
   if(!nsec3zone) {
-    DNSName dqname(qname);
+    DNSName dqname = DNSName(labelReverse(qname));
     //cerr<<"in bind2backend::getBeforeAndAfterAbsolute: no nsec3 for "<<auth<<endl;
     return findBeforeAndAfterUnhashed(bbd, dqname, unhashed, before, after);
   }
@@ -991,7 +996,7 @@ bool Bind2Backend::getBeforeAndAfterNamesAbsolute(uint32_t id, const std::string
       }
 
       before = iter->nsec3hash;
-      unhashed = iter->qname.labelReverse() + auth;
+      unhashed = iter->qname + auth;
       // cerr<<"before: "<<(iter->nsec3hash)<<"/"<<(iter->qname)<<endl;
     }
     else {
@@ -1086,7 +1091,7 @@ void Bind2Backend::lookup(const QType &qtype, const DNSName &qname, DNSPacket *p
 
   pair<recordstorage_t::const_iterator, recordstorage_t::const_iterator> range;
 
-  range = d_handle.d_records->equal_range(d_handle.qname.labelReverse());
+  range = d_handle.d_records->equal_range(d_handle.qname);
   //cout<<"End equal range"<<endl;
   d_handle.mustlog = mustlog;
   
@@ -1203,7 +1208,7 @@ bool Bind2Backend::list(const DNSName& target, int id, bool include_disabled)
 bool Bind2Backend::handle::get_list(DNSResourceRecord &r)
 {
   if(d_qname_iter!=d_qname_end) {
-    r.qname=d_qname_iter->qname.empty() ? domain : (d_qname_iter->qname.labelReverse()+domain);
+    r.qname=d_qname_iter->qname.empty() ? domain : (d_qname_iter->qname+domain);
     r.domain_id=id;
     r.content=(d_qname_iter)->content;
     r.qtype=(d_qname_iter)->qtype;
index 98765b1e7855691eb292fed30354a8d082012a6b..b60d76125253c65f69d5b07f052817f3a2a7f82d 100644 (file)
@@ -60,9 +60,9 @@ struct Bind2DNSRecord
   mutable bool auth;
   bool operator<(const Bind2DNSRecord& rhs) const
   {
-    if(qname < rhs.qname)
+    if(qname.canonCompare(rhs.qname))
       return true;
-    if(rhs.qname < qname)
+    if(rhs.qname.canonCompare(qname))
       return false;
     if(qtype==QType::SOA && rhs.qtype!=QType::SOA)
       return true;
@@ -75,11 +75,11 @@ struct Bind2DNSCompare : std::less<Bind2DNSRecord>
     using std::less<Bind2DNSRecord>::operator(); 
     // use operator< 
     bool operator() (const DNSName& a, const Bind2DNSRecord& b) const
-    {return a < b.qname;}
+    {return a.canonCompare(b.qname);}
     bool operator() (const Bind2DNSRecord& a, const DNSName& b) const
-    {return a.qname < b;}
+    {return a.qname.canonCompare(b);}
     bool operator() (const Bind2DNSRecord& a, const Bind2DNSRecord& b) const
-    {return a.qname < b.qname;}
+    {return a.qname.canonCompare(b.qname);}
 };
 
 struct HashedTag{};
index 6cd60476d3c88e5866d7fd900350f3550e7e3ddb..892eab4a07982f5a03402ea43add5be3106c33c6 100644 (file)
@@ -68,10 +68,10 @@ bool Bind2Backend::deactivateDomainKey(const DNSName& name, unsigned int id)
 bool Bind2Backend::getTSIGKey(const DNSName& name, DNSName* algorithm, string* content)
 { return false; }
 
-bool Bind2Backend::setTSIGKey(const DNSName& name, const string& algorithm, const string& content)
+bool Bind2Backend::setTSIGKey(const DNSName& name, const DNSName& algorithm, const string& content)
 { return false; }
 
-bool Bind2Backend::deleteTSIGKey(const string& name)
+bool Bind2Backend::deleteTSIGKey(const DNSName& name)
 { return false; }
 
 bool Bind2Backend::getTSIGKeys(std::vector< struct TSIGKey > &keys)