Subversion Repositories ALCASAR

Rev

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