Commit db9aaee9 authored by Marcin Siodelski's avatar Marcin Siodelski
Browse files

[3409] Append line number when adding duplicated option definition.

parent c49d5606
...@@ -847,17 +847,13 @@ OptionDefListParser::build(ConstElementPtr option_def_list) { ...@@ -847,17 +847,13 @@ OptionDefListParser::build(ConstElementPtr option_def_list) {
parser->build(option_def); parser->build(option_def);
parser->commit(); parser->commit();
} }
}
void
OptionDefListParser::commit() {
CfgMgr& cfg_mgr = CfgMgr::instance(); CfgMgr& cfg_mgr = CfgMgr::instance();
cfg_mgr.deleteOptionDefs(); cfg_mgr.deleteOptionDefs();
// We need to move option definitions from the temporary // We need to move option definitions from the temporary
// storage to the storage. // storage to the storage.
std::list<std::string> space_names = std::list<std::string> space_names = storage_->getOptionSpaceNames();
storage_->getOptionSpaceNames();
BOOST_FOREACH(std::string space_name, space_names) { BOOST_FOREACH(std::string space_name, space_names) {
BOOST_FOREACH(OptionDefinitionPtr def, BOOST_FOREACH(OptionDefinitionPtr def,
...@@ -866,11 +862,24 @@ OptionDefListParser::commit() { ...@@ -866,11 +862,24 @@ OptionDefListParser::commit() {
// values. The validation is expected to be made by the // values. The validation is expected to be made by the
// OptionDefParser when creating an option definition. // OptionDefParser when creating an option definition.
assert(def); assert(def);
cfg_mgr.addOptionDef(def, space_name); // The Config Manager may thrown an exception if the duplicated
// definition is being added. Catch the exceptions here to and
// append the position in the config.
try {
cfg_mgr.addOptionDef(def, space_name);
} catch (const std::exception& ex) {
isc_throw(DhcpConfigError, ex.what() << " ("
<< option_def_list->getPosition() << ")");
}
} }
} }
} }
void
OptionDefListParser::commit() {
// Do nothing.
}
//****************************** RelayInfoParser ******************************** //****************************** RelayInfoParser ********************************
RelayInfoParser::RelayInfoParser(const std::string&, RelayInfoParser::RelayInfoParser(const std::string&,
const isc::dhcp::Subnet::RelayInfoPtr& relay_info, const isc::dhcp::Subnet::RelayInfoPtr& relay_info,
......
...@@ -760,18 +760,21 @@ public: ...@@ -760,18 +760,21 @@ public:
/// @brief Parse configuration entries. /// @brief Parse configuration entries.
/// ///
/// This function parses configuration entries and creates instances /// This function parses configuration entries, creates instances
/// of option definitions. /// of option definitions and tries to add them to the Configuration
/// Manager.
/// ///
/// @param option_def_list pointer to an element that holds entries /// @param option_def_list pointer to an element that holds entries
/// that define option definitions. /// that define option definitions.
/// @throw DhcpConfigError if configuration parsing fails. /// @throw DhcpConfigError if configuration parsing fails.
void build(isc::data::ConstElementPtr option_def_list); void build(isc::data::ConstElementPtr option_def_list);
/// @brief Stores option definitions in the CfgMgr. /// @brief Commits option definitions.
///
/// Currently this function is no-op, because option definitions are
/// added to the Configuration Manager in the @c build method.
void commit(); void commit();
private:
/// @brief storage for option definitions. /// @brief storage for option definitions.
OptionDefStoragePtr storage_; OptionDefStoragePtr storage_;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment