initscripts: sync functions from ipfire

readhash is added in functions, but it appears not used
in initscripts except for testing, assume no impact to
bpfire initscripts.

commit 1c1ff05cdc37fe9ccabda9413c270935c3a45478
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Mon Mar 31 16:35:26 2025 +0200

    firewall: Explicitely don't NAT any aliases

    It seems that there is a problem with local connections that have
    preselected an outgoing interface. That will work just fine, but
    ultimately the packet will be NATed back to the primary RED IP address.
    To prevent this, we are adding some extra rules that skip the MASQUERADE
    target.

    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit ff4ff2cfe0c8565a431bf499708dcb6e5c2fb3dc
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Fri Dec 6 16:42:17 2024 +0000

    initscripts: readhash: Fix handling = signs

    The function expected that a line only contains exactly one equals sign
    (=) which is not fit for purpose. In the WireGuard code we hold key
    material that is encoded in base64 and therefore contains padding that
    uses =.

    This patch fixes that we expect exactly one equals sign immediately
    after the key and we will then accept more = in the value - which was
    already permitted.

    Furthermore, this patch fixes the splitting if the key and value at the
    first =.

    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
    Signed-off-by: Arne Fitzenreiter <arne_f@ipfire.org>

commit 73661e5ee1acc30e40e41493c8dfca10aa1097d0
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Fri Dec 6 16:42:16 2024 +0000

    initscripts: readhash: Only strip quotes if they exist

    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
    Signed-off-by: Arne Fitzenreiter <arne_f@ipfire.org>

commit 80c1cb5a0a
Author: Jonatan Schlag <jonatan.schlag@ipfire.org>
Date:   Sun Jun 16 18:02:44 2024 +0200

    initscripts fkt: Fix shebang

    We use features only available in bash. So we should state correctly
    that the script should be executed in bash. As sh is a symlink to bash
    this makes not differences on a ipfire system. But my linter is less
    chatty with this change.

    Signed-off-by: Jonatan Schlag <jonatan.schlag@ipfire.org>
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 14ecdd86f1
Author: Jonatan Schlag <jonatan.schlag@ipfire.org>
Date:   Sun Jun 16 18:02:43 2024 +0200

    initscripts fkt: keep readhash compatible with older implementation

    With the use of eval BLUE_DEV='blue0 net0' stored "blue0 net0" in the
    variable BLUE_DEV not "'blue0 net0'"

    Signed-off-by: Jonatan Schlag <jonatan.schlag@ipfire.org>
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit f1d94e7457
Author: Jonatan Schlag <jonatan.schlag@ipfire.org>
Date:   Sun Jun 16 18:02:42 2024 +0200

    initscripts fkt: readhash should only parse lines with a =

    A line without a = is clearly invalid.

    Signed-off-by: Jonatan Schlag <jonatan.schlag@ipfire.org>
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 9f72b7bc5f
Author: Jonatan Schlag <jonatan.schlag@ipfire.org>
Date:   Sun Jun 16 18:02:41 2024 +0200

    initscripts fkt: Check for invalid values in readhash

    Signed-off-by: Jonatan Schlag <jonatan.schlag@ipfire.org>
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 02254f5543
Author: Jonatan Schlag <jonatan.schlag@ipfire.org>
Date:   Sun Jun 16 18:02:40 2024 +0200

    initscripts fkt: ignore invalid keys in readhash

    Signed-off-by: Jonatan Schlag <jonatan.schlag@ipfire.org>
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit d289bc28be
Author: Jonatan Schlag <jonatan.schlag@ipfire.org>
Date:   Sun Jun 16 18:02:39 2024 +0200

    initscripts fkt: Ignore comments in readhash

    As '#Another Comment' is a valid key we test this change by checking if
    the comments do not end up as keys in our array.

    Signed-off-by: Jonatan Schlag <jonatan.schlag@ipfire.org>
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 59e3c2a217
Author: Jonatan Schlag <jonatan.schlag@ipfire.org>
Date:   Sun Jun 16 18:02:38 2024 +0200

    initscript fkt: ignore blank lines in readhash

    Signed-off-by: Jonatan Schlag <jonatan.schlag@ipfire.org>
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 96bb3ba8b8
Author: Jonatan Schlag <jonatan.schlag@ipfire.org>
Date:   Sun Jun 16 18:02:37 2024 +0200

    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>

commit db09ea9e5c
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Sat Mar 23 14:35:39 2024 +0100

    initscripts: Don't overwrite the PID file

    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 5900a95059
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Sat Mar 23 14:31:49 2024 +0100

    initscripts: Fix reading PIDs

    An incorrect variable has been used.

    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 6e47a143c9
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Sat Mar 23 14:30:33 2024 +0100

    initscripts: Handle command arguments as array

    For some reason, the function is refusing to launch a command that has
    extra arguments.

    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
