initscript functions: add readhash

To avoid the usage of eval and to store the config in an key value
array, we introduce an new function. The tests only check if we
read the correct value to the correct variable.

One comment on the implementation as this has created some headache:

>From https://www.gnu.org/software/bash/manual/bash.html#Bourne-Shell-Builtins

	"When used in a function, declare makes each name local, as with the local command, unless the -g option is used."

So we need to use -g here

Signed-off-by: Jonatan Schlag <jonatan.schlag@ipfire.org>
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
This commit is contained in:
Jonatan Schlag
2024-06-16 18:02:37 +02:00
committed by Michael Tremer
parent acde9c1a13
commit 96bb3ba8b8
3 changed files with 48 additions and 0 deletions

View File

@@ -890,3 +890,18 @@ volume_fs_type() {
stat -f --format="%T" ${1}
}
readhash() {
local array="${1}"
local file="${2}"
declare -A -g "${array}"
local line
while read -r line; do
local key="${line%=*}"
local val="${line#*=}"
printf -v "${array}[${key}]" "%s" "${val}"
done < "${file}"
}

View File

@@ -0,0 +1,17 @@
CONFIG_TYPE=3
GREEN_DEV=green0
GREEN_MACADDR=00:c0:08:8a:a0:47
GREEN_DRIVER=r8175
RED_DEV=red0
RED_MACADDR=00:c0:08:8a:a0:56
RED_DRIVER=r8283
BLUE_DEV='blue0 net0'
BLUE_MACADDR=bc:30:7d:58:6b:e3
BLUE_DRIVER=rt2800
RED_DHCP_HOSTNAME=ipfire
RED_DHCP_FORCE_MTU=
RED_ADDRESS=0.0.0.0
RED_NETMASK=0.0.0.0
RED_TYPE=PPPOE
RED_NETADDRESS=0.0.0.0

View File

@@ -0,0 +1,16 @@
#!/usr/bin/bash
SCRIPT_PATH="$(dirname "$(readlink -f "$0")")"
ROOT="$(readlink -f "${SCRIPT_PATH}/../../../../..")"
. ${ROOT}/tests/lib.sh
. ${ROOT}/src/initscripts/system/functions
# read the date in
readhash "CONFIG" "${SCRIPT_PATH}/data/1"
# test if we read the correct data
test_value_in_array "CONFIG" "RED_DHCP_HOSTNAME" "ipfire"
test_value_in_array "CONFIG" "BLUE_MACADDR" "bc:30:7d:58:6b:e3"