]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[738-kea4-crash-when-remote-network4-del-command-is-issued-with-subnets-action-delete...
authorFrancis Dupont <fdupont@isc.org>
Tue, 16 Jul 2019 23:49:40 +0000 (01:49 +0200)
committerFrancis Dupont <fdupont@isc.org>
Thu, 18 Jul 2019 11:27:40 +0000 (13:27 +0200)
src/hooks/dhcp/mysql_cb/mysql_cb_dhcp4.cc
src/hooks/dhcp/mysql_cb/mysql_cb_dhcp6.cc
src/hooks/dhcp/mysql_cb/tests/mysql_cb_dhcp4_unittest.cc
src/hooks/dhcp/mysql_cb/tests/mysql_cb_dhcp6_unittest.cc

index 31a2c7e785ee8b2fdcd8c306fb41ab5cf94336aa..de9f5ee6ba30b8ea48454fed5e724f32a23bc218 100644 (file)
@@ -2482,7 +2482,7 @@ TaggedStatementArray tagged_statements = { {
 
     // Delete all subnets for a shared network.
     { MySqlConfigBackendDHCPv4Impl::DELETE_ALL_SUBNETS4_SHARED_NETWORK_NAME,
-      MYSQL_DELETE_SUBNET_WITH_TAG(dhcp4, AND s.shared_network_name = ?)
+      MYSQL_DELETE_SUBNET_ANY(dhcp4, WHERE s.shared_network_name = ?)
     },
 
     // Delete associations of a subnet with server.
@@ -2939,6 +2939,10 @@ MySqlConfigBackendDHCPv4::deleteAllSubnets4(const ServerSelector& server_selecto
 uint64_t
 MySqlConfigBackendDHCPv4::deleteSharedNetworkSubnets4(const db::ServerSelector& server_selector,
                                                       const std::string& shared_network_name) {
+    if (!server_selector.amAny()) {
+        isc_throw(InvalidOperation, "deleting all subnets from a shared "
+                  "network is defined only using ANY server");
+    }
     LOG_DEBUG(mysql_cb_logger, DBGLVL_TRACE_BASIC, MYSQL_CB_DELETE_SHARED_NETWORK_SUBNETS4)
         .arg(shared_network_name);
     uint64_t result = impl_->deleteTransactional(MySqlConfigBackendDHCPv4Impl::DELETE_ALL_SUBNETS4_SHARED_NETWORK_NAME,
index e935a1ed3aae2e25d55c2b7e7fc7e9a55d6d7ae4..2e4ae9d149ed0c15c5cc7ef606bf7ff9ee543388 100644 (file)
@@ -2841,7 +2841,7 @@ TaggedStatementArray tagged_statements = { {
 
     // Delete all subnets for a shared network.
     { MySqlConfigBackendDHCPv6Impl::DELETE_ALL_SUBNETS6_SHARED_NETWORK_NAME,
-      MYSQL_DELETE_SUBNET_WITH_TAG(dhcp6, AND s.shared_network_name = ?)
+      MYSQL_DELETE_SUBNET_ANY(dhcp6, WHERE s.shared_network_name = ?)
     },
 
     // Delete associations of a subnet with server.
@@ -3319,6 +3319,10 @@ MySqlConfigBackendDHCPv6::deleteAllSubnets6(const ServerSelector& server_selecto
 uint64_t
 MySqlConfigBackendDHCPv6::deleteSharedNetworkSubnets6(const db::ServerSelector& server_selector,
                                                       const std::string& shared_network_name) {
+    if (!server_selector.amAny()) {
+        isc_throw(InvalidOperation, "deleting all subnets from a shared "
+                  "network is defined only using ANY server");
+    }
     LOG_DEBUG(mysql_cb_logger, DBGLVL_TRACE_BASIC, MYSQL_CB_DELETE_SHARED_NETWORK_SUBNETS6)
         .arg(shared_network_name);
     uint64_t result = impl_->deleteTransactional(MySqlConfigBackendDHCPv6Impl::DELETE_ALL_SUBNETS6_SHARED_NETWORK_NAME,
index 64af5c231902da4b05e4bbde94637febd82d3bf8..9c7a4a8944f12a27ebeb0f3cc415c1a1713bb283 100644 (file)
@@ -2233,7 +2233,7 @@ TEST_F(MySqlConfigBackendDHCPv4Test, getAllSharedNetworks4) {
     // Delete first shared network with it subnets and verify it is gone.
 
     // Begin by its subnet.
-    EXPECT_EQ(1, cbptr_->deleteSharedNetworkSubnets4(ServerSelector::ALL(),
+    EXPECT_EQ(1, cbptr_->deleteSharedNetworkSubnets4(ServerSelector::ANY(),
                                                      test_networks_[1]->getName()));
 
     {
index 1a5d2a7089fda2e515166cbe4fad27fcc9f292bd..705b81ddf54997ed4d495da98f30b44f4c419a2d 100644 (file)
@@ -2248,7 +2248,7 @@ TEST_F(MySqlConfigBackendDHCPv6Test, getAllSharedNetworks6) {
     // Delete first shared network with it subnets and verify it is gone.
 
     // Begin by its subnet.
-    EXPECT_EQ(1, cbptr_->deleteSharedNetworkSubnets6(ServerSelector::ALL(),
+    EXPECT_EQ(1, cbptr_->deleteSharedNetworkSubnets6(ServerSelector::ANY(),
                                                      test_networks_[1]->getName()));
 
     {