Similar to zone_config_settings_write and zone_config_settings_read this function provides an easy way to delete a config file.
Signed-off-by: Jonatan Schlag jonatan.schlag@ipfire.org --- src/functions/functions.zone | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+)
diff --git a/src/functions/functions.zone b/src/functions/functions.zone index acf68f5..44237cd 100644 --- a/src/functions/functions.zone +++ b/src/functions/functions.zone @@ -1272,6 +1272,24 @@ zone_config_settings_write() { settings_write "${path}" ${args} }
+zone_config_settings_destroy() { + # This function deletes the config file for a given zone and config + assert [ $# -ge 2 ] + local zone="${1}" + local config="${2}" + + local path="$(zone_dir "${zone}")/configs/${config}" + + # Check if path is valid + if [ ! -f ${path} ]; then + log ERROR "Path: '${path}' is not valid" + return ${EXIT_ERROR} + fi + + log DEBUG "Deleting config file ${path}" + rm -f "${path}" + +} zone_port_settings_read() { assert [ $# -ge 2 ]
We now just bring the hook down, execute hook_destroy which can be not empty inside the hook, because it is defined in src/header-config. After this we delete the config file.
Fixes: #11416
Signed-off-by: Jonatan Schlag jonatan.schlag@ipfire.org --- src/header-config | 4 ++++ src/header-zone | 16 +++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-)
diff --git a/src/header-config b/src/header-config index b697797..d55d7e5 100644 --- a/src/header-config +++ b/src/header-config @@ -22,3 +22,7 @@ hook_new() { cmd_not_implemented } + +hook_destroy() { + return ${EXIT_OK} +} diff --git a/src/header-zone b/src/header-zone index 2e3fa09..4d3c251 100644 --- a/src/header-zone +++ b/src/header-zone @@ -221,7 +221,21 @@ hook_config_destroy() { local hook=$(zone_config_get_hook_from_id ${zone} ${id}) assert isset hook
- hook_config_cmd "destroy" "${zone}" "${hook}" "${hook}.${id}" "$@" + # First we bring the hook down + hook_config_cmd "down" "${zone}" "${hook}" "${hook}.${id}" + + # If a hook_destroy function is implemented in the hook this function will be executed. + # If not a empty defined in header-config is executed. + if ! hook_config_cmd "destroy" "${zone}" "${hook}" "${hook}.${id}" "$@"; then + + # A better error message should printed inside the hook. + # We will not bring the config up because we do not know if it is safe or if some parts are already destroyed. + log ERROR "Could not destroy config with the follwoing id: ${id}" + return ${EXIT_ERROR} + fi + + # Now we delete the config of the zone + zone_config_settings_destroy "${zone}" "${hook}.${id}" }
hook_config_edit() {