diff --git a/mkuser.sh b/mkuser.sh index 38a10b1..8b379ee 100755 --- a/mkuser.sh +++ b/mkuser.sh @@ -8,6 +8,16 @@ Create_user(){ echo -n "Username: " read -r uname + if [[ ! "${uname}" =~ ^[a-z_][a-z0-9_-]*[$]?$ ]]; then + echo "Error: Invalid username format (use lowercase letters, numbers, hyphens, underscores)" + return 1 + fi + + if id "${uname}" >/dev/null 2>&1; then + echo "Error: User '${uname}' already exists" + return 1 + fi + echo "Additional Groups: " echo echo "[1] - Arch Linux Defaults" @@ -16,18 +26,19 @@ Create_user(){ read -r dgroups if [ "${dgroups}" = "1" ];then - addgroups="power, wheel, optical network, video, audio, storage" + addgroups="power,wheel,optical,network,video,audio,storage" elif [ "${dgroups}" = "2" ];then addgroups="disk,wheel,storage,audio,video,optical,lp,network,dbus,xbuilder" elif [ "${dgroups}" = "3" ];then echo -n "Enter desired groups (comma separated): " read -r custgroups addgroups="${custgroups}" + else + addgroups="" fi - echo "${addgroups}" - read -r -n 1 -p "wait" + useradd -m -g users -G "${addgroups}" -s /bin/bash "${uname}" - passwd "${uname}" + passwd "${uname}" echo if [ -d /home/"${uname}" ];then @@ -42,11 +53,22 @@ Remove_user(){ echo -n "Username to delete: " read -r duser - userdel ${duser} - if [ -d /home/${duser} ];then - rm -R /home/${duser} + if [[ ! "${duser}" =~ ^[a-z_][a-z0-9_-]*[$]?$ ]]; then + echo "Error: Invalid username format" + return 1 + fi + + if ! id "${duser}" >/dev/null 2>&1; then + echo "Error: User '${duser}' does not exist" + return 1 + fi + + userdel "${duser}" + if [ ! -d /home/"${duser}" ];then + echo "User ${duser} deleted" else - echo "User deletion failed" + rm -R /home/"${duser}" + echo "User ${duser} deleted" fi } main(){ @@ -64,10 +86,13 @@ main(){ if [ "${choice}" = "1" ];then Create_user + elif [ "${choice}" = "2" ];then + Remove_user else - echo "no" + echo "Invalid option" fi -done + read -r -n 1 -p "Press any key to continue..." + done } case "$1" in