[svn] commit: r2509 - in /branches/trac232/src/lib/datasrc: ./ tests/ tests/testdata/

BIND 10 source code commits bind10-changes at lists.isc.org
Thu Jul 15 14:42:49 UTC 2010


Author: jelte
Date: Thu Jul 15 14:42:48 2010
New Revision: 2509

Log:
use the algorithm from rfc2136

Modified:
    branches/trac232/src/lib/datasrc/data_source.h
    branches/trac232/src/lib/datasrc/sqlite3_datasrc.cc
    branches/trac232/src/lib/datasrc/sqlite3_datasrc.h
    branches/trac232/src/lib/datasrc/tests/sqlite3_unittest.cc
    branches/trac232/src/lib/datasrc/tests/testdata/update1.packet
    branches/trac232/src/lib/datasrc/tests/testdata/update2.packet
    branches/trac232/src/lib/datasrc/tests/testdata/update3.packet
    branches/trac232/src/lib/datasrc/tests/testdata/update4.packet
    branches/trac232/src/lib/datasrc/tests/testdata/update5.packet
    branches/trac232/src/lib/datasrc/tests/testdata/update6.packet
    branches/trac232/src/lib/datasrc/tests/testdata/update7.packet

Modified: branches/trac232/src/lib/datasrc/data_source.h
==============================================================================
--- branches/trac232/src/lib/datasrc/data_source.h (original)
+++ branches/trac232/src/lib/datasrc/data_source.h Thu Jul 15 14:42:48 2010
@@ -178,8 +178,10 @@
     enum states { INIT, RUNNING, DONE };
 
     explicit DataSrcTransaction(DataSrc *data_source,
-                                const isc::dns::Name& zone_name) :
+                                const isc::dns::Name& zone_name,
+                                const isc::dns::RRClass& zone_class) :
                                 _zone_name(zone_name),
+                                _zone_class(zone_class),
                                 _data_source(data_source),
                                 _state(INIT) {};
     ~DataSrcTransaction();
@@ -188,10 +190,12 @@
     isc::data::ElementPtr getData() { return _data; };
     void setData(isc::data::ElementPtr data) { _data = data; };
     const isc::dns::Name getZoneName() { return _zone_name; };
+    const isc::dns::RRClass getZoneClass() { return _zone_class; };
 
 private:
     isc::data::ElementPtr _data;
     isc::dns::Name _zone_name;
+    isc::dns::RRClass _zone_class;
     DataSrc* _data_source;
     states _state;
 };

Modified: branches/trac232/src/lib/datasrc/sqlite3_datasrc.cc
==============================================================================
--- branches/trac232/src/lib/datasrc/sqlite3_datasrc.cc (original)
+++ branches/trac232/src/lib/datasrc/sqlite3_datasrc.cc Thu Jul 15 14:42:48 2010
@@ -1300,6 +1300,125 @@
     }
 }
 
