Subversion Repositories ALCASAR

Rev

Rev 2564 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log

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