#!/hint/bash # Copyright (C) 2018 Luke Shumaker # Copyright (C) 2023 Umorpha Systems # SPDX-License-Identifier: AGPL-3.0-or-later # shellcheck disable=SC2034 readonly EXIT_SUCCESS=0 readonly EXIT_FAILURE=1 readonly EXIT_INVALIDARGUMENT=2 readonly EXIT_NOTIMPLEMENTED=3 readonly EXIT_NOPERMISSION=4 readonly EXIT_NOTINSTALLED=5 readonly EXIT_NOTCONFIGURED=6 readonly EXIT_NOTRUNNING=7 # `gprintf` is the same as `printf`, but feeds the format string # through `gettext`. This is pretty much just a kludge to silence # spurious SC2059 complaints without disabling it entirely or leaving # "shellcheck disable=" comments everywhere. gprintf() { if [[ "$1" == '-v' ]]; then set -- "$1" "$2" "$(gettext -- "$3")" "${@:4}" else set -- "$(gettext -- "$1")" "${@:2}" fi # shellcheck disable=SC2059 printf "$@" } print() { # shellcheck disable=SC2059 printf "$(gettext -- "$1")\\n" "${@:2}" } error() { local msg gprintf -v msg "${@:2}" printf '%s: %s\n' "${0##*/}" "$msg" >&2 if (( $1 != 0 )); then exit "$1" fi } in_array() { local needle=$1 local straw for straw in "${@:2}"; do if [[ $needle = "$straw" ]]; then return 0 fi done return 1 } is_sudo() { (( UID == 0 && ${SUDO_UID:-0} != 0 )) } is_root() { (( UID == 0 )) } needs_sudo() { if ! is_sudo; then error $EXIT_NOPERMISSION "Must be invoked through sudo." fi } needs_root() { if ! is_root; then error $EXIT_NOPERMISSION "Must be invoked as root." fi }