From: Francis Dupont Date: Tue, 26 Feb 2019 19:51:51 +0000 (+0100) Subject: [503-refuse-option-definitions-which-duplicate-a-name-space] Check name duplicate... X-Git-Tag: Kea-1.6.0-beta~266 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0e7cca473395a51301cbb48147af3c34fdfd6b58;p=thirdparty%2Fkea.git [503-refuse-option-definitions-which-duplicate-a-name-space] Check name duplicate in option definitions --- diff --git a/src/lib/dhcpsrv/cfg_option_def.cc b/src/lib/dhcpsrv/cfg_option_def.cc index 26aff35f10..f8d0a25c45 100644 --- a/src/lib/dhcpsrv/cfg_option_def.cc +++ b/src/lib/dhcpsrv/cfg_option_def.cc @@ -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); diff --git a/src/lib/dhcpsrv/tests/cfg_option_def_unittest.cc b/src/lib/dhcpsrv/tests/cfg_option_def_unittest.cc index 48f945aa89..aa5b1ca537 100644 --- a/src/lib/dhcpsrv/tests/cfg_option_def_unittest.cc +++ b/src/lib/dhcpsrv/tests/cfg_option_def_unittest.cc @@ -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));