Subversion Repositories ALCASAR

Rev

Rev 2454 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log

Rev 2454 Rev 2488
1
#!/bin/bash
1
#!/bin/bash
2
# $Id: alcasar-profil.sh 2454 2017-12-09 18:59:31Z tom.houdayer $
2
# $Id: alcasar-profil.sh 2488 2018-02-25 14:53:54Z lucas.echard $
3
 
3
 
4
# alcasar-profil.sh
4
# alcasar-profil.sh
5
# by Richard REY
5
# by Richard REY
6
# This script is distributed under the Gnu General Public License (GPL)
6
# This script is distributed under the Gnu General Public License (GPL)
7
 
7
 
8
# Gestion des comptes liés aux profiles
8
# Gestion des comptes liés aux profiles
9
# Manage the profil logins
9
# Manage the profil logins
10
 
10
 
-
 
11
DIR_BIN="/usr/local/bin" # scripts directory
11
ADM_PROFIL="admin"
12
ADM_PROFIL="admin"
12
PROFILS="backup manager"
13
PROFILS="backup manager"
13
ALL_PROFILS=`echo $ADM_PROFIL $PROFILS`
14
ALL_PROFILS=`echo $ADM_PROFIL $PROFILS`
14
DIR_KEY="/usr/local/etc/digest"
15
DIR_KEY="/usr/local/etc/digest"
15
SED="/bin/sed -i"
16
SED="/bin/sed -i"
16
Lang=`echo $LANG|cut -c 1-2`
17
Lang=`echo $LANG|cut -c 1-2`
-
 
18
REALM="ALCASAR Control Center (ACC)"
-
 
19
 
-
 
20
# génère le htdigest
-
 
21
function htdigest () {
-
 
22
	passwdfile="$1"
-
 
23
	username="$2"
-
 
24
 
-
 
25
	[ -f "$passwdfile" ] || touch "$passwdfile"
-
 
26
 
-
 
27
	[ $(grep -c "${username}:${REALM}:" "$passwdfile") ] && existing_user=0 || existing_user=1
-
 
28
 
-
 
29
	if [ $existing_user -eq 1 ]; then
-
 
30
		echo "Changing password for user $username in realm $REALM"
-
 
31
	else
-
 
32
		echo "Adding user $username in realm $REALM"
-
 
33
	fi
-
 
34
 
-
 
35
	equal=0
-
 
36
 
-
 
37
	while [ $equal -eq 0 ]; do
-
 
38
		echo -n "New password: "
-
 
39
		read -s pass_1
-
 
40
		echo
-
 
41
		echo -n "Confirm the new password: "
-
 
42
		read -s pass_2
-
 
43
		echo
-
 
44
 
-
 
45
		if [ "$pass_1" != "$pass_2" ]; then
-
 
46
			echo -e "\nThe passwords don't match.\n"
-
 
47
		else
-
 
48
			equal=1
-
 
49
		fi
-
 
50
	done
-
 
51
 
-
 
52
	digest="${username}:${REALM}:"
-
 
53
	digest+=$(echo -n "${username}:${REALM}:${pass_1}" | md5sum | cut -d" " -f1)
-
 
54
 
-
 
55
	if [ $existing_user -eq 0 ]; then
-
 
56
		echo "$digest" >> "$passwdfile"
-
 
57
	else 
-
 
58
		sed -i "s/${username}:${REALM}:.*/${digest}/" "$passwdfile"
-
 
59
	fi
-
 
60
}
17
 
61
 
