From 5c139602d7656df74060fee63461ffba4f290547 Mon Sep 17 00:00:00 2001 From: Francis Dupont Date: Wed, 10 Apr 2019 19:32:28 +0200 Subject: [PATCH] [500-strengthen-option-def-parser] Updating bound 0 --- src/bin/dhcp4/json_config_parser.cc | 96 ------------------- src/lib/dhcpsrv/parsers/dhcp_parsers.cc | 3 - .../dhcpsrv/tests/dhcp_parsers_unittest.cc | 15 --- 3 files changed, 114 deletions(-) diff --git a/src/bin/dhcp4/json_config_parser.cc b/src/bin/dhcp4/json_config_parser.cc index 049f06ab7e..cbb6425e67 100644 --- a/src/bin/dhcp4/json_config_parser.cc +++ b/src/bin/dhcp4/json_config_parser.cc @@ -667,101 +667,5 @@ configureDhcp4Server(Dhcpv4Srv& server, isc::data::ConstElementPtr config_set, return (answer); } -void databaseConfigFetch(const SrvConfigPtr& srv_cfg) { - - ConfigBackendDHCPv4Mgr& mgr = ConfigBackendDHCPv4Mgr::instance(); - - // Close any existing CB databasess, then open all in srv_cfg (if any) - if (!databaseConfigConnect(srv_cfg)) { - // There are no CB databases so we're done - return; - } - - LOG_INFO(dhcp4_logger, DHCP4_CONFIG_FETCH); - - // For now we find data based on first backend that has it. - BackendSelector backend_selector(BackendSelector::Type::UNSPEC); - - // Use the server_tag if set, otherwise use ALL. - std::string server_tag = srv_cfg->getServerTag(); - ServerSelector& server_selector = (server_tag.empty()? ServerSelector::ALL() - : ServerSelector::ONE(server_tag)); - // Create the external config into which we'll fetch backend config data. - SrvConfigPtr external_cfg = CfgMgr::instance().createExternalCfg(); - - // First let's fetch the globals and add them to external config. - data::StampedValueCollection globals; - globals = mgr.getPool()->getAllGlobalParameters4(backend_selector, server_selector); - addGlobalsToConfig(external_cfg, globals); - - // Now we fetch the option definitions and add them. - OptionDefContainer option_defs = mgr.getPool()->getAllOptionDefs4(backend_selector, - server_selector); - for (auto option_def = option_defs.begin(); option_def != option_defs.end(); ++option_def) { - external_cfg->getCfgOptionDef()->add((*option_def), (*option_def)->getOptionSpaceName()); - } - - // Next fetch the options. They are returned as a container of OptionDescriptors. - OptionContainer options = mgr.getPool()->getAllOptions4(backend_selector, server_selector); - for (auto option = options.begin(); option != options.end(); ++option) { - external_cfg->getCfgOption()->add((*option), (*option).space_name_); - } - - // Now fetch the shared networks. - SharedNetwork4Collection networks = mgr.getPool()->getAllSharedNetworks4(backend_selector, - server_selector); - for (auto network = networks.begin(); network != networks.end(); ++network) { - external_cfg->getCfgSharedNetworks4()->add((*network)); - } - - // Next we fetch subnets. - Subnet4Collection subnets = mgr.getPool()->getAllSubnets4(backend_selector, server_selector); - for (auto subnet = subnets.begin(); subnet != subnets.end(); ++subnet) { - external_cfg->getCfgSubnets4()->add((*subnet)); - } - - // Now we merge the fecthed configuration into the staging configuration. - CfgMgr::instance().mergeIntoStagingCfg(external_cfg->getSequence()); - LOG_INFO(dhcp4_logger, DHCP4_CONFIG_MERGED); -} - -bool databaseConfigConnect(const SrvConfigPtr& srv_cfg) { - // We need to get rid of any existing backends. These would be any - // opened by previous configuration cycle. - ConfigBackendDHCPv4Mgr& mgr = ConfigBackendDHCPv4Mgr::instance(); - mgr.delAllBackends(); - - // Fetch the config-control info. - ConstConfigControlInfoPtr config_ctl = srv_cfg->getConfigControlInfo(); - if (!config_ctl || config_ctl->getConfigDatabases().empty()) { - // No config dbs, nothing to do. - return (false); - } - - // Iterate over the configured DBs and instantiate them. - for (auto db : config_ctl->getConfigDatabases()) { - LOG_INFO(dhcp4_logger, DHCP4_OPEN_CONFIG_DB) - .arg(db.redactedAccessString()); - mgr.addBackend(db.getAccessString()); - } - - // Let the caller know we have opened DBs. - return (true); -} - - -void addGlobalsToConfig(SrvConfigPtr external_cfg, data::StampedValueCollection& cb_globals) { - const auto& index = cb_globals.get(); - for (auto cb_global = index.begin(); cb_global != index.end(); ++cb_global) { - - if ((*cb_global)->amNull()) { - continue; - } - - external_cfg->addConfiguredGlobal((*cb_global)->getName(), - (*cb_global)->getElementValue()); - } -} - }; // end of isc::dhcp namespace }; // end of isc namespace diff --git a/src/lib/dhcpsrv/parsers/dhcp_parsers.cc b/src/lib/dhcpsrv/parsers/dhcp_parsers.cc index ea8ad59ea3..acbee86c10 100644 --- a/src/lib/dhcpsrv/parsers/dhcp_parsers.cc +++ b/src/lib/dhcpsrv/parsers/dhcp_parsers.cc @@ -135,9 +135,6 @@ OptionDefParser::parse(ConstElementPtr option_def) { if (code64 < 0) { isc_throw(DhcpConfigError, "option code must not be negative " "(" << getPosition("code", option_def) << ")"); - } else if (code64 == 0) { - isc_throw(DhcpConfigError, "option code must not be zero " - "(" << getPosition("code", option_def) << ")"); } else if (address_family_ == AF_INET && code64 > std::numeric_limits::max()) { isc_throw(DhcpConfigError, "invalid option code '" << code64 diff --git a/src/lib/dhcpsrv/tests/dhcp_parsers_unittest.cc b/src/lib/dhcpsrv/tests/dhcp_parsers_unittest.cc index 949c7f7070..89d020e9ea 100644 --- a/src/lib/dhcpsrv/tests/dhcp_parsers_unittest.cc +++ b/src/lib/dhcpsrv/tests/dhcp_parsers_unittest.cc @@ -736,21 +736,6 @@ TEST_F(ParseConfigTest, badCodeOptionDefTest) { ASSERT_NE(0, rcode); } - { - SCOPED_TRACE("zero code"); - std::string config = - "{ \"option-def\": [ {" - " \"name\": \"zero\"," - " \"code\": 0," - " \"type\": \"ipv6-address\"," - " \"space\": \"isc\"" - " } ]" - "}"; - - int rcode = parseConfiguration(config, true); - ASSERT_NE(0, rcode); - } - { SCOPED_TRACE("out of range code (v6)"); std::string config = -- 2.47.2