+isc::dns::Rcode
+Sqlite3DataSrc::updateCheckPrerequisite(DataSrcTransaction& transaction, RRsetPtr prereq)
+{
+    std::cout << "[XX] PREREQ: " << prereq->toText() << std::endl;
+    // section 3.2 of RFC2136
+    if (prereq->getClass() == RRClass::ANY()) {
+        if (prereq->getTTL().getValue() != 0 ||
+            prereq->getRdataCount() != 0) {
+            return Rcode::FORMERR();
+        }
+        if (prereq->getType() == RRType::ANY()) {
+            if (!haveRRset(this, prereq)) {
+                return Rcode::NXDOMAIN();
+            }
+        } else if (!haveRRset(this, prereq)) {
+            return Rcode::NXRRSET();
+        }
+    } else if (prereq->getClass() == RRClass::NONE()) {
+        if (prereq->getTTL().getValue() != 0 ||
+            prereq->getRdataCount() != 0) {
+            return Rcode::FORMERR();
+        }
+        if (prereq->getType() == RRType::ANY()) {
+            if (haveRRset(this, prereq)) {
+                return Rcode::YXDOMAIN();
+            }
+        } else if (haveRRset(this, prereq)) {
+            return Rcode::YXRRSET();
+        }
+    } else if (prereq->getClass() == transaction.getZoneClass()) {
+        if (prereq->getTTL().getValue() != 0) {
+            return Rcode::FORMERR();
+        }
+        // 3.2.3 talks about rebuilding sets, but we already have full rrsets
+        if (!haveRRset(this, prereq)) {
+            return Rcode::NXRRSET();
+        }
+    } else {
+        return Rcode::FORMERR();
+    }
+    
+    return Rcode::NOERROR();
+}
+
+Rcode
+Sqlite3DataSrc::updateProcessUpdate(DataSrcTransaction& transaction,
+                                    isc::dns::RRsetPtr update)
+{
+    // The RFC says to pre-scan them, but since we use a transaction
+    // we can roll back, we can process the RRsets one at a time
+
+    // TODO, NOTZONE check
+    
+    RRType update_type = update->getType();
+    if (update->getClass() != RRClass::ANY()) {
+        // do we have a direct check in rrtype to see if a specific
+        // type is known and not a meta type?
+        if (update_type == RRType::ANY() ||
+            update_type == RRType::IXFR() ||
+            update_type == RRType::AXFR()) {
+            return Rcode::FORMERR();
+        }
+    } else if (update->getClass() == RRClass::ANY()) {
+        if (update->getTTL().getValue() != 0) {
+            return Rcode::FORMERR();
+        }
+        if (update_type == RRType::IXFR() ||
+            update_type == RRType::AXFR()) {
+            return Rcode::FORMERR();
+        }
+        if (update->getRdataCount() > 0) {
+            return Rcode::FORMERR();
+        }
+    } else if (update->getClass() == RRClass::NONE()) {
+        if (update->getTTL().getValue() != 0) {
+            return Rcode::FORMERR();
+        }
+    }
+
+    // Most types are blindly added, but some require special handling
+    if (update_type == RRType::SOA()) {
+        // check serial and delete old
+        RRsetList soa_list;
+        uint32_t flags = 0;
+        if (findExactRRset(update->getName(),
+                           update->getClass(),
+                           update_type,
+                           soa_list,
+                           flags,
+                           NULL) != SUCCESS ||
+            soa_list.size() != 1) {
+            return Rcode::SERVFAIL();
+        } else {
+            // TODO: no serial arithmetic yet?
+            if (delRRset(transaction, *(soa_list.begin())) != SUCCESS) {
+                return Rcode::SERVFAIL();
+            }
+            if (addRRset(transaction, update) != SUCCESS) {
+                return Rcode::SERVFAIL();
+            }
+        }
+    // which other types need special handling? CNAME, WKS,...
+    // addRRset and delRRset should do 'the right thing' regarding
+    // types (any/none/specific) and rdata count
+    } else {
+        if (update->getClass() == RRClass::ANY() ||
+            update->getClass() == RRClass::NONE()) {
+            if (delRRset(transaction, update) != SUCCESS) {
+                return Rcode::SERVFAIL();
+            }
+        } else {
+            if (addRRset(transaction, update) != SUCCESS) {
+                return Rcode::SERVFAIL();
+            }
+        }
+    }
+    return Rcode::NOERROR();
+}
+
 DataSrc::Result
 Sqlite3DataSrc::doUpdate(DataSrcTransaction& transaction UNUSED_PARAM,
                          isc::dns::Message& msg UNUSED_PARAM) {
@@ -1320,6 +1439,9 @@
         return ERROR;
     }
     if (question->getType() != isc::dns::RRType::SOA()) {
+        return ERROR;
+    }
+    if (question->getClass() != transaction.getZoneClass()) {
         return ERROR;
     }
 
