Subversion Repositories ALCASAR

Rev

Rev 1380 | Go to most recent revision | Details | Last modification | View Log

Rev Author Line No. Line
1349 richard 1
#!/bin/bash
2
#########################################
3
#######	VARIABLES ne pas toucher ########
4
nb_essais=3
5
time_account=1
6
time_ban=1
7
numero_alcasar=XXXXXXXXXX
8
#########################################
9
####### IDs DB ##########################
10
u_db="radius"
11
p_db="password"
12
#########################################
13
#########################################
14
 
15
rad="radcheck"
16
radgp="radusergroup"
17
radgpck="radgroupcheck"
18
radinf="userinfo"
19
 
20
sms_p="SMS_ban_perm"
21
sms_t="SMS_ban_temp"
22
 
23
inb="inbox"
24
 
25
config="/etc/gammu_smsd_conf"
26
logfile="/var/log/gammu-smsd/gammu-smsd.log"
27
script="/usr/local/bin/alcasar-sms.sh"
28
separator="########## START ##########"
29
end="%%%%%%%%%% STOP %%%%%%%%%%"
30
 
31
 
32
usage="Usage: alcasar-gammu.sh 
33
Start Gammu-smsd   : --start
34
Stop Gammu-smsd    : --stop 
35
Process on new sms : --new_sms"
36
 
37
 
38
nb_args=$#
39
args=$1
40
 
41
 
42
# Functions
43
 
44
function start_gammu() {
45
	#On truncate la table phones (informations signal / IMEI / batterie / sms recu et envoyé)
46
		sql_trunc_phones="connect gammu; TRUNCATE phones;"
47
		result=$(mysql --user=$u_db --password=$p_db -B -se "$sql_trunc_phones")
48
 
49
 
50
	#On verifie que le groupe sms est créé
51
		sql_check_gp="connect radius; SELECT * FROM $radgp WHERE username='sms' AND groupname='sms';"
52
		result=$(mysql --user=$u_db --password=$p_db -B -se "$sql_check_gp")
53
 
54
		if test -z "$result"
55
		then
56
			sql_add_gp="connect radius; INSERT INTO $radgp (username,groupname) VALUES ('sms','sms');"
57
			sql_add_gp_att="connect radius; INSERT INTO $radgpck (groupname,attribute,op,value) VALUES ('sms','Simultaneous-Use',':=',1);"
58
 
59
			mysql --user=$u_db --password=$p_db -B -se "$sql_add_gp"
60
			mysql --user=$u_db --password=$p_db -B -se "$sql_add_gp_att"
61
		fi
62
 
63
	#Start gammu
64
		echo $separator >> $logfile
65
		sudo gammu-smsd --config $config --pid /var/run/gammu-smsd.pid --daemon
66
} # end function start_gammu
67
 
68
function stop_gammu() {
69
	#Stop gammu
70
		sudo kill -9 gammu-smsd
71
		sleep 10
72
		echo $end >> $logfile
73
} # end function stop_gammu
74
 
75
function unlock() {
76
	#Suppression du numero dans la table SMS_ban_perm
77
		sql_remove_ban_perm="connect gammu; DELETE FROM $sms_p"
78
		mysql --user=$u_db --password=$p_db -B -se "$sql_remove_ban_perm WHERE SenderNumber=$1;"
79
 
80
	# Ajout au groupe sms
81
		sql_remove_gp="connect radius; DELETE FROM $radgp WHERE username='$1';"
82
		mysql --user=$u_db --password=$p_db -B -se "$sql_remove_gp"
83
 
84
	# Suppression du compte dans Radcheck
85
		sql_remove_compte="connect radius; DELETE FROM $rad WHERE username='$1';"
86
		mysql --user=$u_db --password=$p_db -B -se "$sql_remove_compte"
87
 
88
 
89
 
90
} # end function unlock
91
 