18
# liste les comptes de chaque profile
62
# liste les comptes de chaque profile
19
function list () {
63
function list () {
20
	for i in $ALL_PROFILS
64
	for i in $ALL_PROFILS
21
	do
65
	do
22
		if [ $Lang == "fr" ]
66
		if [ $Lang == "fr" ]
23
			then
67
			then
24
			echo -n "Comptes liés au profil '$i' : "
68
			echo -n "Comptes liés au profil '$i' : "
25
 
69
 
26
		else
70
		else
27
			echo -n "accounts linked with profile '$i' : "
71
			echo -n "accounts linked with profile '$i' : "
28
		fi
72
		fi
29
		account_list=`cat $DIR_KEY/key_only_$i | cut -d':' -f1|sort`
73
		account_list=`cat $DIR_KEY/key_only_$i | cut -d':' -f1|sort`
30
		for account in $account_list
74
		for account in $account_list
31
		do
75
		do
32
			echo -n "$account "
76
			echo -n "$account "
33
		done
77
		done
34
	echo
78
	echo
35
	done
79
	done
36
}
80
}
37
# ajoute les comptes du profil "admin" aux autres profils
81
# ajoute les comptes du profil "admin" aux autres profils
38
# crée le fichier de clés contenant tous les compte (pour l'accès au centre de gestion)
82
# crée le fichier de clés contenant tous les compte (pour l'accès au centre de gestion)
39
function concat () {
83
function concat () {
40
	> $DIR_KEY/key_all
84
	> $DIR_KEY/key_all
41
	for i in $PROFILS
85
	for i in $PROFILS
42
	do
86
	do
43
		cp -f $DIR_KEY/key_only_$ADM_PROFIL $DIR_KEY/key_$i
87
		cp -f $DIR_KEY/key_only_$ADM_PROFIL $DIR_KEY/key_$i
44
		cat $DIR_KEY/key_only_$i >> $DIR_KEY/key_$i
88
		cat $DIR_KEY/key_only_$i >> $DIR_KEY/key_$i
45
		cat $DIR_KEY/key_only_$i >> $DIR_KEY/key_all
89
		cat $DIR_KEY/key_only_$i >> $DIR_KEY/key_all
46
	done
90
	done
47
	cp -f $DIR_KEY/key_only_$ADM_PROFIL $DIR_KEY/key_$ADM_PROFIL
91
	cp -f $DIR_KEY/key_only_$ADM_PROFIL $DIR_KEY/key_$ADM_PROFIL
48
	cat $DIR_KEY/key_only_$ADM_PROFIL >> $DIR_KEY/key_all
92
	cat $DIR_KEY/key_only_$ADM_PROFIL >> $DIR_KEY/key_all
49
	chown -R root:apache $DIR_KEY
93
	chown -R root:apache $DIR_KEY
50
	chmod 640 $DIR_KEY/key_*
94
	chmod 640 $DIR_KEY/key_*
51
}
95
}
52
 
96
 
53
usage="Usage: alcasar-profil.sh [-l|--list] [-a|--add] [-d|--del] [-p|--pass]"
97
usage="Usage: alcasar-profil.sh [-l|--list] [-a|--add [profil]] [-d|--del] [-p|--pass]"
54
nb_args=$#
98
nb_args=$#
55
args=$1
99
arg1=$1
-
 
100
arg2=$2
56
 
101
 
57
# on met en place la structure minimale
102
# on met en place la structure minimale
58
if [ ! -e $DIR_KEY/key_$ADM_PROFIL ]
103
if [ ! -e $DIR_KEY/key_$ADM_PROFIL ]
59
then
104
then
60
	touch $DIR_KEY/key_$ADM_PROFIL
105
	touch $DIR_KEY/key_$ADM_PROFIL
61
fi
106
fi
62
cp -f $DIR_KEY/key_$ADM_PROFIL $DIR_KEY/key_only_$ADM_PROFIL
107
cp -f $DIR_KEY/key_$ADM_PROFIL $DIR_KEY/key_only_$ADM_PROFIL
63
for i in $PROFILS
108
for i in $PROFILS
64
do
109
do
65
	if [ ! -e $DIR_KEY/key_only_$i ]
110
	if [ ! -e $DIR_KEY/key_only_$i ]
66
	then
111
	then
67
		touch $DIR_KEY/key_only_$i
112
		touch $DIR_KEY/key_only_$i
68
	fi
113
	fi
69
done
114
done
70
concat
115
concat
71
if [ $nb_args -eq 0 ]
116
if [ $nb_args -eq 0 ]
72
then
117
then
73
	echo $usage
118
	echo $usage
74
	exit 0
119
	exit 0
75
fi
120
fi
76
case $args in
121
case $arg1 in
77
	-\? | -h* | --h*)
122
	-\? | -h* | --h*)
78
		echo "$usage"
123
		echo "$usage"
79
		exit 0
124
		exit 0
80
		;;
125
		;;
81
	--add|-a)
126
	--add|-a)
82
		# ajout d'un compte
-
 
83
		list
-
 
84
		if [ $Lang == "fr" ]
127
		if [ $nb_args -eq 1 ]
85
		then
128
		then
-
 
129
			# ajout d'un compte
-
 
130
			list
-
 
131
			if [ $Lang == "fr" ]
-
 
132
			then
86
			echo -n "Choisissez un profil ($ALL_PROFILS) : "
133
				echo -n "Choisissez un profil ($ALL_PROFILS) : "
-
 
134
			else
-
 
135
				echo -n "Select a profile ($ALL_PROFILS) : "
-
 
136
			fi
-
 
137
			read profil
87
		else
138
		else
88
			echo -n "Select a profile ($ALL_PROFILS) : "
139
			profil="$2"
89
		fi
140
		fi
90
		read profil
-
 
91
		if [ $Lang == "fr" ]
141
		if [ $Lang == "fr" ]
92
		then
142
		then
93
			echo -n "Entrez le nom du compte à créer (profil '$profil') : "
143
			echo -n "Entrez le nom du compte à créer (profil '$profil') : "
