Subversion Repositories ALCASAR

Rev

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

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