92
function new_sms() {
93
	# Check Inbox table, manage Ban temp and perm, create account
94
		export salt='$1$passwd$'
95
 
96
		sql_select_inbox="connect gammu; SELECT ID, SenderNumber, TextDecoded FROM $inb;"
97
		sql_delete_inbox="connect gammu; DELETE FROM $inb"
98
 
99
		mysql --user=$u_db --password=$p_db -B -se "$sql_select_inbox" | while read result;
100
		do
101
		# On recupère le nombre de mots (resultat)
102
			nb=$(echo $result | wc -w)
103
 
104
		# On récypère le numéro de l'ID
105
			id=$(echo $result | cut -d ' ' -f1)
106
			numero=$(echo $result | cut -d ' ' -f2 | sed -e 's/+33/0/g')
107
 
108
		# On vérifie que le numéro n'est pas Ban Perm	
109
			sql_ban_perm="connect gammu; SELECT * FROM $sms_p WHERE SenderNumber=$numero"
110
			result_bp=$(mysql --user=$u_db --password=$p_db -B -se "$sql_ban_perm")
111
 
112
		if test -z "$result_bp"
113
		then
114
			# Test sur le nombre de mots (resultat)
115
			if [ $nb -eq 2 ]	# Si 2 mots : le mot de passe est manquant
116
			then
117
				# On incrémente de 1 dans la table des bans temp // NO PASSWORD
118
				sql_add_temp="connect gammu; INSERT INTO $sms_t(SenderNumber) VALUES ('$numero');"
119
				mysql --user=$u_db --password=$p_db -B -se "$sql_add_temp"
120
 
121
			elif [ $nb -eq 3 ]	# Si 3 mots : id + mot de passe + numero 
122
			then
123
				export pass=$(echo $result | cut -d ' ' -f3)
124
				pass_salt=$(perl -e'print crypt($ARGV[0],$ARGV[1])' $pass $salt)
125
 
126
				export LC_TIME="en_US.UTF-8"
127
				expir=$(date '+%d %B %Y' -d "$time_account days")
128
 
129
				# Suppression du compte dans Radcheck
130
					sql_del_compte="connect radius; DELETE FROM $rad WHERE username='$numero';"
131
					mysql --user=$u_db --password=$p_db -B -se "$sql_del_compte"
132
 
133
				# Ajout table RadCheck : creation du compte
134
					sql_add_pass="connect radius; INSERT INTO $rad (username,attribute,op,value) VALUES ('$numero','Crypt-Password',':=','$pass_salt');"
135
					sql_add_expe="connect radius; INSERT INTO $rad (username,attribute,op,value) VALUES ('$numero','Expiration',':=','$expir');"
136
 
137
					mysql --user=$u_db --password=$p_db -B -se "$sql_add_pass"
138
					mysql --user=$u_db --password=$p_db -B -se "$sql_add_expe"
139
 
140
				# Ajout au groupe sms
141
					sql_add_gp="connect radius; INSERT INTO $radgp (username,groupname) VALUES ('$numero','sms');"
142
					mysql --user=$u_db --password=$p_db -B -se "$sql_add_gp"
143
 
144
				# Suppression du numéro dans table SMS_ban_temp
145
					sql_remove_ban_temp="connect gammu; DELETE FROM $sms_t"
146
					mysql --user=$u_db --password=$p_db -B -se "$sql_remove_ban_temp WHERE SenderNumber=$numero;"
147
 
148
				# Ajout du numero table SMS_ban_perm, 0 : creation du compte
149
					sql_add_ban_perm="connect gammu; INSERT INTO $sms_p (SenderNumber,Perm,Expiration) VALUES ('$numero',0,'$expir');"
150
					mysql --user=$u_db --password=$p_db -B -se "$sql_add_ban_perm"
151
 
152
			else	
153
			# Autrement, le mot de passe est trop grand ( > un mot )
154
				# On incrémente d'un 1 dans la table des bans temp
155
					sql_add_temp="connect gammu; INSERT INTO $sms_t(SenderNumber) VALUES ('$numero');"
156
					mysql --user=$u_db --password=$p_db -B -se "$sql_add_temp"
157
			fi
158
 
159
			# On gère les bans temp en ban perm
160
				sql_select_temp="connect gammu; SELECT ID FROM $sms_t WHERE SenderNumber='$numero'"
161
				r_select_temp=$(mysql --user=$u_db --password=$p_db -B -se "$sql_select_temp")
162
				nb_ban_t=$(echo $r_select_temp| wc -w)
163
 
164
			if [ $nb_ban_t -ge $nb_essais ]
165
			then
166
				# Suppression du numéro dans table SMS_ban_temp
167
					sql_remove_ban_temp="connect gammu; DELETE FROM $sms_t"
168
					mysql --user=$u_db --password=$p_db -B -se "$sql_remove_ban_temp WHERE SenderNumber=$numero;"
169
 
170
					export LC_TIME="en_US.UTF-8"
171
					expir_f=$(date '+%d %B %Y' -d "$time_ban days")
172
 
173
				# Ajout du numero table SMS_ban_perm, 1 : flood
174
					sql_add_ban_perm="connect gammu; INSERT INTO $sms_p (SenderNumber,Perm,Expiration) VALUES ('$numero',1,'$expir_f');"
175
					mysql --user=$u_db --password=$p_db -B -se "$sql_add_ban_perm"
176
			fi	
177
		else
178
			date_expiration=$(echo $result_bp | cut -d ' ' -f2,3,4)
179
			perm=$(echo $result_bp | cut -d ' ' -f5)
180
 
181
			export LC_TIME="en_US.UTF-8"
182
			date_script=$(date '+%d %B %Y' -d "now")
183
 
184
			# On converti les deux dates en secondes, pour les comparer.
185
				d_exp=$(date --date "$date_expiration" +%s)
186
				d_scr=$(date --date "$date_script" +%s)
187
 
188
 
189
			if test $d_scr -gt $d_exp		# Si le ban à expiré
190
			then
191
 
192
				# Test sur le nombre de mots (resultat)
193
				if [ $nb -eq 2 ]	# Si 2 mots : le mot de passe est manquant
194
				then
195
					# On incrémente de 1 dans la table des bans temp
196
						sql_add_temp="connect gammu; INSERT INTO $sms_t(SenderNumber) VALUES ('$numero');"
197
						mysql --user=$u_db --password=$p_db -B -se "$sql_add_temp"
198
 
199
				elif [ $nb -eq 3 ]	# Si 3 mots : id + mot de passe + numero 
200
				then
201
					date_expiration=$(echo $result_bp | cut -d ' ' -f2,3,4)
202
					perm=$(echo $result_bp | cut -d ' ' -f5)
203
 
204
					date_script=$(date '+%d %B %Y' -d "now")
205
 
206
					# On converti les deux dates en secondes, pour les comparer.
207
						d_exp=$(date --date "$date_expiration" +%s)
208
						d_scr=$(date --date "$date_script" +%s)
209
 
210
						export pass=$(echo $result | cut -d ' ' -f3)
211
						pass_salt=$(perl -e'print crypt($ARGV[0],$ARGV[1])' $pass $salt)
212
 
213
						export LC_TIME="en_US.UTF-8"
214
						expir=$(date '+%d %B %Y' -d "$time_account days")
215
 
216
					# Suppression du compte dans Radcheck
217
						sql_del_compte="connect radius; DELETE FROM $rad WHERE username='$numero';"
218
						mysql --user=$u_db --password=$p_db -B -se "$sql_del_compte"
219
 
220
					# Creation du compte
221
						sql_add_pass="connect radius; INSERT INTO $rad (username,attribute,op,value) VALUES ('$numero','Crypt-Password',':=','$pass_salt');"
222
						sql_add_expe="connect radius; INSERT INTO $rad (username,attribute,op,value) VALUES ('$numero','Expiration',':=','$expir');"
223
 
224
						mysql --user=$u_db --password=$p_db -B -se "$sql_add_pass"
225
						mysql --user=$u_db --password=$p_db -B -se "$sql_add_expe"
226
 
227
					# Ajout au groupe sms
228
						sql_add_gp="connect radius; INSERT INTO $radgp (username,groupname) VALUES ('$numero','sms');"
229
						mysql --user=$u_db --password=$p_db -B -se "$sql_add_gp"
230
 
231
 
232
					# Suppression du numéro dans table SMS_ban_temp
233
						sql_remove_ban_temp="connect gammu; DELETE FROM $sms_t"
234
						mysql --user=$u_db --password=$p_db -B -se "$sql_remove_ban_temp WHERE SenderNumber=$numero;"
235
 
236
					#Suppression du numero dans la table SMS_ban_perm
237
						sql_remove_ban_perm="connect gammu; DELETE FROM $sms_p"
238
						mysql --user=$u_db --password=$p_db -B -se "$sql_remove_ban_perm WHERE SenderNumber=$numero;"
239
 
240
					# Ajout du numero table SMS_ban_perm, 0 : creation du compte
241
						sql_add_ban_perm="connect gammu; INSERT INTO $sms_p (SenderNumber,Perm,Expiration) VALUES ('$numero',0,'$expir');"
242
						mysql --user=$u_db --password=$p_db -B -se "$sql_add_ban_perm"
243
 
244
					else	
245
					# Autrement, le mot de passe est trop grand ( > un mot )
246
						# On incrémente d'un 1 dans la table des bans temp
247
							sql_add_temp="connect gammu; INSERT INTO $sms_t(SenderNumber) VALUES ('$numero');"
248
							mysql --user=$u_db --password=$p_db -B -se "$sql_add_temp"
249
							echo "Mot de passe incorrect, ajout du numero en ban temporaire"
250
					fi
251
 
252
					# On gère les bans temp en ban perm
253
						sql_select_temp="connect gammu; SELECT ID FROM $sms_t WHERE SenderNumber='$numero'"
254
						r_select_temp=$(mysql --user=$u_db --password=$p_db -B -se "$sql_select_temp")
255
						nb_ban_t=$(echo $r_select_temp| wc -w)
256
 
257
					if [ $nb_ban_t -ge $nb_essais ]
258
					then
259
 
260
						echo "Trop de ban temporaire" 
261
 
262
						#Suppression du numero dans la table SMS_ban_perm
263
							sql_remove_ban_perm="connect gammu; DELETE FROM $sms_p"
264
							mysql --user=$u_db --password=$p_db -B -se "$sql_remove_ban_perm WHERE SenderNumber=$numero;"
265
 
266
						# Suppression du numéro dans table SMS_ban_temp
267
							sql_remove_ban_temp="connect gammu; DELETE FROM $sms_t"
268
							mysql --user=$u_db --password=$p_db -B -se "$sql_remove_ban_temp WHERE SenderNumber=$numero;"
269
 
270
							export LC_TIME="en_US.UTF-8"
271
							expir_f=$(date '+%d %B %Y' -d "$time_ban days")
272
 
273
						# Ajout du numero table SMS_ban_perm, 1 : flood
274
							sql_add_ban_perm="connect gammu; INSERT INTO $sms_p (SenderNumber,Perm,Expiration) VALUES ('$numero',1,'$expir_f');"
275
							mysql --user=$u_db --password=$p_db -B -se "$sql_add_ban_perm"
276
					fi
277
				else
278
					echo "Le ban de $numero est encore valide"	
279
				fi	
280
			fi	
281
 
282
			# On supprime la ligne d'ID=$id dans inbox
283
			mysql --user=$u_db --password=$p_db -B -e "$sql_delete_inbox WHERE ID=$id;"
284
		done
285
} # end function new_sms
286
 