commit ed91103e22
Author: Stefan Schantl <stefan.schantl@ipfire.org>
Date:   Wed Mar 27 20:39:17 2024 +0100

    initscripts: Add generic function to get the filesystem type of a volume

    Signed-off-by: Stefan Schantl <stefan.schantl@ipfire.org>
    Reviewed-by: Michael Tremer <michael.tremer@ipfire.org>
    Signed-off-by: Arne Fitzenreiter <arne_f@ipfire.org>

commit c3019331df
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Thu Jan 11 15:59:34 2024 +0100

    initscripts: Implement storing PIDs in loadproc

    Some programs do not write their own PID files any more, but since our
    initscripts heavily rely on those, this extension allows to store it
    easily.

    Signed-off-by: Daniel Weismüller <daniel.weismueller@ipfire.org>

commit dd8ef8cc10
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Thu Jan 11 15:57:50 2024 +0100

    initscripts: Fix wrong variable check for $PIDFILE in getpids

    getpids() checked whether it needed to pass a pid file to pidofproc, but
    the check was inverted.

    Signed-off-by: Daniel Weismüller <daniel.weismueller@ipfire.org>

Signed-off-by: Vincent Li <vincent.mc.li@gmail.com>
This commit is contained in:
Vincent Li
2025-07-02 19:15:57 +00:00
parent 3745fdcb6a
commit 90a4a51a0e

View File

@@ -1,4 +1,4 @@
#!/bin/sh
#!/bin/bash
###############################################################################
# #
# IPFire.org - A linux based firewall #
@@ -407,7 +407,7 @@ pidofproc()
# This will ensure compatibility with previous LFS Bootscripts
getpids()
{
if [ -z "${PIDFILE}" ]; then
if [ -n "${PIDFILE}" ]; then
pidofproc -s -p "${PIDFILE}" $@
else
pidofproc -s $@
@@ -446,6 +446,7 @@ loadproc()
local pidfile=""
local forcestart=""
local nicelevel=""
local pid
# This will ensure compatibility with previous LFS Bootscripts
if [ -n "${PIDFILE}" ]; then
@@ -511,7 +512,7 @@ loadproc()
esac
fi
local cmd="${@}"
local cmd=( "${@}" )
if [ -n "${nicelevel}" ]; then
cmd="nice -n "${nicelevel}" ${cmd}"
@@ -519,14 +520,20 @@ loadproc()
if [ -n "${background}" ]; then
(
${cmd} &>/dev/null
${cmd[@]} &>/dev/null
) &
pid="$!"
evaluate_retval
else
${cmd}
${cmd[@]}
evaluate_retval # This is "Probably" not LSB compliant, but required to be compatible with older bootscripts
fi
# Write the pidfile
if [ -n "${pid}" -a -n "${pidfile}" ]; then
echo "${pid}" > "${pidfile}"
fi
return 0
}
@@ -875,3 +882,71 @@ running_on_oci() {
# We are not running on OCI
return 1
}
volume_fs_type() {
if [ ! -d "${1}" ]; then
return
fi
stat -f --format="%T" ${1}
}
readhash() {
local array="${1}"
local file="${2}"
declare -A -g "${array}"
local line
while read -r line; do
# Skip Blank Lines
if [[ ${line} =~ ^[[:space:]]*$ ]]; then
continue
fi
# Skip Comments
if [[ ${line} =~ ^#.*$ ]]; then
continue
fi
# Check for a valid key followed by =
if ! [[ ${line} =~ ^[A-Za-z_][A-Za-z0-9_]*= ]]; then
echo "Invalid line '${line}'" >&2
continue
fi
local key="${line%%=*}"
local val="${line#*=}"
# Skip lines with invalid values
if ! [[ ${val} =~ ^[\'][\ A-Za-z0-9=/,.:%_@#+-]*[\']$ ]] && ! [[ ${val} =~ ^[A-Za-z0-9=/,.:%_@#+-]*$ ]]; then
echo "Invalid value '${val}' for key '${key}'" >&2
continue
fi
# strip leading and trailing single quotes
case "${val}" in
'*')
val="${val#\'}"
val="${val%\'}"
;;
esac
printf -v "${array}[${key}]" "%s" "${val}"
done < "${file}"
}
# Returns all enabled aliases
get_aliases() {
local address
local enabled
local rest
local IFS=,
while read -r address enabled rest; do
if [ "${enabled}" = "on" ]; then
echo "${address}"
fi
done < /var/ipfire/ethernet/aliases
}