mirror of
https://gitlab.isc.org/isc-projects/kea
synced 2025-08-30 21:45:37 +00:00
[#1405] disable reservatio modes flags if any is explicitly configured
This commit is contained in:
@@ -367,22 +367,22 @@ configureDhcp4Server(Dhcpv4Srv& server, isc::data::ConstElementPtr config_set,
|
|||||||
// default values and will insert derived values as well.
|
// default values and will insert derived values as well.
|
||||||
mutable_cfg = boost::const_pointer_cast<Element>(config_set);
|
mutable_cfg = boost::const_pointer_cast<Element>(config_set);
|
||||||
|
|
||||||
|
bool found = false;
|
||||||
|
ConstElementPtr reservations_out_of_pool = mutable_cfg->get("reservations-out-of-pool");
|
||||||
|
if (reservations_out_of_pool) {
|
||||||
|
found = true;
|
||||||
|
}
|
||||||
|
ConstElementPtr reservations_in_subnet = mutable_cfg->get("reservations-in-subnet");
|
||||||
|
if (reservations_in_subnet) {
|
||||||
|
found = true;
|
||||||
|
}
|
||||||
|
ConstElementPtr reservations_global = mutable_cfg->get("reservations-global");
|
||||||
|
if (reservations_global) {
|
||||||
|
found = true;
|
||||||
|
}
|
||||||
ConstElementPtr reservation_mode = mutable_cfg->get("reservation-mode");
|
ConstElementPtr reservation_mode = mutable_cfg->get("reservation-mode");
|
||||||
if (reservation_mode) {
|
if (reservation_mode) {
|
||||||
// log warning for deprecated option
|
// log warning for deprecated option
|
||||||
bool found = false;
|
|
||||||
reservation_mode = mutable_cfg->get("reservations-out-of-pool");
|
|
||||||
if (reservation_mode) {
|
|
||||||
found = true;
|
|
||||||
}
|
|
||||||
reservation_mode = mutable_cfg->get("reservations-in-subnet");
|
|
||||||
if (reservation_mode) {
|
|
||||||
found = true;
|
|
||||||
}
|
|
||||||
reservation_mode = mutable_cfg->get("reservations-global");
|
|
||||||
if (reservation_mode) {
|
|
||||||
found = true;
|
|
||||||
}
|
|
||||||
if (found) {
|
if (found) {
|
||||||
isc_throw(DhcpConfigError, "invalid use of both 'reservation-mode'"
|
isc_throw(DhcpConfigError, "invalid use of both 'reservation-mode'"
|
||||||
" and one of 'reservations-out-of-pool'"
|
" and one of 'reservations-out-of-pool'"
|
||||||
@@ -391,6 +391,19 @@ configureDhcp4Server(Dhcpv4Srv& server, isc::data::ConstElementPtr config_set,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// reset all other reservation flags to overwrite default values.
|
||||||
|
if (found) {
|
||||||
|
if (!reservations_out_of_pool) {
|
||||||
|
mutable_cfg->set("reservations-out-of-pool", Element::create(false));
|
||||||
|
}
|
||||||
|
if (!reservations_in_subnet) {
|
||||||
|
mutable_cfg->set("reservations-in-subnet", Element::create(false));
|
||||||
|
}
|
||||||
|
if (!reservations_global) {
|
||||||
|
mutable_cfg->set("reservations-global", Element::create(false));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Relocate dhcp-ddns parameters that have moved to global scope.
|
// Relocate dhcp-ddns parameters that have moved to global scope.
|
||||||
// Rule is that a global value overrides the dhcp-ddns value, so
|
// Rule is that a global value overrides the dhcp-ddns value, so
|
||||||
// we need to do this before we apply global defaults.
|
// we need to do this before we apply global defaults.
|
||||||
|
@@ -468,22 +468,22 @@ configureDhcp6Server(Dhcpv6Srv& server, isc::data::ConstElementPtr config_set,
|
|||||||
// default values and will insert derived values as well.
|
// default values and will insert derived values as well.
|
||||||
mutable_cfg = boost::const_pointer_cast<Element>(config_set);
|
mutable_cfg = boost::const_pointer_cast<Element>(config_set);
|
||||||
|
|
||||||
|
bool found = false;
|
||||||
|
ConstElementPtr reservations_out_of_pool = mutable_cfg->get("reservations-out-of-pool");
|
||||||
|
if (reservations_out_of_pool) {
|
||||||
|
found = true;
|
||||||
|
}
|
||||||
|
ConstElementPtr reservations_in_subnet = mutable_cfg->get("reservations-in-subnet");
|
||||||
|
if (reservations_in_subnet) {
|
||||||
|
found = true;
|
||||||
|
}
|
||||||
|
ConstElementPtr reservations_global = mutable_cfg->get("reservations-global");
|
||||||
|
if (reservations_global) {
|
||||||
|
found = true;
|
||||||
|
}
|
||||||
ConstElementPtr reservation_mode = mutable_cfg->get("reservation-mode");
|
ConstElementPtr reservation_mode = mutable_cfg->get("reservation-mode");
|
||||||
if (reservation_mode) {
|
if (reservation_mode) {
|
||||||
// log warning for deprecated option
|
// log warning for deprecated option
|
||||||
bool found = false;
|
|
||||||
reservation_mode = mutable_cfg->get("reservations-out-of-pool");
|
|
||||||
if (reservation_mode) {
|
|
||||||
found = true;
|
|
||||||
}
|
|
||||||
reservation_mode = mutable_cfg->get("reservations-in-subnet");
|
|
||||||
if (reservation_mode) {
|
|
||||||
found = true;
|
|
||||||
}
|
|
||||||
reservation_mode = mutable_cfg->get("reservations-global");
|
|
||||||
if (reservation_mode) {
|
|
||||||
found = true;
|
|
||||||
}
|
|
||||||
if (found) {
|
if (found) {
|
||||||
isc_throw(DhcpConfigError, "invalid use of both 'reservation-mode'"
|
isc_throw(DhcpConfigError, "invalid use of both 'reservation-mode'"
|
||||||
" and one of 'reservations-out-of-pool'"
|
" and one of 'reservations-out-of-pool'"
|
||||||
@@ -492,6 +492,19 @@ configureDhcp6Server(Dhcpv6Srv& server, isc::data::ConstElementPtr config_set,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// reset all other reservation flags to overwrite default values.
|
||||||
|
if (found) {
|
||||||
|
if (!reservations_out_of_pool) {
|
||||||
|
mutable_cfg->set("reservations-out-of-pool", Element::create(false));
|
||||||
|
}
|
||||||
|
if (!reservations_in_subnet) {
|
||||||
|
mutable_cfg->set("reservations-in-subnet", Element::create(false));
|
||||||
|
}
|
||||||
|
if (!reservations_global) {
|
||||||
|
mutable_cfg->set("reservations-global", Element::create(false));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Relocate dhcp-ddns parameters that have moved to global scope.
|
// Relocate dhcp-ddns parameters that have moved to global scope.
|
||||||
// Rule is that a global value overrides the dhcp-ddns value, so
|
// Rule is that a global value overrides the dhcp-ddns value, so
|
||||||
// we need to do this before we apply global defaults.
|
// we need to do this before we apply global defaults.
|
||||||
|
Reference in New Issue
Block a user