287
 
288
# CORE
289
case $args in
290
	-h | --help)
291
		echo "$usage"
292
		exit 0
293
		;;
294
	--start)
295
		start_gammu
296
		exit 0
297
		;;
298
	--stop)
299
		stop_gammu
300
		exit 0 
301
		;;
302
	--last_nosim)
303
		# Récupère la dernière ligne où NOSIM est présent (error)
304
		cat $logfile | grep -n "NOSIM" | cut -d ':' -f1 | tail -n 1
305
		exit 0 
306
		;;
307
	--last_start)
308
		# Récupère la dernière ligne où ########## est présent (séparateur)
309
		cat $logfile | grep -n "##########" | cut -d ':' -f1 | tail -n 1
310
		exit 0 
311
		;;
312
	--last_stop)
313
		# Récupère la dernière ligne où %%%%%%%%%% est présent (séparateur)
314
		cat $logfile | grep -n "%%%%%%%%%%" | cut -d ':' -f1 | tail -n 1
315
		exit 0 
316
		;;
317
	--last_writeerror)
318
		#Récupère la dernière ligne où SECURITYERROR est présent (error)
319
		cat $logfile | grep -n "DEVICEWRITEERROR" | cut -d ':' -f1 | tail -n 1
320
		exit 0 
321
		;;
