X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=src%2Ffunctions%2Ffunctions.settings;h=5728e72b0161e5186bbef21697bd6d17aba71697;hb=c69adafd8ad8abf4f14b6fe110bbd8efb5eca596;hp=9e78858f0f54ab7039bff9d52ae29742d14b44d7;hpb=bae373600e3519cee78b44b931289532d4dcffa0;p=network.git diff --git a/src/functions/functions.settings b/src/functions/functions.settings index 9e78858f..5728e72b 100644 --- a/src/functions/functions.settings +++ b/src/functions/functions.settings @@ -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[*]}" }