#!/usr/bin/env zsh # # Copyright (C) 2024-2026 Maria Lisina # Copyright (C) 2024-2026 Danil Lisin # SPDX-License-Identifier: Apache-2.0 if [[ "${__whitelist_env}" != "0" ]] then env -i PATH="${PATH}" __whitelist_env=0 "${0}" ${@} exit ${?} fi exec 2> /dev/null set -e umask 77 dir="${0%/*}" files="${dir}/files" list="${files}/whitelist.txt" if [[ -n "${1}" ]] then action="${1}" case "${action}" in (help) help=0 ;; (list | add | del | reset) ;; (*) echo "Unrecognized action ${action}" \ "\nSee '${0} help'" exit 1 ;; esac shift else help=0 fi if [[ -n "${help}" ]] then echo "Whitelist Manager" \ "\n\nUsage: ${0} [action] [ID]" \ "\n\nActions:" \ "\n help\t\tShow help information" \ "\n list\t\tList whitelist entries" \ "\n add\t\tAdd user ID to whitelist" \ "\n del\t\tRemove user ID from whitelist" \ "\n reset\t\tRemove all whitelist entries" exit 0 fi for module in zsh/files do if ! zmodload ${module} then failed="${failed} ${module}" fi done if [[ -n "${failed}" ]] then echo "Failed to load Z Shell modules:${failed}" \ "\nUpdate your Z Shell or get a version with all required modules" exit 1 fi for required in busybox do if ! command -v ${required} > /dev/null then missing="${missing} ${required}" fi done if [[ -n "${missing}" ]] then echo "Missing dependencies:${missing}" \ "\nFor more information follow: https://command-not-found.com/" exit 1 fi for function in grep sed do if busybox ${function} --help > /dev/null then alias ${function}="busybox ${function}" else missing="${missing} ${function}" fi done if [[ -n "${missing}" ]] then echo "Missing BusyBox functions:${missing}" \ "\nUpdate your BusyBox or get a version with all required functions" exit 1 fi case "${action}" in (add | del) if [[ -n "${1}" ]] then user_id="${1}" if ! test ${user_id} -gt 0 then echo "Illegal user ID ${user_id}" exit 1 fi shift else echo "You must specify user ID" \ "\nSee '${0} help'" exit 1 fi ;; esac if ! [[ -f "${list}" ]] then < "${list}.default" > "${list}" fi case "${action}" in (list) < "${list}" ;; (add) if grep -qx "${user_id}" "${list}" then echo "User ID ${user_id} is already in whitelist" exit 1 fi printf "%s\n" "${user_id}" >> "${list}" ;; (del) sed -i "/^${user_id}$/d" "${list}" ;; (reset) < "${list}.default" > "${list}" ;; esac