Subversion Repositories ALCASAR

Rev

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