From 3e419d4ad044a7ed826e17d84f01daa62684d6c9 Mon Sep 17 00:00:00 2001 From: David Gillies Date: Sat, 27 Jun 2026 15:39:27 +1000 Subject: [PATCH] Remove cifs_common, move functions into cifs_mount & cifs_umount --- cifs_common.sh | 45 -------------------- cifs_mount.sh | 48 ++++++++++++++++++--- cifs_umount.sh | 43 ++++++++++++++++++- tests/cifs_ini_parser_test.sh | 78 ----------------------------------- 4 files changed, 85 insertions(+), 129 deletions(-) delete mode 100644 cifs_common.sh delete mode 100644 tests/cifs_ini_parser_test.sh diff --git a/cifs_common.sh b/cifs_common.sh deleted file mode 100644 index e80bcaa..0000000 --- a/cifs_common.sh +++ /dev/null @@ -1,45 +0,0 @@ -#!/bin/bash - -trim_ini_field() { - local FIELD="$1" - FIELD="${FIELD#"${FIELD%%[!$' \t']*}"}" - FIELD="${FIELD%"${FIELD##*[!$' \t']}"}" - printf '%s' "$FIELD" -} - -load_cifs_ini() { - local INI_FILE="$1" - local LINE KEY VALUE ALLOWED_KEY KEY_ALLOWED - shift - - while IFS= read -r LINE || [ "$LINE" != "" ] - do - LINE=${LINE%$'\r'} - case "$LINE" in - *=*) ;; - *) continue ;; - esac - KEY=$(trim_ini_field "${LINE%%=*}") - case "$KEY" in - ''|\#*) continue ;; - esac - - KEY_ALLOWED="false" - for ALLOWED_KEY in "$@" - do - if [ "$KEY" == "$ALLOWED_KEY" ] - then - KEY_ALLOWED="true" - break - fi - done - [ "$KEY_ALLOWED" == "true" ] || continue - - VALUE=$(trim_ini_field "${LINE#*=}") - case "$VALUE" in - \"*) VALUE=${VALUE#\"}; VALUE=${VALUE%%\"*} ;; - \'*) VALUE=${VALUE#\'}; VALUE=${VALUE%%\'*} ;; - esac - printf -v "$KEY" '%s' "$VALUE" - done < "$INI_FILE" -} diff --git a/cifs_mount.sh b/cifs_mount.sh index 1ee040e..1442b30 100644 --- a/cifs_mount.sh +++ b/cifs_mount.sh @@ -126,6 +126,49 @@ BOOT_ARG="--boot-start" USER_STARTUP="/media/fat/linux/user-startup.sh" USER_STARTUP_TEMPLATE="/media/fat/linux/_user-startup.sh" +trim_ini_field() { + local FIELD="$1" + FIELD="${FIELD#"${FIELD%%[!$' \t']*}"}" + FIELD="${FIELD%"${FIELD##*[!$' \t']}"}" + printf '%s' "$FIELD" +} + +load_cifs_ini() { + local INI_FILE="$1" + local LINE KEY VALUE ALLOWED_KEY KEY_ALLOWED + shift + + while IFS= read -r LINE || [ "$LINE" != "" ] + do + LINE=${LINE%$'\r'} + case "$LINE" in + *=*) ;; + *) continue ;; + esac + KEY=$(trim_ini_field "${LINE%%=*}") + case "$KEY" in + ''|\#*) continue ;; + esac + + KEY_ALLOWED="false" + for ALLOWED_KEY in "$@" + do + if [ "$KEY" == "$ALLOWED_KEY" ] + then + KEY_ALLOWED="true" + break + fi + done + [ "$KEY_ALLOWED" == "true" ] || continue + + VALUE=$(trim_ini_field "${LINE#*=}") + case "$VALUE" in + \"*) VALUE=${VALUE#\"}; VALUE=${VALUE%%\"*} ;; + \'*) VALUE=${VALUE#\'}; VALUE=${VALUE%%\'*} ;; + esac + printf -v "$KEY" '%s' "$VALUE" + done < "$INI_FILE" +} resolve_path() { if command -v realpath >/dev/null 2>&1 then @@ -146,11 +189,6 @@ fi SCRIPT_NAME=${ORIGINAL_SCRIPT_PATH##*/} SCRIPT_NAME=${SCRIPT_NAME%.*} SCRIPT_REALPATH=$(resolve_path "$ORIGINAL_SCRIPT_PATH") -case "$SCRIPT_REALPATH" in - */*) SCRIPT_DIR=${SCRIPT_REALPATH%/*} ;; - *) SCRIPT_DIR="." ;; -esac -. "$SCRIPT_DIR/cifs_common.sh" CIFS_MOUNT_INI_KEYS=( SERVER SHARE diff --git a/cifs_umount.sh b/cifs_umount.sh index 409f43d..eeed58a 100644 --- a/cifs_umount.sh +++ b/cifs_umount.sh @@ -34,7 +34,49 @@ SINGLE_CIFS_CONNECTION="true" SPECIAL_DIRECTORIES="config|linux|System Volume Information" LAZY_UNMOUNT_ON_BUSY="true" +trim_ini_field() { + local FIELD="$1" + FIELD="${FIELD#"${FIELD%%[!$' \t']*}"}" + FIELD="${FIELD%"${FIELD##*[!$' \t']}"}" + printf '%s' "$FIELD" +} + +load_cifs_ini() { + local INI_FILE="$1" + local LINE KEY VALUE ALLOWED_KEY KEY_ALLOWED + shift + while IFS= read -r LINE || [ "$LINE" != "" ] + do + LINE=${LINE%$'\r'} + case "$LINE" in + *=*) ;; + *) continue ;; + esac + KEY=$(trim_ini_field "${LINE%%=*}") + case "$KEY" in + ''|\#*) continue ;; + esac + + KEY_ALLOWED="false" + for ALLOWED_KEY in "$@" + do + if [ "$KEY" == "$ALLOWED_KEY" ] + then + KEY_ALLOWED="true" + break + fi + done + [ "$KEY_ALLOWED" == "true" ] || continue + + VALUE=$(trim_ini_field "${LINE#*=}") + case "$VALUE" in + \"*) VALUE=${VALUE#\"}; VALUE=${VALUE%%\"*} ;; + \'*) VALUE=${VALUE#\'}; VALUE=${VALUE%%\'*} ;; + esac + printf -v "$KEY" '%s' "$VALUE" + done < "$INI_FILE" +} resolve_path() { if command -v realpath >/dev/null 2>&1 @@ -58,7 +100,6 @@ case "$SCRIPT_REALPATH" in */*) SCRIPT_DIR=${SCRIPT_REALPATH%/*} ;; *) SCRIPT_DIR="." ;; esac -. "$SCRIPT_DIR/cifs_common.sh" CIFS_UMOUNT_INI_KEYS=( BASE_PATH LOCAL_DIR diff --git a/tests/cifs_ini_parser_test.sh b/tests/cifs_ini_parser_test.sh deleted file mode 100644 index 3a856a3..0000000 --- a/tests/cifs_ini_parser_test.sh +++ /dev/null @@ -1,78 +0,0 @@ -#!/bin/bash - -set -euo pipefail - -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" -. "$SCRIPT_DIR/cifs_common.sh" - -assert_password() { - local EXPECTED="$1" - local VALUE="$2" - local TMP_INI - - TMP_INI=$(mktemp) - { - printf 'SERVER="server"\n' - printf 'SHARE="share"\n' - printf 'USERNAME="user"\n' - printf 'PASSWORD=%s\n' "$VALUE" - } > "$TMP_INI" - - PASSWORD="" - load_cifs_ini "$TMP_INI" SERVER SHARE USERNAME PASSWORD - rm -f "$TMP_INI" - - if [ "$PASSWORD" != "$EXPECTED" ] - then - printf 'Expected password [%s], got [%s]\n' "$EXPECTED" "$PASSWORD" >&2 - exit 1 - fi -} - -assert_password '$abc123' '"$abc123"' -assert_password '$abc123' '$abc123' -assert_password '$' '"$"' -assert_password '$' '$' -assert_password 'abc$123' '"abc$123"' -assert_password 'abc$123' 'abc$123' -assert_password 'pa ss' '"pa ss"' -assert_password 'pa#ss' '"pa#ss"' -assert_password 'pa&ss' '"pa&ss"' -assert_password 'p@$$word' '"p@$$word"' -assert_password 'p@$$word' 'p@$$word' -assert_password 'pa\ss' '"pa\ss"' -assert_password "pa'ss" "\"pa'ss\"" -assert_password 'pa"ss' "'pa\"ss'" -assert_password '$abc123' '"$abc123" # inline comment' - -TMP_INI=$(mktemp) -{ - printf 'PASSWORD\n' - printf 'PASSWORD="$abc123"\n' -} > "$TMP_INI" -PASSWORD="" -load_cifs_ini "$TMP_INI" PASSWORD -rm -f "$TMP_INI" -[ "$PASSWORD" = '$abc123' ] - -TMP_INI=$(mktemp) -{ - printf '# comment\r\n' - printf '\r\n' - printf ' PASSWORD = "$abc123" \r\n' - printf 'UNKNOWN_KEY="ignored"\r\n' - printf 'USERNAME = "user name"\r\n' - printf 'DOMAIN = "work group"\r\n' -} > "$TMP_INI" -PASSWORD="" -USERNAME="" -DOMAIN="" -UNKNOWN_KEY="original" -load_cifs_ini "$TMP_INI" PASSWORD USERNAME DOMAIN -rm -f "$TMP_INI" -[ "$PASSWORD" = '$abc123' ] -[ "$USERNAME" = 'user name' ] -[ "$DOMAIN" = 'work group' ] -[ "$UNKNOWN_KEY" = 'original' ] - -printf 'cifs_ini_parser_test: ok\n'