@@ -1329,51 +1451,12 @@
          it != msg.endSection(isc::dns::Section::ANSWER());
          it++) {
         RRsetPtr cur_prereq = *it;
-        cout << "[XX] PREREQ: " << cur_prereq->toText() << endl;
-        cout << "[XX] count: " << cur_prereq->getRdataCount() << endl;
-        // should we check TTL too?
-        // zone class checked for IN right now, should be matched to actual zone class
-        if (cur_prereq->getRdataCount() == 0 &&
-            cur_prereq->getClass() == isc::dns::RRClass::ANY() &&
-            cur_prereq->getType() != isc::dns::RRType::ANY()) {
-            // RRset Exists, value independent prerequisite (2.4.1)
-            cout << "[XX] rrset exists (value independent)" << endl;
-            if (!haveRRset(this, cur_prereq)) {
-                return ERROR;
-            }
-            cout << "[XX] ok" << endl;
-        } else if (cur_prereq->getRdataCount() > 0 &&
-                   cur_prereq->getClass() == isc::dns::RRClass::IN() &&
-                   cur_prereq->getType() != isc::dns::RRType::ANY()) {
-            // RRset Exists, value dependent prerequisite (2.4.2)
-            cout << "[XX] rrset exists (value dependent)" << endl;
-            if (!haveRRset(this, cur_prereq)) {
-                return ERROR;
-            }
-        } else if (cur_prereq->getRdataCount() == 0 &&
-                   cur_prereq->getClass() == isc::dns::RRClass::NONE() &&
-                   cur_prereq->getType() != isc::dns::RRType::ANY()) {
-            // RRset does not exist, value independent prerequisite (2.4.3)
-            cout << "[XX] rrset does not exist" << endl;
-            if (haveRRset(this, cur_prereq)) {
-                return ERROR;
-            }
-        } else if (cur_prereq->getRdataCount() == 0 &&
-                   cur_prereq->getClass() == isc::dns::RRClass::ANY() &&
-                   cur_prereq->getType() == isc::dns::RRType::ANY()) {
-            // Name is in use (2.4.4)
-            cout << "[XX] name is in use" << endl;
-            if (!haveRRset(this, cur_prereq)) {
-                return ERROR;
-            }
-        } else if (cur_prereq->getRdataCount() == 0 &&
-                   cur_prereq->getClass() == isc::dns::RRClass::NONE() &&
-                   cur_prereq->getType() == isc::dns::RRType::ANY()) {
-            // Name is not in use (2.4.5)
-            cout << "[XX] name is not in use" << endl;
-            if (haveRRset(this, cur_prereq)) {
-                return ERROR;
-            }
+        isc::dns::Rcode prereq_result = updateCheckPrerequisite(transaction, cur_prereq);
+        cout << "[XX] PREREQ RCODE: " << prereq_result.toText() << endl;
+        if (prereq_result != Rcode::NOERROR()) {
+            msg.clear(Message::RENDER);
+            msg.setRcode(prereq_result);
+            return ERROR;
         }
     }
 
@@ -1382,45 +1465,10 @@
          it++) {
         RRsetPtr cur_update = *it;
         std::cout << "[XX] Update RR: " << cur_update->toText() << std::endl;
-        DataSrc::Result result;
-        if (cur_update->getRdataCount() > 0 &&
-            cur_update->getClass() == isc::dns::RRClass::IN() &&
-            cur_update->getType() != isc::dns::RRType::ANY()) {
-            // add to rrset (2.5.1)
-            cout << "[XX] add to rrset" << endl;
-            result = addRRset(transaction, cur_update);
-            if (result != DataSrc::SUCCESS) {
-                return result;
-            }
-        } else if (cur_update->getRdataCount() == 0 &&
-                   cur_update->getClass() == isc::dns::RRClass::ANY() &&
-                   cur_update->getType() != isc::dns::RRType::ANY()) {
-            // delete rrset (2.5.2)
-            cout << "[XX] delete rrset" << endl;
-            result = delRRset(transaction, cur_update);
-            if (result != DataSrc::SUCCESS) {
-                return result;
-            }
-        } else if (cur_update->getRdataCount() == 0 &&
-                   cur_update->getClass() == isc::dns::RRClass::ANY() &&
-                   cur_update->getType() == isc::dns::RRType::ANY()) {
-            // delete all rrsets for name (2.5.3)
-            cout << "[XX] delete all rrsets for name" << endl;
-            result = delRRset(transaction, cur_update);
-            if (result != DataSrc::SUCCESS) {
-                return result;
-            }
-        } else if (cur_update->getRdataCount() > 0 &&
-            cur_update->getClass() == isc::dns::RRClass::NONE() &&
-            cur_update->getType() != isc::dns::RRType::ANY()) {
-            // delete from rrset (2.5.4)
-            cout << "[XX] delete rr from rrset" << endl;
-            result = delRRset(transaction, cur_update);
-            if (result != DataSrc::SUCCESS) {
-                return result;
-            }
-        }
-        //(*it)++;
+        Rcode result = updateProcessUpdate(transaction, cur_update);
+        if (result != Rcode::NOERROR()) {
+            return ERROR;
+        }
     }
 
     // do we need to do anything with additional?

