From bb53e9989415a7de6659f61768a0310e0c6de579 Mon Sep 17 00:00:00 2001 From: fatalerrors Date: Mon, 11 Aug 2025 20:03:46 +0200 Subject: [PATCH] made user manipulation functions usable for a list of users --- lib/users.sh | 78 +++++++++++++++++++++++++++++----------------------- 1 file changed, 44 insertions(+), 34 deletions(-) diff --git a/lib/users.sh b/lib/users.sh index bed1c4f..d63cec5 100644 --- a/lib/users.sh +++ b/lib/users.sh @@ -2,7 +2,7 @@ # ------------------------------------------------------------------------------ # Users related functions # This file is part of the init.sh project -# Copyright (c) 2019-2024 Geoffray Levasseur +# Copyright (c) 2019-2025 Geoffray Levasseur # ------------------------------------------------------------------------------ # This file is distributed under 3-clause BSD license. # The complete license agreement can be obtained at: @@ -14,21 +14,24 @@ # Users (from Ldap) add_remote_user() { - if [[ -n $(grep "^$1:" /etc/passwd) ]]; then - prnt W "A local user with name $1 already exists, adding anyway!" - fi - if [[ -n $(grep "^+$1:" /etc/passwd) ]]; then - prnt W "The remote user $1 is already declared, nothing to do in passwd." - else - echo "+$1::::::" >> /etc/passwd - prnt I "User $1 added to passwd..." - fi - if [[ -n $(grep "^+$1:" /etc/shadow) ]]; then - prnt W "The remote user $1 is already connectable, nothing to do in shadow." - else - echo "+$1::::::::" >> /etc/shadow - prnt I "User $1 added to shadow..." - fi + local users=$@ + for usr in ${users[@]}; do + if [[ -n $(grep "^$usr:" /etc/passwd) ]]; then + prnt W "A local user with name $usr already exists, adding anyway!" + fi + if [[ -n $(grep "^+$usr:" /etc/passwd) ]]; then + prnt W "The remote user $usr is already declared, nothing to do in passwd." + else + echo "+$usr::::::" >> /etc/passwd + prnt I "User $usr added to passwd..." + fi + if [[ -n $(grep "^+$usr:" /etc/shadow) ]]; then + prnt W "The remote user $usr is already connectable, nothing to do in shadow." + else + echo "+$usr::::::::" >> /etc/shadow + prnt I "User $usr added to shadow..." + fi + done } export -f add_remote_user # ------------------------------------------------------------------------------ @@ -38,15 +41,18 @@ export -f add_remote_user # Remove users remove_user() { - if [[ -n $(grep "^$1:" /etc/{passwd,shadow,group,gshadow}) ]]; then - # Using sed is more universal than any distro commands - local case - sed -i -e "/^$1:/d" /etc/{passwd,shadow,group,gshadow} - elif [[ -n $(grep "^+$1:" /etc/{passwd,shadow,group,gshadow}) ]]; then - # remote case - sed -i -e "/^+$1:/d" /etc/{passwd,shadow,group,gshadow} - else - prnt W "User $1 don't exists in auth files, nothing to do." - fi + local users=$@ + for usr in ${users[@]}; do + if [[ -n $(grep "^$usr:" /etc/{passwd,shadow,group,gshadow}) ]]; then + # Using sed is more universal than any distro commands - local case + sed -i -e "/^$usr:/d" /etc/{passwd,shadow,group,gshadow} + elif [[ -n $(grep "^+$usr:" /etc/{passwd,shadow,group,gshadow}) ]]; then + # remote case + sed -i -e "/^+$usr:/d" /etc/{passwd,shadow,group,gshadow} + else + prnt W "User $usr don't exists in auth files, nothing to do." + fi + done } # ------------------------------------------------------------------------------ @@ -55,17 +61,21 @@ remove_user() # Create a local user create_local_user() { - if [[ $(noerror --noout id $1) != 0 ]]; then - prnt I "Creating user $1..." - if [[ $(directory_exists home_skell) ]]; then - useradd --create-home --shell $DEFAULT_SHELL --user-group $1 \ - --skell $(select_directory home_skell) + local users=$@ + for usr in ${users[@]}; do + if [[ $(noerror --noout id $usr) != 0 ]]; then + prnt I "Creating user $usr..." + if [[ $(directory_exists home_skell) ]]; then + useradd --create-home --shell $DEFAULT_SHELL \ + --user-group $usr \ + --skell $(select_directory home_skell) + else + useradd --create-home --shell $DEFAULT_SHELL --user-group $usr + fi else - useradd --create-home --shell $DEFAULT_SHELL --user-group $1 + prnt W "The user $usr already exists. Nothing to do..." fi - else - prnt W "The user $1 already exists. Nothing to do..." - fi + done } # ------------------------------------------------------------------------------