summaryrefslogtreecommitdiffstats
path: root/aaabasicfs/nu
blob: 2828c6392fdeb7d07c5b1c2b6efa333393d1babd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#!/bin/bash


######################################
#### Default Vars ####################
######################################

user_groups=""
default_groups=(users disk network floppy fuse video lp tty audio cdrom halusers scanner admin)

# 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 de l'utilisateur: "
    read name
    echo -n "Description de l'utilisateur: "
    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 "Nom de l'utilisateur: "
	read name
    fi
    if [ $ret -eq 3 ]; then
	echo -n "Description de l'utilisateur: "
	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