Browse Source

fixed a bug that Sqlite3 data source didn't return ANY queries
if the answer was generated from mixed ordered RRs.


git-svn-id: svn://bind10.isc.org/svn/bind10/trunk@1172 e5f2f494-b856-4b98-b285-d166d9295462

JINMEI Tatuya 15 years ago
parent
commit
9c11638bec

+ 2 - 2
src/lib/auth/data_source_sqlite3.cc

@@ -148,7 +148,6 @@ Sqlite3DataSrc::findRecords(const Name& name, const RRType& rdtype,
     }
     }
   
   
     int rows = 0;
     int rows = 0;
-    RRsetPtr rrset;
     const bool any = (rdtype == RRType::ANY());
     const bool any = (rdtype == RRType::ANY());
 
 
     rc = sqlite3_step(query);
     rc = sqlite3_step(query);
@@ -186,7 +185,8 @@ Sqlite3DataSrc::findRecords(const Name& name, const RRType& rdtype,
             }
             }
         }
         }
 
 
-        if (!target[rt]) {
+        RRsetPtr rrset = target[rt];
+        if (rrset == NULL) {
             rrset = RRsetPtr(new RRset(name, RRClass::IN(), rt, RRTTL(ttl)));
             rrset = RRsetPtr(new RRset(name, RRClass::IN(), rt, RRTTL(ttl)));
             target.addRRset(rrset);
             target.addRRset(rrset);
         }
         }

+ 25 - 0
src/lib/auth/data_source_sqlite3_unittest.cc

@@ -97,6 +97,11 @@ protected:
         www_nsec_data.push_back("example.com. A RRSIG NSEC");
         www_nsec_data.push_back("example.com. A RRSIG NSEC");
         www_nsec_sig_data.push_back("NSEC 5 3 7200" + sigdata_common);
         www_nsec_sig_data.push_back("NSEC 5 3 7200" + sigdata_common);
 
 
+        mix_a_data.push_back("192.0.2.1");
+        mix_a_data.push_back("192.0.2.2");
+        mix_aaaa_data.push_back("2001:db8::1");
+        mix_aaaa_data.push_back("2001:db8::2");
+
         apex_soa_data.push_back("master.example.com. admin.example.com. "
         apex_soa_data.push_back("master.example.com. admin.example.com. "
                                 "1234 3600 1800 2419200 7200");
                                 "1234 3600 1800 2419200 7200");
         apex_soa_sig_data.push_back("SOA 5 2 3600" + sigdata_common);
         apex_soa_sig_data.push_back("SOA 5 2 3600" + sigdata_common);
@@ -165,6 +170,8 @@ protected:
     vector<string> common_aaaa_sig_data;
     vector<string> common_aaaa_sig_data;
     vector<string> www_nsec_data;
     vector<string> www_nsec_data;
     vector<string> www_nsec_sig_data;
     vector<string> www_nsec_sig_data;
+    vector<string> mix_a_data;
+    vector<string> mix_aaaa_data;
     vector<string> apex_soa_data;
     vector<string> apex_soa_data;
     vector<string> apex_soa_sig_data;
     vector<string> apex_soa_sig_data;
     vector<string> apex_ns_data;
     vector<string> apex_ns_data;
@@ -455,6 +462,24 @@ TEST_F(Sqlite3DataSourceTest, findRRsetApexANY) {
               rrtype, ttls, 0, types, answers, signatures);
               rrtype, ttls, 0, types, answers, signatures);
 }
 }
 
 
+TEST_F(Sqlite3DataSourceTest, findRRsetMixedANY) {
+    // ANY query for mixed order RRs
+    const Name qname("mix.example.com");
+
+    types.push_back(RRType::A());
+    types.push_back(RRType::AAAA());
+    ttls.push_back(rrttl);
+    ttls.push_back(rrttl);
+    answers.push_back(&mix_a_data);
+    answers.push_back(&mix_aaaa_data);
+    signatures.push_back(NULL);
+    signatures.push_back(NULL);
+
+    rrtype = RRType::ANY();
+    checkFind(NORMAL, data_source, *query, qname, &zone_name, rrclass,
+              rrtype, ttls, 0, types, answers, signatures);
+}
+
 TEST_F(Sqlite3DataSourceTest, findRRsetApexNXRRSET) {
 TEST_F(Sqlite3DataSourceTest, findRRsetApexNXRRSET) {
     rrtype = RRType::AAAA();
     rrtype = RRType::AAAA();
     EXPECT_EQ(DataSrc::SUCCESS,
     EXPECT_EQ(DataSrc::SUCCESS,

+ 6 - 0
src/lib/auth/testdata/example.com.signed

@@ -186,3 +186,9 @@ ip46.example.com.	3600	IN A	192.0.2.1
 
 
 ;; not an address
 ;; not an address
 text.example.com.	3600	IN TXT	"No address is here"
 text.example.com.	3600	IN TXT	"No address is here"
+
+;; mixed ordering
+mix.example.com.	3600	IN A 192.0.2.1
+			3600	IN AAAA 2001:db8::1
+			3600	IN A 192.0.2.2
+			3600	IN AAAA 2001:db8::2

BIN
src/lib/auth/testdata/test.sqlite3