]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[503-refuse-option-definitions-which-duplicate-a-name-space] Check name duplicate...
authorFrancis Dupont <fdupont@isc.org>
Tue, 26 Feb 2019 19:51:51 +0000 (20:51 +0100)
committerFrancis Dupont <fdupont@isc.org>
Fri, 12 Apr 2019 13:39:04 +0000 (15:39 +0200)
src/lib/dhcpsrv/cfg_option_def.cc
src/lib/dhcpsrv/tests/cfg_option_def_unittest.cc

index 26aff35f10033e6ae185c5bbd9bd5b856f49280f..f8d0a25c458ddeb617740edba6ab6c6f984944b9 100644 (file)
@@ -91,12 +91,20 @@ CfgOptionDef::add(const OptionDefinitionPtr& def,
         isc_throw(DuplicateOptionDefinition, "option definition with code '"
                   << def->getCode() << "' already exists in option"
                   " space '" << option_space << "'");
+    } else if (get(option_space, def->getName())) {
+        isc_throw(DuplicateOptionDefinition, "option definition with name '"
+                  << def->getName() << "' already exists in option"
+                  " space '" << option_space << "'");
 
     // Must not override standard option definition.
     } else if (LibDHCP::getOptionDef(option_space, def->getCode())) {
         isc_throw(BadValue, "unable to override definition of option '"
                   << def->getCode() << "' in standard option space '"
                   << option_space << "'");
+    } else if (LibDHCP::getOptionDef(option_space, def->getName())) {
+        isc_throw(BadValue, "unable to override definition of option '"
+                  << def->getName() << "' in standard option space '"
+                  << option_space << "'");
     }
     // Add the definition.
     option_definitions_.addItem(def, option_space);
index 48f945aa89b1e2956894937ab5bfc74a426cf953..aa5b1ca5379aec093ae120baeba3c823345f1815 100644 (file)
@@ -245,6 +245,14 @@ TEST(CfgOptionDefTest, overrideStdOptionDef) {
     def.reset(new OptionDefinition("routers", DHO_ROUTERS, "uint32"));
     EXPECT_THROW(cfg.add(def, DHCP4_OPTION_SPACE), isc::BadValue);
 
+    // Check code duplicate (same code, different name).
+    def.reset(new OptionDefinition("routers-bis", DHO_ROUTERS, "uint32"));
+    EXPECT_THROW(cfg.add(def, DHCP4_OPTION_SPACE), isc::BadValue);
+
+    // Check name duplicate (different code, same name).
+    def.reset(new OptionDefinition("routers", 170, "uint32"));
+    EXPECT_THROW(cfg.add(def, DHCP4_OPTION_SPACE), isc::BadValue);
+
     /// There is no definition for unassigned option 170.
     def.reset(new OptionDefinition("unassigned-option-170", 170, "string"));
     EXPECT_NO_THROW(cfg.add(def, DHCP4_OPTION_SPACE));