Subversion Repositories ALCASAR

Rev

Rev 1387 | Rev 1452 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log

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