]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#3469] Corrected MySQL binding offsets for class update
authorThomas Markwalder <tmark@isc.org>
Tue, 23 Jul 2024 13:23:20 +0000 (09:23 -0400)
committerThomas Markwalder <tmark@isc.org>
Tue, 23 Jul 2024 14:21:12 +0000 (10:21 -0400)
/src/hooks/dhcp/mysql_cb/mysql_cb_dhcp6.cc
    MySqlConfigBackendDHCPv6Impl::createUpdateClientClass6()
     - corrected binding offsets

/src/lib/dhcpsrv/testutils/generic_cb_dhcp6_unittest.cc
    GenericConfigBackendDHCPv6Test::createUpdateClientClass6OptionsTest()
    - added lifetime member checks

ChangeLog
src/hooks/dhcp/mysql_cb/mysql_cb_dhcp6.cc
src/lib/dhcpsrv/testutils/generic_cb_dhcp6_unittest.cc

index 099689979d75606f18501be7bb413533ea757507..d57546020d47724accbc5b059b26ed08c436f012 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2267.  [bug]           tmark
+       Corrected an issue in MySQL config back end that
+       causes preferred life time values to be overwritten
+       when updating client classes via remote-set-class6.
+       command.
+       (Gitlab #3469)
+
 2266.  [bug]           fdupont
        Improved the code handling multiple instances of
        the same v4 option according to RFC 3396.
index 76c295b4f02950c1ff90bdf37e06214caedb44ab..fa3b457fff337397ae5c2e4652246cc7585bd63e 100644 (file)
@@ -3118,7 +3118,7 @@ public:
                 // If position is not specified, leave the class at the same position.
                 // Remove the binding which specifies the position and use different
                 // query.
-                in_bindings.erase(in_bindings.begin() + 10, in_bindings.begin() + 11);
+                in_bindings.erase(in_bindings.begin() + 7, in_bindings.begin() + 8);
                 conn_.updateDeleteQuery(MySqlConfigBackendDHCPv6Impl::UPDATE_CLIENT_CLASS6_SAME_POSITION,
                                         in_bindings);
             } else {
index ba8858dd1f89d9553db522f0e8038db723142091..216697ba437e1e3fb2000f3f2edfb0462726b320 100644 (file)
@@ -4450,6 +4450,14 @@ GenericConfigBackendDHCPv6Test::createUpdateClientClass6OptionsTest() {
     ASSERT_NO_THROW_LOG(client_class = cbptr_->getClientClass6(ServerSelector::ALL(), class1->getName()));
     ASSERT_TRUE(client_class);
 
+    // Verify lifetime values.  
+    EXPECT_EQ(30, client_class->getValid().getMin());
+    EXPECT_EQ(60, client_class->getValid().get());
+    EXPECT_EQ(90, client_class->getValid().getMax());
+    EXPECT_EQ(25, client_class->getPreferred().getMin());
+    EXPECT_EQ(55, client_class->getPreferred().get());
+    EXPECT_EQ(85, client_class->getPreferred().getMax());
+
     // Validate options belonging to the class.
     ASSERT_TRUE(client_class->getCfgOption());
     OptionDescriptor returned_opt_new_posix_timezone =
@@ -4495,6 +4503,14 @@ GenericConfigBackendDHCPv6Test::createUpdateClientClass6OptionsTest() {
     ASSERT_NO_THROW_LOG(client_class = cbptr_->getClientClass6(ServerSelector::ALL(), class1->getName()));
     ASSERT_TRUE(client_class);
 
+    //  Re-check lifetime values. This ensure bindings line up. 
+    EXPECT_EQ(30, client_class->getValid().getMin());
+    EXPECT_EQ(60, client_class->getValid().get());
+    EXPECT_EQ(90, client_class->getValid().getMax());
+    EXPECT_EQ(25, client_class->getPreferred().getMin());
+    EXPECT_EQ(55, client_class->getPreferred().get());
+    EXPECT_EQ(85, client_class->getPreferred().getMax());
+
     // Ensure that the first option definition is gone.
     ASSERT_TRUE(client_class->getCfgOptionDef());
     returned_def_foo = client_class->getCfgOptionDef()->get(test_option_defs_[0]->getOptionSpaceName(),