94
		else
144
		else
95
			echo "Enter the name of the account to create (profile '$profil') : "
145
			echo "Enter the name of the account to create (profile '$profil') : "
96
		fi
146
		fi
97
		read account
147
		read account
98
		# on teste s'il n'existe pas déjà
148
		# on teste s'il n'existe pas déjà
99
		for i in $ALL_PROFILS
149
		for i in $ALL_PROFILS
100
		do
150
		do
101
			tmp_account=`cat $DIR_KEY/key_only_$i | cut -d':' -f1`
151
			tmp_account=`cat $DIR_KEY/key_only_$i | cut -d':' -f1`
102
			for j in $tmp_account
152
			for j in $tmp_account
103
				do
153
				do
104
				if [ "$j" = "$account" ]
154
				if [ "$j" = "$account" ]
105
					then if [ $Lang == "fr" ]
155
					then if [ $Lang == "fr" ]
106
						then
156
						then
107
							echo "Ce compte existe déjà"
157
							echo "Ce compte existe déjà"
108
						else
158
						else
109
							echo "This account already exists"
159
							echo "This account already exists"
110
						fi
160
						fi
111
					exit 0
161
					exit 0
112
				fi
162
				fi
113
				done
163
				done
114
		done
164
		done
115
		/usr/bin/htdigest $DIR_KEY/key_only_$profil "ALCASAR Control Center (ACC)" $account
165
		htdigest $DIR_KEY/key_only_$profil "$account"
116
		concat
166
		concat
117
		list
167
		list
118
		;;
168
		;;
119
	--del|-d)
169
	--del|-d)
120
		# suppression d'un compte
170
		# suppression d'un compte
121
		list
171
		list
122
		if [ $Lang == "fr" ]
172
		if [ $Lang == "fr" ]
123
		then
173
		then
124
			echo -n "entrez le nom du compte à supprimer : "
174
			echo -n "entrez le nom du compte à supprimer : "
125
		else
175
		else
126
			echo -n "enter the name of the account to remove : "
176
			echo -n "enter the name of the account to remove : "
127
		fi
177
		fi
128
		read account
178
		read account
129
		for i in $ALL_PROFILS
179
		for i in $ALL_PROFILS
130
			do
180
			do
131
			$SED "/^$account:/d" $DIR_KEY/key_only_$i
181
			$SED "/^$account:/d" $DIR_KEY/key_only_$i
132
			done
182
			done
133
		concat
183
		concat
134
		list
184
		list
135
		;;
185
		;;
136
	--pass|-p)
186
	--pass|-p)
137
		# changement du mot de passe d'un compte
187
		# changement du mot de passe d'un compte
138
		list
188
		list
139
		if [ $Lang == "fr" ]
189
		if [ $Lang == "fr" ]
140
		then
190
		then
141
			echo "Changement de mot de passe"
191
			echo "Changement de mot de passe"
142
			echo -n "Entrez le nom du compte : "
192
			echo -n "Entrez le nom du compte : "
143
		else
193
		else
144
			echo "Password change"
194
			echo "Password change"
145
			echo -n "Enter the name of the account : "
195
			echo -n "Enter the name of the account : "
146
		fi
196
		fi
147
		read account
197
		read account
148
		for i in $ALL_PROFILS
198
		for i in $ALL_PROFILS
149
		do
199
		do
150
			tmp_account=`cat $DIR_KEY/key_only_$i | cut -d':' -f1`
200
			tmp_account=`cat $DIR_KEY/key_only_$i | cut -d':' -f1`
151
			for j in $tmp_account
201
			for j in $tmp_account
152
				do
202
				do
153
				if [ "$j" = "$account" ]
203
				if [ "$j" = "$account" ]
154
					then
204
				then
155
					/usr/bin/htdigest $DIR_KEY/key_only_$i "ALCASAR Control Center (ACC)" $account
205
					htdigest $DIR_KEY/key_only_$i "$account"
156
				fi
206
				fi
157
				done
207
				done
158
		done
208
		done
159
		concat
209
		concat
160
		;;
210
		;;
161
	--list|-l)
211
	--list|-l)
162
		# liste des comptes par profile
212
		# liste des comptes par profil
163
		list
213
		list
164
		;;
214
		;;
165
	*)
215
	*)
166
		if [ $Lang == "fr" ]
216
		if [ $Lang == "fr" ]
167
		then
217
		then
168
			echo "Argument inconnu :$1";
218
			echo "Argument inconnu :$1";
169
		else
219
		else
170
			echo "Unknown argument : $i";
220
			echo "Unknown argument : $i";
171
		fi
221
		fi
172
		echo "$usage"
222
		echo "$usage"
173
		exit 1
223
		exit 1
174
		;;
224
		;;
175
esac
225
esac
176
 
226