Subversion Repositories ALCASAR

Rev

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