322
	--last_timeout)
323
		# Récupère la dernière ligne où SECURITYERROR est présent (error)
324
		cat $logfile | grep -n "TIMEOUT" | cut -d ':' -f1 | tail -n 1
325
		exit 0 
326
		;;
327
	--last_secu)
328
		# Récupère la dernière ligne où SECURITYERROR est présent (error)
329
		cat $logfile | grep -n "SECURITYERROR" | cut -d ':' -f1 | tail -n 1
330
		exit 0 
331
		;;
332
	--last_puk)
333
		# Récupère la dernière ligne où PUK est présent (error)
334
		cat $logfile | grep -n "UNKNOWN" | cut -d ':' -f1 | tail -n 1
335
		exit 0 
336
		;;
337
	--log)
338
		# Récupère le nom du fichier de log
339
		cat $config | grep logfile | cut -d ' ' -f3
340
		exit 0 
341
		;;
342
	--pin)
343
		# Récupère le code PIN (file de conf)
344
		cat $config | grep PIN | cut -d ' ' -f3
345
		exit 0 
346
		;;
347
	--replace_pin)
348
		# Edition du code PIN
349
		sed -i "9c PIN = $2" $config
350
		exit 0 
351
		;;
352
	--try_ban)
353
		# Récupère le nombre d'essais avant le ban perm
