summaryrefslogtreecommitdiffstats
path: root/base/aaabasicfs/nu
diff options
context:
space:
mode:
Diffstat (limited to 'base/aaabasicfs/nu')
-rwxr-xr-xbase/aaabasicfs/nu136
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
+