diff options
| author | Daniil Baturin <daniil@vyos.io> | 2026-06-18 15:23:47 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-06-18 15:23:47 +0100 |
| commit | d3986571522e36f0fcf233e30e9589d4f239cf51 (patch) | |
| tree | 97be12cfd23b2060c1484870e790a625bd3c4e8b /src | |
| parent | 5566e3392db808839dd93a035b21b6f13a551da5 (diff) | |
| parent | b82e6f45df1b892b00f90ba64cb078160d030ae6 (diff) | |
| download | vyos-1x-d3986571522e36f0fcf233e30e9589d4f239cf51.tar.gz vyos-1x-d3986571522e36f0fcf233e30e9589d4f239cf51.zip | |
Merge pull request #5256 from natali-rs1985/T8524
dhcp-server: T8524: Validate DDNS key-name references defined tsig-key
Diffstat (limited to 'src')
| -rwxr-xr-x | src/conf_mode/service_dhcp-server.py | 37 |
1 files changed, 26 insertions, 11 deletions
diff --git a/src/conf_mode/service_dhcp-server.py b/src/conf_mode/service_dhcp-server.py index bb38a088a..e7c177f6e 100755 --- a/src/conf_mode/service_dhcp-server.py +++ b/src/conf_mode/service_dhcp-server.py @@ -232,15 +232,28 @@ def get_config(config=None): return dhcp -def verify_ddns_domain_servers(domain_type, domain): - if 'dns_server' in domain: - invalid_servers = [] - for server_no, server_config in domain['dns_server'].items(): - if 'address' not in server_config: - invalid_servers.append(server_no) - if len(invalid_servers) > 0: - raise ConfigError(f'{domain_type} DNS servers {", ".join(invalid_servers)} in DDNS configuration need to have an IP address') - return None + +def verify_ddns_domain(domain_type, domains, tsig_keys): + for domain_name, domain_config in domains.items(): + if 'dns_server' in domain_config: + invalid_servers = [] + for server_no, server_config in domain_config['dns_server'].items(): + if 'address' not in server_config: + invalid_servers.append(server_no) + if len(invalid_servers) > 0: + raise ConfigError( + f'{domain_type} domain "{domain_name}" DNS servers {", ".join(invalid_servers)} ' + 'in DDNS configuration need to have an IP address' + ) + + if 'key_name' in domain_config: + key_name = domain_config['key_name'] + if key_name not in tsig_keys: + raise ConfigError( + f'DDNS {domain_type} domain "{domain_name}" key-name "{key_name}" ' + 'is not defined in dynamic-dns-update tsig-key' + ) + def verify(dhcp): # bail out early - looks like removal from running config @@ -515,11 +528,13 @@ def verify(dhcp): if len(invalid_keys) > 0: raise ConfigError(f'Both algorithm and secret need to be set for TSIG keys: {", ".join(invalid_keys)}') + defined_tsig_keys = ddns.get('tsig_key', {}).keys() + if 'forward_domain' in ddns: - verify_ddns_domain_servers('Forward', ddns['forward_domain']) + verify_ddns_domain('Forward', ddns['forward_domain'], defined_tsig_keys) if 'reverse_domain' in ddns: - verify_ddns_domain_servers('Reverse', ddns['reverse_domain']) + verify_ddns_domain('Reverse', ddns['reverse_domain'], defined_tsig_keys) if 'client_class' in dhcp: # Check client class values are valid |
