]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#4265] Fixed bug and updated UTs
authorFrancis Dupont <fdupont@isc.org>
Thu, 18 Dec 2025 23:39:07 +0000 (00:39 +0100)
committerFrancis Dupont <fdupont@isc.org>
Fri, 9 Jan 2026 13:28:01 +0000 (14:28 +0100)
changelog_unreleased/4265-exchange-timeout-parameter-is-ignored [new file with mode: 0644]
src/hooks/d2/gss_tsig/gss_tsig_cfg.cc
src/hooks/d2/gss_tsig/tests/gss_tsig_cfg_unittests.cc

diff --git a/changelog_unreleased/4265-exchange-timeout-parameter-is-ignored b/changelog_unreleased/4265-exchange-timeout-parameter-is-ignored
new file mode 100644 (file)
index 0000000..ae162af
--- /dev/null
@@ -0,0 +1,4 @@
+[bug]          fdupont
+       The "exchange-timeout" parameter of GSS-TSIG hook library
+       configuration is no longer ignored.
+       (Gitlab #4265)
index 78c5a8c05b9e3c09db3bb20a397c1c705f187753..cbea1e2c8b117d0f892280c9d346be36e06376f5 100644 (file)
@@ -296,6 +296,7 @@ const SimpleKeywords GssTsigCfg::GLOBAL_PARAMETERS = {
     { "retry-interval",     Element::integer },
     { "tkey-protocol",      Element::string },
     { "fallback",           Element::boolean },
+    { "exchange-timeout",   Element::integer },
     { "servers",            Element::list },
     { "user-context",       Element::map },
     { "comment",            Element::string }
@@ -697,7 +698,7 @@ GssTsigCfg::configure(ConstElementPtr params) {
             srv->setFallback(fallback->boolValue());
         }
 
-        ConstElementPtr tkey_timeout = params->get("exchange-timeout");
+        ConstElementPtr tkey_timeout = map->get("exchange-timeout");
         if (!tkey_timeout) {
             tkey_timeout = global_tkey_timeout;
         }
index 5cf6065b4927d0c380aecf9aa1fc226ebb1a216f..f9e469d066f49cca98b2c54caa6ec649839a0307 100644 (file)
@@ -667,6 +667,7 @@ TEST(GssTsigCfgTest, configure) {
         "\"retry-interval\": 240,\n"
         "\"tkey-lifetime\": 7200,\n"
         "\"tkey-protocol\": \"UDP\",\n"
+        "\"exchange-timeout\": 2000,\n"
         "\"servers\": [\n"
         " {\n"
         "  \"domain-names\": [ ],\n"
@@ -679,7 +680,8 @@ TEST(GssTsigCfgTest, configure) {
         "  \"rekey-interval\": 64800,\n"
         "  \"retry-interval\": 2880,\n"
         "  \"tkey-lifetime\": 86400,\n"
-        "  \"tkey-protocol\": \"UDP\"\n"
+        "  \"tkey-protocol\": \"UDP\",\n"
+        "  \"exchange-timeout\": 4000\n"
         " },{\n"
         "  \"id\": \"bar\",\n"
         "  \"ip-address\": \"192.0.2.2\",\n"
@@ -713,6 +715,7 @@ TEST(GssTsigCfgTest, configure) {
     EXPECT_EQ(2880, server->getRetryInterval());
     EXPECT_EQ(86400, server->getKeyLifetime());
     EXPECT_EQ(IOFetch::UDP, server->getKeyProto());
+    EXPECT_EQ(4000, server->getExchangeTimeout());
 
     ASSERT_NO_THROW(server = servers.at(1));
     ASSERT_TRUE(server);
@@ -728,6 +731,7 @@ TEST(GssTsigCfgTest, configure) {
     EXPECT_EQ(240, server->getRetryInterval());
     EXPECT_EQ(7200, server->getKeyLifetime());
     EXPECT_EQ(IOFetch::UDP, server->getKeyProto());
+    EXPECT_EQ(2000, server->getExchangeTimeout());
 }
 
 /// @brief Check configure requires a map.
@@ -833,6 +837,13 @@ TEST(GssTsigCfgTest, configureUnexpectedType) {
     expected += location;
     EXPECT_THROW_MSG(cfg.configure(json), BadValue, expected);
 
+    config = "{ \"exchange-timeout\": false }";
+    ASSERT_NO_THROW(json = Element::fromJSON(config));
+    ASSERT_TRUE(json);
+    expected = "gss_tsig 'exchange-timeout' parameter is not an integer";
+    expected += location;
+    EXPECT_THROW_MSG(cfg.configure(json), BadValue, expected);
+
     config = "{ \"user-context\": [ ] }";
     ASSERT_NO_THROW(json = Element::fromJSON(config));
     ASSERT_TRUE(json);
@@ -949,6 +960,13 @@ TEST(GssTsigCfgTest, configureUnexpectedType) {
     expected += location;
     EXPECT_THROW_MSG(cfg.configure(json), BadValue, expected);
 
+    config = prefix + " \"exchange-timeout\": false } ] }";
+    ASSERT_NO_THROW(json = Element::fromJSON(config));
+    ASSERT_TRUE(json);
+    expected = "gss_tsig server 'exchange-timeout' parameter is not an integer";
+    expected += location;
+    EXPECT_THROW_MSG(cfg.configure(json), BadValue, expected);
+
     config = prefix + " \"user-context\": [ ] } ] }";
     ASSERT_NO_THROW(json = Element::fromJSON(config));
     ASSERT_TRUE(json);
@@ -1056,6 +1074,20 @@ TEST(GssTsigCfgTest, configureBadParameter) {
     expected = "'tkey-protocol' parameter must be UDP or TCP (<string>:1:129)";
     EXPECT_THROW_MSG(cfg.configure(json), BadValue, expected);
 
+    config = prefix + " \"exchange-timeout\": -1 } ] }";
+    ASSERT_NO_THROW(json = Element::fromJSON(config));
+    ASSERT_TRUE(json);
+    expected = "'exchange-timeout' parameter is out of range ";
+    expected += "[0..4294967295] (<string>:1:132)";
+    EXPECT_THROW_MSG(cfg.configure(json), BadValue, expected);
+
+    config = prefix + " \"exchange-timeout\": 4294967296 } ] }";
+    ASSERT_NO_THROW(json = Element::fromJSON(config));
+    ASSERT_TRUE(json);
+    expected = "'exchange-timeout' parameter is out of range ";
+    expected += "[0..4294967295] (<string>:1:132)";
+    EXPECT_THROW_MSG(cfg.configure(json), BadValue, expected);
+
     config = "{ \"servers\": [ { \"id\": \"\" } ] }";
     ASSERT_NO_THROW(json = Element::fromJSON(config));
     ASSERT_TRUE(json);