diff options
Diffstat (limited to 'base/aaabasicfs/nu')
-rwxr-xr-x | base/aaabasicfs/nu | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/base/aaabasicfs/nu b/base/aaabasicfs/nu new file mode 100755 index 000000000..ceabb6f40 --- /dev/null +++ b/base/aaabasicfs/nu @@ -0,0 +1,136 @@ +#!/bin/bash + + +###################################### +#### Default Vars #################### +###################################### + +user_groups="" +default_groups=(users disk network floppy fuse video lp audio cdrom halusers scanner) + +# Avoid spaces troubles :) +OLD_IFS=$IFS +IFS="| +" + + +###################################### +#### Functions ####################### +###################################### + +check_args() +{ + description="$1" + name="$2" + + name_test=`echo -n "$name" | sed 's@^[a-z][a-z0-9]*$@@g'` + if [ "$name_test" != "" ]; then + echo 1>&2 "CRITICAL - Le nom contient des caractères interdits: + Il doit commencer par une lettre uniquement + et ne peut contenir que des minuscules et des chiffres +" + return 1 + fi + if grep "$name" /etc/passwd > /dev/null; then + echo 1>&2 "Le nom $name existe deja!" + return 2 + fi + + desc_test=`echo "$description" | sed 's@^[[:alnum:]! -.,~_@;%<>?]*$@@ig'` + if [ "$desc_test" != "" ]; then + echo 1>&2 "CRITICAL - La description contient des caractères interdits: + Elle ne peut contenir que des lettres/chiffres et les caractères + suivants ! -.,~_\\\@;%<>? +" + return 3 + fi + return 0 +} + +usage() +{ + echo 1>&2 'USAGE: + nu [<description> <nomutilisateur>] + Si <nomutilisateur> existe déjà, un message sera envoye sur le terminal, + dans ce cas, aucun changement ne sera fait, et aucun nouveau compte ne + sera créé. + + <description> doit être valide pour le champ du fichier /etc/passwd description + Ce qui veut dire que ce champ ne doit pas contenir de ":". +' + exit 1 +} + +###################################### +#### Scripting time ################## +###################################### + +if [ $# -eq 1 -o $# -gt 2 ]; then + usage +fi + +if [ $UID -ne 0 ]; then + echo 1>&2 "Veuillez exécuter cette commande en root" + exit 1; +fi + +if [ $# -lt 2 ]; then + echo -n "Nom : " + read name + echo -n "Description : " + read description +else + description="$1" + name="$2" +fi + +check_args "$description" "$name" +ret=$? +while [ $ret -ne 0 ]; do + if [ $ret -lt 3 ]; then + echo -n "Nouveau nom : " + read name + fi + if [ $ret -eq 3 ]; then + echo -n "Nouvelle description : " + read description + fi + if [ "$name" == "!stop!" -o "$description" == "!stop!" ]; then + exit 1 + fi + check_args "$description" "$name" + ret=$? +done + +i=0 +while [ -n "${default_groups[i]}" ]; do + if grep "${default_groups[i]}" /etc/group > /dev/null ; then + if [ -z "$user_groups" ]; then + user_groups="${default_groups[i]}" + else + user_groups="$user_groups,${default_groups[i]}" + fi + echo "groupes : $user_groups" +# else +# echo 1>&2 ' Veuillez installez un gestionnaire de fenetre, +# redemarrer la machine dans ce gestionnaire, +# et relancer cette commande. +#' +# exit 1 + fi + i=$((i+1)) +done + +echo 1>&2 " +Création de $name. +" +echo "/usr/sbin/useradd -c ${description} $user_groups -m ${name}" +if [ -z "$user_groups" ]; then + /usr/sbin/useradd -c "${description}" -m "${name}" || exit 1 +else + /usr/sbin/useradd -c "${description}" -G "$user_groups" -m "${name}" || exit 1 +fi +passwd "$name" + +exit 0 + |