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) {
parser->build(option_def);
parser->commit();
}
}
void
OptionDefListParser::commit() {
CfgMgr& cfg_mgr = CfgMgr::instance();
cfg_mgr.deleteOptionDefs();
// We need to move option definitions from the temporary
// storage to the storage.
std::list<std::string> space_names =
storage_->getOptionSpaceNames();
std::list<std::string> space_names = storage_->getOptionSpaceNames();
BOOST_FOREACH(std::string space_name, space_names) {
BOOST_FOREACH(OptionDefinitionPtr def,
......@@ -866,11 +862,24 @@ OptionDefListParser::commit() {
// values. The validation is expected to be made by the
// OptionDefParser when creating an option definition.
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(const std::string&,
const isc::dhcp::Subnet::RelayInfoPtr& relay_info,
......
......@@ -760,18 +760,21 @@ public:
/// @brief Parse configuration entries.
///
/// This function parses configuration entries and creates instances
/// of option definitions.
/// This function parses configuration entries, creates instances
/// of option definitions and tries to add them to the Configuration
/// Manager.
///
/// @param option_def_list pointer to an element that holds entries
/// that define option definitions.
/// @throw DhcpConfigError if configuration parsing fails.
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();
private:
/// @brief storage for option definitions.
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