dynamicdns: Fix adding null domain into configuration

When old configuration is not set and is exported with new code into newer
format, the result is a domain added with domain name 'null'. This causes issues
with UI not showing configuration and with null domain being added into
configurations of various daemons.

Tests:

- To reproduce the issue, switch to a revision with old dynamicdns code. Then
switch to a latest version without the fix. A 'null' domain is added to
configuration.

- To reproduce the issue, switch to a revision with old dynamicdns code. Then
switch to a latest version with the fix. A 'null' domain is not added to
configuration.

- With null domain in the configuration. Start FreedomBox with the fix. The null
domain should be removed and null domain should not be announced to other
daemons.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
This commit is contained in:
Sunil Mohan Adapa 2022-02-24 23:16:21 -08:00 committed by James Valleroy
parent 354985f97c
commit d77f812d11
No known key found for this signature in database
GPG Key ID: 77C0C75E7B650808
2 changed files with 16 additions and 2 deletions

View File

@ -106,7 +106,10 @@ def subcommand_export_config(_):
and _active_config.exists()):
enabled = True
output_config = {'enabled': enabled, 'domains': {domain['domain']: domain}}
output_config = {'enabled': enabled, 'domains': {}}
if domain['domain']:
output_config['domains'][domain['domain']] = domain
print(json.dumps(output_config))

View File

@ -258,7 +258,18 @@ def get_config():
"""Return the current configuration."""
default_config = {'domains': {}}
config = kvstore.get_default('dynamicdns_config', '{}')
return json.loads(config) or default_config
config = json.loads(config) or default_config
return _fix_corrupt_config(config)
def _fix_corrupt_config(config):
"""Fix malformed configuration result of bug in older version."""
if 'null' not in config['domains']:
return config
del config['domains']['null']
set_config(config)
return config
def set_config(config):