Parcourir la source

[1891] reject attempt of deleting NSEC3 before start transaction.

JINMEI Tatuya il y a 13 ans
Parent
commit
47f1415387

+ 4 - 2
src/lib/datasrc/sqlite3_accessor.cc

@@ -1197,8 +1197,10 @@ void
 SQLite3Accessor::deleteNSEC3RecordInZone(
     const string (&params)[DEL_PARAM_COUNT])
 {
-    // TBD: no transaction check
-
+    if (!dbparameters_->updating_zone) {
+        isc_throw(DataSourceError, "deleting NSEC3-related record in SQLite3 "
+                  "data source without transaction");
+    }
     doUpdate<const string (&)[DEL_PARAM_COUNT]>(
         *dbparameters_, DEL_NSEC3_RECORD, params,
         "delete NSEC3 record from zone");

+ 4 - 0
src/lib/datasrc/tests/sqlite3_accessor_unittest.cc

@@ -1180,6 +1180,10 @@ TEST_F(SQLite3Update, deleteNonexistent) {
 TEST_F(SQLite3Update, invalidDelete) {
     // An attempt of delete before an explicit start of transaction
     EXPECT_THROW(accessor->deleteRecordInZone(del_params), DataSourceError);
+
+    // Same for NSEC3.
+    EXPECT_THROW(accessor->deleteNSEC3RecordInZone(del_params),
+                 DataSourceError);
 }
 
 TEST_F(SQLite3Update, emptyTransaction) {