summaryrefslogtreecommitdiff
path: root/src/conf_mode/dhcp_server.py
diff options
context:
space:
mode:
authorChristian Poessinger <christian@poessinger.com>2021-01-03 10:56:08 +0100
committerChristian Poessinger <christian@poessinger.com>2021-01-03 10:56:08 +0100
commitbc599ab4610f8bfd5e19a9c4cfe6bb50b4ceb0b0 (patch)
tree13c6d30f65539e777b82207dbb654c13b2bb01db /src/conf_mode/dhcp_server.py
parentcdc1748b8489251a45875736a99633740529ea0c (diff)
downloadvyos-1x-bc599ab4610f8bfd5e19a9c4cfe6bb50b4ceb0b0.tar.gz
vyos-1x-bc599ab4610f8bfd5e19a9c4cfe6bb50b4ceb0b0.zip
dhcp: T2562: harden implementation for non existing shared-subnets
Diffstat (limited to 'src/conf_mode/dhcp_server.py')
-rwxr-xr-xsrc/conf_mode/dhcp_server.py39
1 files changed, 21 insertions, 18 deletions
diff --git a/src/conf_mode/dhcp_server.py b/src/conf_mode/dhcp_server.py
index 392a69427..84a8736e8 100755
--- a/src/conf_mode/dhcp_server.py
+++ b/src/conf_mode/dhcp_server.py
@@ -110,24 +110,27 @@ def get_config(config=None):
# T2665: defaults include lease time per TAG node which need to be added to
# individual subnet definitions
default_values = defaults(base + ['shared-network-name', 'subnet'])
- for network, network_config in (dict_search('shared_network_name', dhcp).items() or {}):
- for subnet, subnet_config in (dict_search('subnet', network_config).items() or {}):
- if 'lease' not in subnet_config:
- dhcp['shared_network_name'][network]['subnet'][subnet] = dict_merge(
- default_values, dhcp['shared_network_name'][network]['subnet'][subnet])
-
- # If exclude IP addresses are defined we need to slice them out of
- # the defined ranges
- if {'exclude', 'range'} <= set(subnet_config):
- new_range_id = 0
- new_range_dict = {}
- for r, r_config in subnet_config['range'].items():
- for slice in dhcp_slice_range(subnet_config['exclude'], r_config):
- new_range_dict.update({new_range_id : slice})
- new_range_id +=1
-
- dhcp['shared_network_name'][network]['subnet'][subnet].update(
- {'range' : new_range_dict})
+
+ if 'shared_network_name' in dhcp:
+ for network, network_config in dhcp['shared_network_name'].items():
+ if 'subnet' in network_config:
+ for subnet, subnet_config in network_config['subnet'].items():
+ if 'lease' not in subnet_config:
+ dhcp['shared_network_name'][network]['subnet'][subnet] = dict_merge(
+ default_values, dhcp['shared_network_name'][network]['subnet'][subnet])
+
+ # If exclude IP addresses are defined we need to slice them out of
+ # the defined ranges
+ if {'exclude', 'range'} <= set(subnet_config):
+ new_range_id = 0
+ new_range_dict = {}
+ for r, r_config in subnet_config['range'].items():
+ for slice in dhcp_slice_range(subnet_config['exclude'], r_config):
+ new_range_dict.update({new_range_id : slice})
+ new_range_id +=1
+
+ dhcp['shared_network_name'][network]['subnet'][subnet].update(
+ {'range' : new_range_dict})
return dhcp