[svn] commit: r856 - in /branches/each-ds/src/lib: auth/cpp/data_source.cc auth/cpp/data_source_sqlite3.cc dns/cpp/rrset.cc dns/cpp/rrset.h

BIND 10 source code commits bind10-changes at lists.isc.org
Wed Feb 17 20:26:04 UTC 2010


Author: each
Date: Wed Feb 17 20:26:04 2010
New Revision: 856

Log:
- fix a bug in DNAME/CNAME synthesis
- fix a bug in the new RRset structure (with contained RRSIGs)
- add RRSIGs to RRSets in SQL data source

Modified:
    branches/each-ds/src/lib/auth/cpp/data_source.cc
    branches/each-ds/src/lib/auth/cpp/data_source_sqlite3.cc
    branches/each-ds/src/lib/dns/cpp/rrset.cc
    branches/each-ds/src/lib/dns/cpp/rrset.h

Modified: branches/each-ds/src/lib/auth/cpp/data_source.cc
==============================================================================
--- branches/each-ds/src/lib/auth/cpp/data_source.cc (original)
+++ branches/each-ds/src/lib/auth/cpp/data_source.cc Wed Feb 17 20:26:04 2010
@@ -170,16 +170,18 @@
                         }
 
                         if (found) {
+                            if (RRsetPtr r = ref[RRType::DNAME()]) {
+                                RRsetList syn;
+                                m.addRRset(Section::ANSWER(), r);
+                                synthesizeCname(q, task, r, syn);
+                                if (syn.size() == 1) {
+                                    m.addRRset(Section::ANSWER(), syn[0]);
+                                    chaseCname(q, task, syn[0]);
+                                    continue;
+                                }
+                            }
                             BOOST_FOREACH (RRsetPtr r, ref) {
-                                if (r->getType() == RRType::DNAME()) {
-                                    RRsetList syn;
-                                    m.addRRset(Section::ANSWER(), r);
-                                    synthesizeCname(q, task, r, syn);
-                                    if (syn.size() == 1) {
-                                        m.addRRset(Section::ANSWER(), syn[0]);
-                                        chaseCname(q, task, syn[0]);
-                                    }
-                                } else {
+                                if (r->getType() != RRType::DNAME()) {
                                     m.addRRset(Section::AUTHORITY(), r);
                                     getAdditional(q, r);
                                 }

Modified: branches/each-ds/src/lib/auth/cpp/data_source_sqlite3.cc
==============================================================================
--- branches/each-ds/src/lib/auth/cpp/data_source_sqlite3.cc (original)
+++ branches/each-ds/src/lib/auth/cpp/data_source_sqlite3.cc Wed Feb 17 20:26:04 2010
@@ -3,6 +3,7 @@
 #include <dns/rrttl.h>
 #include <dns/rdata.h>
 #include <dns/rdataclass.h>
+#include <dns/rrset.h>
 #include <dns/rrsetlist.h>
 
 #include <iostream>
@@ -133,8 +134,8 @@
 
         // first time through the loop, initialize RRset
         if (rows == 1) {
-            rrset = RRsetPtr(new RRset(name, RRClass("IN"),
-                                       found_cname ? RRType("CNAME") : rdtype,
+            rrset = RRsetPtr(new RRset(name, RRClass::IN(),
+                                       found_cname ? RRType::CNAME() : rdtype,
                                        RRTTL(3600)));
         }
 
@@ -146,6 +147,17 @@
                 target_ttl = ttl;
             }
         } else {
+            RdataPtr rrsig = createRdata(RRType::RRSIG(), RRClass::IN(), rdata);
+            if (rrset->getRRsig()) {
+                rrset->getRRsig()->addRdata(rrsig);
+            } else {
+                RRsetPtr sigs = RRsetPtr(new RRset(name, RRClass::IN(),
+                                                   RRType::RRSIG(),
+                                                   RRTTL(3600)));
+                sigs->addRdata(rrsig);
+                rrset->addRRsig(sigs);
+            }
+
             if (sig_ttl == -1 || sig_ttl > ttl) {
                 sig_ttl = ttl;
             }

Modified: branches/each-ds/src/lib/dns/cpp/rrset.cc
==============================================================================
--- branches/each-ds/src/lib/dns/cpp/rrset.cc (original)
+++ branches/each-ds/src/lib/dns/cpp/rrset.cc Wed Feb 17 20:26:04 2010
@@ -177,6 +177,15 @@
 {
     impl_->ttl_ = ttl;
 }
+
+RRset::RRset(const Name& name, const RRClass& rrclass,
+            const RRType& rrtype, const RRTTL& ttl) :
+    BasicRRset(name, rrclass, rrtype, ttl)
+{
+    rrsig_ = BasicRRsetPtr();
+}
+
+RRset::~RRset() {}
 
 namespace {
 class BasicRdataIterator : public RdataIterator {

Modified: branches/each-ds/src/lib/dns/cpp/rrset.h
==============================================================================
--- branches/each-ds/src/lib/dns/cpp/rrset.h (original)
+++ branches/each-ds/src/lib/dns/cpp/rrset.h Wed Feb 17 20:26:04 2010
@@ -177,14 +177,9 @@
     typedef boost::shared_ptr<BasicRRset> BasicRRsetPtr;
 public:
     RRset(const Name& name, const RRClass& rrclass,
-          const RRType& rrtype, const RRTTL& ttl) : 
-        BasicRRset(name, rrclass, rrtype, ttl) {
-        rrsig_ = BasicRRsetPtr();
-    }
-
-    virtual ~RRset() {
-        delete rrsig_.get();
-    }
+          const RRType& rrtype, const RRTTL& ttl);
+
+    virtual ~RRset();
 
     virtual void addRRsig(AbstractRRset& sigs) {
         RdataIteratorPtr it = sigs.getRdataIterator();




More information about the bind10-changes mailing list