#!/bin/bash # SPDX-Version: 3.0 # SPDX-CreationInfo: 2025-06-17; WEIDNER, Marc S.; # SPDX-ExternalRef: GIT https://git.coresecret.dev/msw/CISS.debian.installer.git # SPDX-FileContributor: WEIDNER, Marc S.; Centurion Intelligence Consulting Agency # SPDX-FileCopyrightText: 2024-2025; WEIDNER, Marc S.; # SPDX-FileType: SOURCE # SPDX-License-Identifier: EUPL-1.2 OR LicenseRef-CCLA-1.0 # SPDX-LicenseComment: This file is part of the CISS.debian.installer.secure framework. # SPDX-PackageName: CISS.debian.installer # SPDX-Security-Contact: security@coresecret.eu ####################################### # Argument Check Wrapper. # Arguments: # $1: "$@" of ./setup.sh ####################################### arg_check() { declare a declare sanitized_args=() for a in "$@"; do sanitized_args+=("$( sanitize_arg "${a}")") done set -- "${sanitized_args[@]}" } ####################################### # Function to sanitize a single argument # Globals: # ERR_UNSAFE_CHARACTER # LOG_ERROR # Arguments: # $1: Argument to check ####################################### sanitize_arg() { declare input="${1}" declare disallowed_ctrl="" ### Step 1: Check for control characters if printf '%s' "${input}" | grep -qP '[[:cntrl:]]'; then disallowed_ctrl=$(printf '%s' "${input}" | sed -n 's/[^[:cntrl:]]//gp' | sed $'s/./&\\n/g' \ | while read -r c; do printf "%02X " "'$c"; done) { printf "❌ Control character : '%s'. \n" "${disallowed_ctrl}" printf "❌ in argument : '%s'. \n" "${input}" printf "❌ Allowed Characters : 'a-z A-Z 0-9 . _ / = [ ] : \" - + space' \n" printf "\n" } >> "${LOG_ERROR}" case "${VAR_IN_DIALOG_WR}" in box ) dialog_box_cleaner ;; gauge ) dialog_gauge_cleaner ;; esac printf "\e[91m❌ Control character : '%s'. \e[0m\n" "${disallowed_ctrl}" >&2 printf "\e[91m❌ in argument : '%s'. \e[0m\n" "${input}" >&2 printf "\e[91m❌ Allowed Characters : 'a-z A-Z 0-9 . _ / = [ ] : \" - + space' \e[0m\n" >&2 # shellcheck disable=SC2162 read -p $'\e[92m✅ Press \'ENTER\' to exit the script ... \e[0m' exit "${ERR_UNSAFE_CHARACTER}" fi ### Step 2: Define allowed characters: ### letters, digits, dot, underscore, slash, equals, [, ], colon, double-quote, hyphen, space. declare allowed='a-zA-Z0-9._/=\[\]:"\-+ ' declare disallowed disallowed=$(printf '%s' "${input}" | tr -d "${allowed}") if [[ -n ${disallowed} ]]; then { printf "❌ Invalid character : '%s'. \n" "${disallowed//?/& }" printf "❌ in argument : '%s'. \n" "${input}" printf "❌ Allowed Characters : 'a-z A-Z 0-9 . _ / = [ ] : \" - + space' \n" printf "\n" } >> "${LOG_ERROR}" case "${VAR_IN_DIALOG_WR}" in box ) dialog_box_cleaner ;; gauge ) dialog_gauge_cleaner ;; esac printf "\e[91m❌ Invalid character : '%s'. \e[0m\n" "${disallowed//?/& }" >&2 printf "\e[91m❌ in argument : '%s'. \e[0m\n" "${input}" >&2 printf "\e[91m❌ Allowed Characters : 'a-z A-Z 0-9 . _ / = [ ] : \" - + space' \e[0m\n" >&2 # shellcheck disable=SC2162 read -p $'\e[92m✅ Press \'ENTER\' to exit the script ... \e[0m' exit "${ERR_UNSAFE_CHARACTER}" else printf '%s' "${input}" fi } # vim: number et ts=2 sw=2 sts=2 ai tw=128 ft=sh