Modified: branches/trac232/src/lib/datasrc/sqlite3_datasrc.h
==============================================================================
--- branches/trac232/src/lib/datasrc/sqlite3_datasrc.h (original)
+++ branches/trac232/src/lib/datasrc/sqlite3_datasrc.h Thu Jul 15 14:42:48 2010
@@ -141,6 +141,10 @@
                           const isc::dns::RRType& rrtype,
                           const isc::dns::rdata::Rdata& rdata);
     DataSrc::Result delAll(int zone_id);
+    isc::dns::Rcode updateCheckPrerequisite(DataSrcTransaction& transaction,
+                                            isc::dns::RRsetPtr prereq);
+    isc::dns::Rcode updateProcessUpdate(DataSrcTransaction& transaction,
+                                        isc::dns::RRsetPtr update);
 
 private:
     enum Mode {

Modified: branches/trac232/src/lib/datasrc/tests/sqlite3_unittest.cc
==============================================================================
--- branches/trac232/src/lib/datasrc/tests/sqlite3_unittest.cc (original)
+++ branches/trac232/src/lib/datasrc/tests/sqlite3_unittest.cc Thu Jul 15 14:42:48 2010
@@ -970,7 +970,7 @@
     ASSERT_EQ(DataSrc::SUCCESS, data_source.close());
     ASSERT_EQ(DataSrc::SUCCESS, data_source.init(SQLITE_DBFILE_WRITE));
     
-    DataSrcTransaction transaction(&data_source, zone_name);
+    DataSrcTransaction transaction(&data_source, zone_name, RRClass::IN());
     EXPECT_EQ(DataSrcTransaction::INIT, transaction.getState());
     
     // start doing things without calling startTransaction()
@@ -1026,7 +1026,7 @@
     EXPECT_EQ(DataSrc::NAME_NOT_FOUND, find_flags);
 
     // add it, but roll back
-    DataSrcTransaction transaction1(&data_source, zone_name);
+    DataSrcTransaction transaction1(&data_source, zone_name, RRClass::IN());
     EXPECT_EQ(DataSrc::SUCCESS,
               data_source.startTransaction(transaction1));
     EXPECT_EQ(DataSrc::SUCCESS,
@@ -1041,7 +1041,7 @@
     EXPECT_EQ(DataSrc::NAME_NOT_FOUND, find_flags);
 
     // add it with commit
-    DataSrcTransaction transaction2(&data_source, zone_name);
+    DataSrcTransaction transaction2(&data_source, zone_name, RRClass::IN());
     EXPECT_EQ(DataSrc::SUCCESS,
               data_source.startTransaction(transaction2));
     EXPECT_EQ(DataSrc::SUCCESS,
@@ -1071,7 +1071,7 @@
     EXPECT_EQ(result_sets.size(), 1);
 
     // add it, but roll back
-    DataSrcTransaction transaction1(&data_source, zone_name);
+    DataSrcTransaction transaction1(&data_source, zone_name, RRClass::IN());
     EXPECT_EQ(DataSrc::SUCCESS,
               data_source.startTransaction(transaction1));
     EXPECT_EQ(DataSrc::SUCCESS,
@@ -1087,7 +1087,7 @@
     EXPECT_EQ(result_sets.size(), 1);
 
     // add it, and commit
-    DataSrcTransaction transaction2(&data_source, zone_name);
+    DataSrcTransaction transaction2(&data_source, zone_name, RRClass::IN());
     EXPECT_EQ(DataSrc::SUCCESS,
               data_source.startTransaction(transaction2));
     EXPECT_EQ(DataSrc::SUCCESS,
@@ -1120,7 +1120,7 @@
     RRsetList new_list;
 
     // Replace them, roll back
-    DataSrcTransaction transaction1(&data_source, zone_name);
+    DataSrcTransaction transaction1(&data_source, zone_name, RRClass::IN());
     data_source.startTransaction(transaction1);
     data_source.replaceZone(transaction1, new_list);
     data_source.rollbackTransaction(transaction1);
@@ -1133,7 +1133,7 @@
     EXPECT_EQ(1, result_sets.size());
 
     // Replace them, commit
-    DataSrcTransaction transaction2(&data_source, zone_name);
+    DataSrcTransaction transaction2(&data_source, zone_name, RRClass::IN());
     data_source.startTransaction(transaction2);
     data_source.replaceZone(transaction2, new_list);
     data_source.commitTransaction(transaction2);
@@ -1163,7 +1163,7 @@
     EXPECT_EQ(1, result_sets.size());
 
     // Delete zone, roll back
-    DataSrcTransaction transaction1(&data_source, zone_name);
+    DataSrcTransaction transaction1(&data_source, zone_name, RRClass::IN());
     data_source.startTransaction(transaction1);
     data_source.delZone(transaction1);
     data_source.rollbackTransaction(transaction1);
@@ -1176,7 +1176,7 @@
     EXPECT_EQ(1, result_sets.size());
 
     // Delete zone, commit
-    DataSrcTransaction transaction2(&data_source, zone_name);
+    DataSrcTransaction transaction2(&data_source, zone_name, RRClass::IN());
     data_source.startTransaction(transaction2);
     data_source.delZone(transaction2);
     data_source.commitTransaction(transaction2);
@@ -1189,7 +1189,7 @@
     EXPECT_EQ(1, result_sets.size());
 
     // try to start a transaction for the zone that is now gone
-    DataSrcTransaction transaction3(&data_source, zone_name);
+    DataSrcTransaction transaction3(&data_source, zone_name, RRClass::IN());
     EXPECT_EQ(DataSrc::ERROR, data_source.startTransaction(transaction3));
     
 }
@@ -1239,7 +1239,6 @@
     RRTTL ttl(s);
 
     file >> s;
-    std::cout << "[XX] CLASS: " << s << std::endl;
     RRClass rrclass(0);
     if (s == "ANY") {
         rrclass = RRClass::ANY();
@@ -1250,7 +1249,6 @@
     }
 
     file >> s;
-    std::cout << "[XX] TYPE: " << s << std::endl;
     RRType rrtype(0);
     if (s == "ANY") {
         rrtype = RRType::ANY();
@@ -1269,7 +1267,6 @@
     }
 
     if (line != "") {
-        std::cout << "[XX] RDATA LINE: '" << line << "'" << std::endl;
         RdataPtr rdata = createRdata(rrtype, rrclass, line);
         rrset->addRdata(rdata);
     }
@@ -1421,7 +1418,7 @@
     ASSERT_EQ(0, ixfrFromFile(ixfr_msg, TEST_DATA_DIR "/ixfr_ok.rrs"));
 
     // do IXFR, roll back
-    DataSrcTransaction transaction1(&data_source, zone_name);
+    DataSrcTransaction transaction1(&data_source, zone_name, RRClass::IN());
     data_source.startTransaction(transaction1);
     EXPECT_EQ(DataSrc::SUCCESS,
               data_source.doIXFR(transaction1,
@@ -1435,7 +1432,7 @@
                      www_name, RRClass::IN(), RRType::A());
 
     // do IXFR, commit
-    DataSrcTransaction transaction2(&data_source, zone_name);
+    DataSrcTransaction transaction2(&data_source, zone_name, RRClass::IN());
     data_source.startTransaction(transaction2);
     EXPECT_EQ(DataSrc::SUCCESS,
               data_source.doIXFR(transaction2,
@@ -1449,7 +1446,7 @@
                      www_name, RRClass::IN(), RRType::A());
 
     // same IXFR should now fail, because the start serial doesn't match
-    DataSrcTransaction transaction3(&data_source, zone_name);
+    DataSrcTransaction transaction3(&data_source, zone_name, RRClass::IN());
     data_source.startTransaction(transaction3);
     EXPECT_EQ(DataSrc::ERROR,
               data_source.doIXFR(transaction3,
@@ -1471,7 +1468,7 @@
     Message ixfr_msg(Message::RENDER);
     ASSERT_EQ(0, ixfrFromFile(ixfr_msg, TEST_DATA_DIR
               "/ixfr_bad_remove_nonexisting.rrs"));
-    DataSrcTransaction transaction1(&data_source, zone_name);
+    DataSrcTransaction transaction1(&data_source, zone_name, RRClass::IN());
     data_source.startTransaction(transaction1);
     EXPECT_EQ(DataSrc::ERROR,
               data_source.doIXFR(transaction1,
@@ -1492,7 +1489,7 @@
 
     Message update_msg(Message::RENDER);
 
-    DataSrcTransaction transaction1(&data_source, zone_name);
+    DataSrcTransaction transaction1(&data_source, zone_name, RRClass::IN());
     data_source.startTransaction(transaction1);
     update_msg.setQid(1234);
 
@@ -1564,6 +1561,27 @@
     
 }
 
+TEST_F(Sqlite3DataSourceTest, dynamic_update_bad_class) {
+    // reset database
+    ASSERT_EQ(0, install_writable_database());
+    
+    // use our copied writable datasource db
+    ASSERT_EQ(DataSrc::SUCCESS, data_source.close());
+    ASSERT_EQ(DataSrc::SUCCESS, data_source.init(SQLITE_DBFILE_WRITE));
+
+    Message update_msg(Message::RENDER);
+
+    DataSrcTransaction transaction1(&data_source, zone_name, RRClass::CH());
+    data_source.startTransaction(transaction1);
+    update_msg.setQid(1234);
+
+    update_msg.setOpcode(isc::dns::Opcode::UPDATE());
+
+    // no/bad question section
+    ASSERT_EQ(DataSrc::ERROR, data_source.doUpdate(transaction1, update_msg));
+
+}
+
 TEST_F(Sqlite3DataSourceTest, dynamic_update_prereq_fails) {
     // reset database
     ASSERT_EQ(0, install_writable_database());
@@ -1574,23 +1592,31 @@
 
     Message update_msg(Message::RENDER);
 
-    DataSrcTransaction transaction1(&data_source, zone_name);
+    DataSrcTransaction transaction1(&data_source, zone_name, RRClass::IN());
     data_source.startTransaction(transaction1);
 
     ASSERT_EQ(0, updateFromFile(update_msg, TEST_DATA_DIR "/update2.packet"));
     ASSERT_EQ(DataSrc::ERROR, data_source.doUpdate(transaction1, update_msg));
+    ASSERT_EQ(Rcode::NXRRSET(), update_msg.getRcode());
+
+    data_source.rollbackTransaction(transaction1);
+    data_source.startTransaction(transaction1);
 
     ASSERT_EQ(0, updateFromFile(update_msg, TEST_DATA_DIR "/update3.packet"));
     ASSERT_EQ(DataSrc::ERROR, data_source.doUpdate(transaction1, update_msg));
+    ASSERT_EQ(Rcode::NXDOMAIN(), update_msg.getRcode());
 
     ASSERT_EQ(0, updateFromFile(update_msg, TEST_DATA_DIR "/update4.packet"));
     ASSERT_EQ(DataSrc::ERROR, data_source.doUpdate(transaction1, update_msg));
+    ASSERT_EQ(Rcode::NXRRSET(), update_msg.getRcode());
 
     ASSERT_EQ(0, updateFromFile(update_msg, TEST_DATA_DIR "/update5.packet"));
     ASSERT_EQ(DataSrc::ERROR, data_source.doUpdate(transaction1, update_msg));
+    ASSERT_EQ(Rcode::YXRRSET(), update_msg.getRcode());
 
     ASSERT_EQ(0, updateFromFile(update_msg, TEST_DATA_DIR "/update6.packet"));
     ASSERT_EQ(DataSrc::ERROR, data_source.doUpdate(transaction1, update_msg));
+    ASSERT_EQ(Rcode::YXDOMAIN(), update_msg.getRcode());
 
 }
 
@@ -1604,7 +1630,7 @@
 
     Message update_msg(Message::RENDER);
 
-    DataSrcTransaction transaction1(&data_source, zone_name);
+    DataSrcTransaction transaction1(&data_source, zone_name, RRClass::IN());
     data_source.startTransaction(transaction1);
 
     ASSERT_EQ(0, updateFromFile(update_msg, TEST_DATA_DIR "/update7.packet"));

Modified: branches/trac232/src/lib/datasrc/tests/testdata/update1.packet
==============================================================================
--- branches/trac232/src/lib/datasrc/tests/testdata/update1.packet (original)
+++ branches/trac232/src/lib/datasrc/tests/testdata/update1.packet Thu Jul 15 14:42:48 2010
@@ -7,7 +7,7 @@
 newaddr.example.com 0 NONE A
 newaddr.example.com 0 NONE ANY
 ;
-ip46.example.com 3600 ANY A
+ip46.example.com 0 ANY A
 www.example.com 0 ANY ANY
 example.com 0 NONE MX 10 mail.example.com.
 newaddr.example.com 3600 IN A 192.0.2.12

Modified: branches/trac232/src/lib/datasrc/tests/testdata/update2.packet
==============================================================================
--- branches/trac232/src/lib/datasrc/tests/testdata/update2.packet (original)
+++ branches/trac232/src/lib/datasrc/tests/testdata/update2.packet Thu Jul 15 14:42:48 2010
@@ -7,7 +7,7 @@
 newaddr.example.com 0 NONE A
 newaddr.example.com 0 NONE ANY
 ;
-ip46.example.com 3600 ANY A
+ip46.example.com 0 ANY A
 www.example.com 0 ANY ANY
 example.com 0 NONE MX 10 mail.example.com.
 newaddr.example.com 3600 IN A 192.0.2.12

Modified: branches/trac232/src/lib/datasrc/tests/testdata/update3.packet
==============================================================================
--- branches/trac232/src/lib/datasrc/tests/testdata/update3.packet (original)
+++ branches/trac232/src/lib/datasrc/tests/testdata/update3.packet Thu Jul 15 14:42:48 2010
@@ -7,7 +7,7 @@
 newaddr.example.com 0 NONE A
 newaddr.example.com 0 NONE ANY
 ;
-ip46.example.com 3600 ANY A
+ip46.example.com 0 ANY A
 www.example.com 0 ANY ANY
 example.com 0 NONE MX 10 mail.example.com.
 newaddr.example.com 3600 IN A 192.0.2.12

Modified: branches/trac232/src/lib/datasrc/tests/testdata/update4.packet
==============================================================================
--- branches/trac232/src/lib/datasrc/tests/testdata/update4.packet (original)
+++ branches/trac232/src/lib/datasrc/tests/testdata/update4.packet Thu Jul 15 14:42:48 2010
@@ -8,7 +8,7 @@
 newaddr.example.com 0 NONE A
 newaddr.example.com 0 NONE ANY
 ;
-ip46.example.com 3600 ANY A
+ip46.example.com 0 ANY A
 www.example.com 0 ANY ANY
 example.com 0 NONE MX 10 mail.example.com.
 newaddr.example.com 3600 IN A 192.0.2.12

Modified: branches/trac232/src/lib/datasrc/tests/testdata/update5.packet
==============================================================================
--- branches/trac232/src/lib/datasrc/tests/testdata/update5.packet (original)
+++ branches/trac232/src/lib/datasrc/tests/testdata/update5.packet Thu Jul 15 14:42:48 2010
@@ -7,7 +7,7 @@
 www.example.com 0 NONE A
 newaddr.example.com 0 NONE ANY
 ;
-ip46.example.com 3600 ANY A
+ip46.example.com 0 ANY A
 www.example.com 0 ANY ANY
 example.com 0 NONE MX 10 mail.example.com.
 newaddr.example.com 3600 IN A 192.0.2.12

Modified: branches/trac232/src/lib/datasrc/tests/testdata/update6.packet
==============================================================================
--- branches/trac232/src/lib/datasrc/tests/testdata/update6.packet (original)
+++ branches/trac232/src/lib/datasrc/tests/testdata/update6.packet Thu Jul 15 14:42:48 2010
@@ -7,7 +7,7 @@
 newaddr.example.com 0 NONE A
 www.example.com 0 NONE ANY
 ;
-ip46.example.com 3600 ANY A
+ip46.example.com 0 ANY A
 www.example.com 0 ANY ANY
 example.com 0 NONE MX 10 mail.example.com.
 newaddr.example.com 3600 IN A 192.0.2.12

Modified: branches/trac232/src/lib/datasrc/tests/testdata/update7.packet
==============================================================================
--- branches/trac232/src/lib/datasrc/tests/testdata/update7.packet (original)
+++ branches/trac232/src/lib/datasrc/tests/testdata/update7.packet Thu Jul 15 14:42:48 2010
@@ -1,4 +1,4 @@
 example.com IN  SOA
 ;
 ; delete nonexistant RRset
-ip46.example.com 3600 ANY TXT
+ip46.example.com 0 ANY TXT




More information about the bind10-changes mailing list