354
		grep nb_essais= $script | head -n 1 | cut -d '=' -f2
355
		exit 0 
356
		;;
357
	--replace_try_ban)
358
		# Edition le nombre d'essais avant le ban perm
359
		sed -i "4c nb_essais=$2" $script
360
		exit 0 
361
		;;
362
	--time_account)
363
		# Récupère la durée en jours de la session créée
364
		grep time_account= $script | head -n 1 | cut -d '=' -f2
365
		exit 0 
366
		;;
367
	--replace_time_account)
368
		# Edition de la durée de la session créée
369
		sed -i "5c time_account=$2" $script
370
		exit 0 
371
		;;
372
	--time_perm)
373
		# Récupère la durée un jours d'un ban perm (après flood par exemple)
374
		grep time_ban= $script | head -n 1 | cut -d '=' -f2
375
		exit 0 
376
		;;
377
	--replace_time_perm)
378
		# Edition de la durée d'un ban perm
379
		sed -i "6c time_ban=$2" $script
380
		exit 0 
381
		;;
382
	--unlock_num)
383
		# Appel de la fonction unlock : deban un numero $2
384
		unlock "$2"
385
		exit 0 
386
		;;
387
	--new_sms)
388
		# Appel de la fonction new_sms : filtrage du password, creation du compte et ban
389
		new_sms
390
		exit 0
391
		;;
392
	--imei_device)
393
		# Recuperation de l'imei du device
394
		sql_imei_phones="connect gammu; SELECT \`IMEI\` FROM phones;"
395
		mysql --user=$u_db --password=$p_db -B -se "$sql_imei_phones"
396
		exit 0
397
		;;
398
	--signal_device)
399
		# Recuperation du signal du device
400
		sql_signal_phones="connect gammu; SELECT \`Signal\` FROM phones;"
401
		mysql --user=$u_db --password=$p_db -B -se "$sql_signal_phones"
402
		exit 0
403
		;;
404
	--sms_received)
405
		# Recuperation du nombre de sms reçu. Depuis la dernière activation.
406
		sql_sms_received="connect gammu; SELECT \`Received\` FROM phones;"
407
		mysql --user=$u_db --password=$p_db -B -se "$sql_sms_received"
408
		exit 0
409
		;;
410
	--numero_alcasar)
411
		# Récupère le numero de la clé 3g (téléphone)
412
		grep numero_alcasar= $script | head -n 1 | cut -d '=' -f2
413
		exit 0 
414
		;;
415
	--replace_numero_alcasar)
416
		# Edition du numero de la clé 3g (téléphone)
417
		sed -i "7c numero_alcasar=$2" $script
418
		exit 0 
419
		;;
420
	*)
421
		# Default
422
		echo "$usage"
423
		exit 0
424
		;;
425
esac
426
exit 0
427