]> git.ipfire.org Git - network.git/blobdiff - src/functions/functions.settings
firewall: Fix reading/writing settings
[network.git] / src / functions / functions.settings
index 9e78858f0f54ab7039bff9d52ae29742d14b44d7..5728e72b0161e5186bbef21697bd6d17aba71697 100644 (file)
@@ -19,7 +19,7 @@
 #                                                                             #
 ###############################################################################
 
-function settings_read() {
+settings_read() {
        local file="${1}"
        assert isset file
        shift
@@ -37,7 +37,7 @@ function settings_read() {
                                list_append valid_keys "${arg}"
                                ;;
                esac
-       done <<< "$(args $@)"
+       done <<< "$(args "$@")"
 
        if [ -d "${file}" ]; then
                error "Not a configuration file: '${file}'"
@@ -55,16 +55,10 @@ function settings_read() {
 
                                # If valid keys is set, key must be in the list.
                                if [ -n "${valid_keys}" ]; then
-                                       if ! listmatch ${key} ${valid_keys}; then
-                                               if ! enabled ignore_superfluous_settings; then
-                                                       log DEBUG "Ignoring configuration setting: ${key}"
-                                               fi
-
-                                               continue
-                                       fi
+                                       list_match ${key} ${valid_keys} || continue
                                fi
 
-                               val=$(cli_get_val ${line})
+                               val=$(cli_get_val "${line}")
                                val=$(settings_strip ${val})
 
                                # Assign variable.
@@ -77,7 +71,7 @@ function settings_read() {
        done < ${file}
 }
 
-function settings_read_array() {
+settings_read_array() {
        local file=${1}
        assert isset file
        shift
@@ -99,13 +93,13 @@ function settings_read_array() {
 
                                # If valid_keys is set, key must be in the list.
                                if [ -n "${valid_keys}" ]; then
-                                       if ! listmatch ${key} ${valid_keys}; then
+                                       if ! list_match ${key} ${valid_keys}; then
                                                log DEBUG "Ignoring configuration setting: ${key}"
                                                continue
                                        fi
                                fi
 
-                               val=$(cli_get_val ${line})
+                               val=$(cli_get_val "${line}")
                                val=$(settings_strip ${val})
 
                                # Assign variable.
@@ -119,7 +113,7 @@ function settings_read_array() {
 }
 
 # Strip leading and trailing "s.
-function settings_strip() {
+settings_strip() {
        local var="$@"
 
        # Do nothing for strings that contain spaces.
@@ -131,7 +125,7 @@ function settings_strip() {
        unquote "${var}"
 }
 
-function settings_write() {
+settings_write() {
        local settings_file="${1}"
        assert isset settings_file
        shift
@@ -152,25 +146,26 @@ function settings_write() {
                                ;;
                esac
                shift
-       done <<< "$(args $@)"
+       done <<< "$(args "$@")"
 
        # Check if all values to be written are sane
        if isset check_func && ! settings_check "${check_func}"; then
                return ${EXIT_ERROR}
        fi
 
-       log DEBUG "Writing settings file ${settings_file}."
+       if ! make_parent_directory "${settings_file}"; then
+               return ${EXIT_ERROR}
+       fi
 
-       mkdir -p $(dirname ${settings_file}) 2>/dev/null
-       > ${settings_file}
+       log DEBUG "Writing settings file '${settings_file}'"
 
        local param
-       for param in $(listsort $@); do
-               echo "${param}=\"${!param}\"" >> ${settings_file}
-       done
+       for param in $(list_sort "$@"); do
+               echo "${param}=\"${!param}\""
+       done > ${settings_file}
 }
 
-function settings_remove() {
+settings_remove() {
        local settings_file="${1}"
 
        local abspath="$(readlink -e "${settings_file}")"
@@ -179,18 +174,18 @@ function settings_remove() {
                return ${EXIT_ERROR}
        fi
 
-       rm -f "${settings_file}"
+       file_delete "${settings_file}"
 }
 
-function settings_print() {
+settings_print() {
        local param
 
-       for param in $(listsort $@); do
+       for param in $(list_sort "$@"); do
                printf "%-32s = %s\n" "${param}" "${!param}"
        done
 }
 
-function settings_check() {
+settings_check() {
        local check_func="${1}"
 
        # Execute the check function
@@ -221,12 +216,12 @@ function settings_check() {
        return ${EXIT_ERROR}
 }
 
-function settings_set() {
+settings_set() {
        while [ $# -gt 0 ]; do
                case "${1}" in
                        *=*)
-                               local key=$(cli_get_key ${1})
-                               local val=$(cli_get_val ${1})
+                               local key=$(cli_get_key "${1}")
+                               local val=$(cli_get_val "${1}")
 
                                log INFO "Setting configuration option '${key}=${val}'".
 
@@ -240,7 +235,7 @@ function settings_set() {
        done
 }
 
-function network_settings_read() {
+network_settings_read() {
        local options="${NETWORK_SETTINGS_FILE_PARAMS}"
 
        # If the DEBUG variable has already been set,
@@ -252,29 +247,63 @@ function network_settings_read() {
        settings_read "${NETWORK_SETTINGS_FILE}" ${options}
 }
 
-function network_settings_write() {
+network_settings_write() {
        settings_write "${NETWORK_SETTINGS_FILE}" ${NETWORK_SETTINGS_FILE_PARAMS}
+}
+
+network_settings_set() {
+       # Process any settings that require immediate actin
+       while [ $# -gt 0 ]; do
+               local arg=${1}
+               shift
+
+               case "${arg}" in
+                       *=*)
+                               local key=$(cli_get_key "${arg}")
+                               local val=$(cli_get_val "${arg}")
+
+                               case "${key}" in
+                                       DNS_RANDOMIZE|DNS_SEARCH_DOMAIN|DNS_USE_LOCAL_RESOLVER)
+                                               dns_generate_resolvconf
+                                               ;;
+
+                                       WIRELESS_REGULATORY_DOMAIN)
+                                               if ! wireless_valid_reg_domain "${val}"; then
+                                                       warning "Ignoring invalid wireless regulatory domain: ${val}"
+                                                       continue
+                                               fi
+
+                                               if ! wireless_set_reg_domain "${val}"; then
+                                                       error "Error setting wireless regulatory domain: ${val}"
+                                               fi
+                                               ;;
+                               esac
+                               ;;
+               esac
+
+               # Save setting
+               settings_set ${arg}
+       done
 
-       # Update DNS configuration.
-       dns_generate_resolvconf
+       return ${EXIT_OK}
 }
 
-function network_settings_print() {
+network_settings_print() {
        settings_print ${NETWORK_SETTINGS_FILE_PARAMS}
 }
 
-function network_settings_list() {
+network_settings_list() {
        print "${NETWORK_SETTINGS_FILE_PARAMS}"
 }
 
-function firewall_settings_read() {
-       settings_read "${FIREWALL_SETTINGS_FILE}" "${FIREWALL_SETTINGS_PARAMS}"
+firewall_settings_read() {
+       settings_read "${FIREWALL_SETTINGS_FILE}" "${FIREWALL_SETTINGS[*]}"
 }
 
-function firewall_settings_write() {
-       settings_write "${FIREWALL_SETTINGS_FILE}" "${FIREWALL_SETTINGS_PARAMS}"
+firewall_settings_write() {
+       settings_write "${FIREWALL_SETTINGS_FILE}" "${FIREWALL_SETTINGS[*]}"
 }
 
-function firewall_settings_print() {
-       settings_print "${FIREWALL_SETTINGS_PARAMS}"
+firewall_settings_print() {
+       settings_print "${FIREWALL_SETTINGS[*]}"
 }