| 10,30 → 10,24 |
| |
| CONF_FILE='/usr/local/etc/alcasar.conf' |
| |
| ######################################### |
| ####### VARIABLES ######## |
| nb_essais=3 |
| time_account=1 |
| time_ban=2 |
| ######################################### |
| ####### IDs DB ########################## |
| PASSWD_FILE="/root/ALCASAR-passwords.txt" |
| u_db=$(grep '^db_user=' $PASSWD_FILE | cut -d'=' -f2-) |
| p_db=$(grep '^db_password=' $PASSWD_FILE | cut -d'=' -f2-) |
| ######################################### |
| ######################################### |
| |
| rad="radcheck" |
| radgp="radusergroup" |
| radgpck="radgroupcheck" |
| radinf="userinfo" |
| |
| sms_p="SMS_ban_perm" |
| sms_t="SMS_ban_temp" |
| |
| inb="inbox" |
| SMS_c="SMS_country" |
| |
| config="/etc/gammu_smsd_conf" |
| config2="/etc/gammurc" |
| logfile="/var/log/gammu-smsd/gammu-smsd.log" |
| 41,48 → 35,34 |
| separator="########## START ##########" |
| end="%%%%%%%%%% STOP %%%%%%%%%%" |
| |
| |
| usage="Usage: alcasar-gammu.sh |
| Start Gammu-smsd : --start |
| Stop Gammu-smsd : --stop |
| Process on new sms : --new_sms" |
| |
| |
| nb_args=$# |
| args=$1 |
| |
| |
| # Functions |
| function mode_huawei() { |
| couple=$(lsusb | grep -i huawei | cut -d ' ' -f6) |
| vendor=$(echo $couple | cut -d ':' -f1) |
| product=$(echo $couple | cut -d ':' -f2) |
| |
| echo "******** Modeswitch *************" >> $logfile |
| echo $vendor >> $logfile |
| echo $product >> $logfile |
| |
| /usr/sbin/usb_modeswitch -I -H -v 0x$vendor -p 0x$product -V 0x$vendor -P 0x$product -W -n >> $logfile |
| } |
| } # end function mode_huawei |
| |
| function start_gammu() { |
| # Check phone number is set |
| if [ -z "$(grep '^SMS_NUM=' $CONF_FILE | cut -d'=' -f2-)" ]; then |
| echo 'The phone number is not set.' |
| # exit 2 |
| fi |
| |
| #On truncate la table phones (informations signal / IMEI / batterie / sms recu et envoyé) |
| # Truncate phones table (informations signal/IMEI/battery/sent et reveived sms) |
| mysql --user=$u_db --password=$p_db --database=gammu -Bs -e 'TRUNCATE phones;' |
| |
| |
| #On verifie que le groupe sms est créé |
| # Verify the sms group is created |
| if [ $(mysql --user=$u_db --password=$p_db --database=radius -Bs -e "SELECT COUNT(*) FROM $radgp WHERE username='sms' AND groupname='sms';") -eq 0 ]; then |
| sql_add_gp="INSERT INTO $radgp (username,groupname) VALUES ('sms','sms'); INSERT INTO $radgpck (groupname,attribute,op,value) VALUES ('sms','Simultaneous-Use',':=',1);" |
| mysql --user=$u_db --password=$p_db --database=radius -Bs -e "$sql_add_gp" |
| fi |
| |
| #Start gammu |
| # Start gammu |
| echo $separator >> $logfile |
| /usr/bin/systemctl -q start gammu-smsd.service |
| /usr/bin/systemctl -q enable gammu-smsd.service |
| 89,32 → 69,26 |
| } # end function start_gammu |
| |
| function stop_gammu() { |
| #Stop gammu |
| /usr/bin/systemctl -q stop gammu-smsd.service |
| /usr/bin/systemctl -q disable gammu-smsd.service |
| sleep 10 |
| echo $end >> $logfile |
| } # end function stop_gammu |
| |
| function unlock() { |
| #Suppression du numero dans la table SMS_ban_perm |
| # Remove phone number in SMS_ban_perm table |
| sql_remove_ban_perm="connect gammu; DELETE FROM $sms_p" |
| mysql --user=$u_db --password=$p_db -B -se "$sql_remove_ban_perm WHERE SenderNumber=$1;" |
| |
| # Ajout au groupe sms |
| # Add sms group |
| sql_remove_gp="connect radius; DELETE FROM $radgp WHERE username='$1';" |
| mysql --user=$u_db --password=$p_db -B -se "$sql_remove_gp" |
| |
| # Suppression du compte dans Radcheck |
| # Remove account in Radcheck table |
| sql_remove_compte="connect radius; DELETE FROM $rad WHERE username='$1';" |
| mysql --user=$u_db --password=$p_db -B -se "$sql_remove_compte" |
| } # end function unlock |
| |
| function change_country() { |
| # recupère le status du pays |
| sql_status_country="connect gammu; SELECT status FROM SMS_country WHERE name='$1'" |
| stat=$(mysql --user=$u_db --password=$p_db -B -se "$sql_status_country") |
| |
| if [ $stat -eq 0 ] |
| then |
| sql_change_country="connect gammu; UPDATE $SMS_c SET status=1 WHERE name='$1'" |
| 123,43 → 97,39 |
| sql_change_country="connect gammu; UPDATE $SMS_c SET status=0 WHERE name='$1'" |
| mysql --user=$u_db --password=$p_db -B -se "$sql_change_country" |
| fi |
| |
| |
| } # end change_country |
| |
| function supp_acc_rad() { |
| # Suppression du compte dans Radcheck |
| # Remove account in Radcheck table |
| sql_del_compte="connect radius; DELETE FROM $rad WHERE username='$1';" |
| mysql --user=$u_db --password=$p_db -B -se "$sql_del_compte" |
| } # end function supp_acc_rad() |
| |
| function add_acc_rad() { |
| # Ajout table RadCheck : creation du compte |
| # Add accoubt in RadCheck table |
| sql_add_pass="connect radius; INSERT INTO $rad (username,attribute,op,value) VALUES ('$1','Crypt-Password',':=','$2');" |
| sql_add_expe="connect radius; INSERT INTO $rad (username,attribute,op,value) VALUES ('$1','Expiration',':=','$3');" |
| |
| mysql --user=$u_db --password=$p_db -B -se "$sql_add_pass" |
| mysql --user=$u_db --password=$p_db -B -se "$sql_add_expe" |
| |
| # Ajout au groupe sms |
| # Add this account to sms group |
| sql_add_gp="connect radius; INSERT INTO $radgp (username,groupname) VALUES ('$1','sms');" |
| mysql --user=$u_db --password=$p_db -B -se "$sql_add_gp" |
| } # end function add_acc_rad() |
| |
| function supp_num_temp() { |
| # Suppression du numéro dans table SMS_ban_temp |
| # Remove phone number in SMS_ban_temp table |
| sql_remove_ban_temp="connect gammu; DELETE FROM $sms_t" |
| mysql --user=$u_db --password=$p_db -B -se "$sql_remove_ban_temp WHERE SenderNumber=$1;" |
| } # end function supp_num_temp() |
| |
| function add_num_perm() { |
| # Ajout du numero table SMS_ban_perm, 0 : creation du compte |
| # Add phone number in SMS_ban_perm table |
| sql_add_ban_perm="connect gammu; INSERT INTO $sms_p (SenderNumber,Perm,Expiration) VALUES ('$1',0,'$2');" |
| mysql --user=$u_db --password=$p_db -B -se "$sql_add_ban_perm" |
| } # end function add_num_perm() |
| |
| function supp_num_perm() { |
| #Suppression du numero dans la table SMS_ban_perm |
| # Remove phone number in SMS_ban_perm table |
| sql_remove_ban_perm="connect gammu; DELETE FROM $sms_p" |
| mysql --user=$u_db --password=$p_db -B -se "$sql_remove_ban_perm WHERE SenderNumber=$1;" |
| } # end function add_num_perm() |
| 167,165 → 137,130 |
| function new_sms() { |
| # Check Inbox table, manage Ban temp and perm, create account |
| export salt='$5$passwd$' |
| |
| sql_select_inbox="connect gammu; SELECT ID, SenderNumber, TextDecoded FROM $inb;" |
| sql_delete_inbox="connect gammu; DELETE FROM $inb" |
| |
| mysql --user=$u_db --password=$p_db -B -se "$sql_select_inbox" | while read result; |
| do |
| # On recupère le nombre de mots (resultat) |
| # Retrieve the number of words (result) |
| nb=$(echo $result | wc -w) |
| |
| # On récupère le numéro de l'ID |
| id=$(echo $result | cut -d ' ' -f1) |
| |
| numero=$(echo $result | cut -d ' ' -f2) |
| |
| if [[ $numero =~ ^\+ ]] |
| then |
| |
| # On vérifie si le pays est bloqué |
| # Retrive the ID |
| id=$(echo $result | cut -d ' ' -f1) |
| numero=$(echo $result | cut -d ' ' -f2) |
| if [[ $numero =~ ^\+ ]] |
| then |
| # Check if country is blocked |
| sql_select_countries="connect gammu; SELECT id FROM $SMS_c WHERE status=1" |
| mysql --user=$u_db --password=$p_db -B -se "$sql_select_countries" | while read result_c; |
| do |
| |
| if [[ $numero =~ ^"$result_c" ]] |
| then |
| |
| numero=$(echo $numero | cut -d '+' -f2) |
| |
| # On vérifie que le numéro n'est pas Ban Perm |
| sql_ban_perm="connect gammu; SELECT * FROM $sms_p WHERE SenderNumber=$numero" |
| result_bp=$(mysql --user=$u_db --password=$p_db -B -se "$sql_ban_perm") |
| |
| if test -z "$result_bp" |
| if [[ $numero =~ ^"$result_c" ]] |
| then |
| # Test sur le nombre de mots (resultat) |
| if [ $nb -eq 2 ] # Si 2 mots : le mot de passe est manquant |
| numero=$(echo $numero | cut -d '+' -f2) |
| # Check if GSM number is nabbed |
| sql_ban_perm="connect gammu; SELECT * FROM $sms_p WHERE SenderNumber=$numero" |
| result_bp=$(mysql --user=$u_db --password=$p_db -B -se "$sql_ban_perm") |
| if test -z "$result_bp" |
| then |
| # On incrémente de 1 dans la table des bans temp // NO PASSWORD |
| sql_add_temp="connect gammu; INSERT INTO $sms_t(SenderNumber) VALUES ('$numero');" |
| mysql --user=$u_db --password=$p_db -B -se "$sql_add_temp" |
| |
| elif [ $nb -eq 3 ] # Si 3 mots : id + mot de passe + numero |
| then |
| export pass=$(echo $result | cut -d ' ' -f3) |
| pass_salt=$(perl -e'print crypt($ARGV[0],$ARGV[1])' $pass $salt) |
| |
| export LC_TIME="en_US.UTF-8" |
| expir=$(date '+%d %B %Y' -d "$time_account days") |
| |
| supp_acc_rad "$numero" |
| add_acc_rad "$numero" "$pass_salt" "$expir" |
| supp_num_temp "$numero" |
| add_num_perm "$numero" "$expir" |
| |
| else |
| # Autrement, le mot de passe est trop grand ( > un mot ) |
| # On incrémente d'un 1 dans la table des bans temp |
| # Test the number of word (result) |
| if [ $nb -eq 2 ] # if only 2 words : lack of password |
| then |
| # Add "1" in bans_temp table // NO PASSWORD |
| sql_add_temp="connect gammu; INSERT INTO $sms_t(SenderNumber) VALUES ('$numero');" |
| mysql --user=$u_db --password=$p_db -B -se "$sql_add_temp" |
| fi |
| |
| # On gère les bans temp en ban perm |
| elif [ $nb -eq 3 ] # if 3 words (id + password + phone numbere) |
| then |
| export pass=$(echo $result | cut -d ' ' -f3) |
| pass_salt=$(perl -e'print crypt($ARGV[0],$ARGV[1])' $pass $salt) |
| export LC_TIME="en_US.UTF-8" |
| expir=$(date '+%d %B %Y' -d "$time_account days") |
| supp_acc_rad "$numero" |
| add_acc_rad "$numero" "$pass_salt" "$expir" |
| supp_num_temp "$numero" |
| add_num_perm "$numero" "$expir" |
| else # more then 3 words --> Add "1" in ban_temp table |
| sql_add_temp="connect gammu; INSERT INTO $sms_t(SenderNumber) VALUES ('$numero');" |
| mysql --user=$u_db --password=$p_db -B -se "$sql_add_temp" |
| fi |
| # manage ban perm |
| sql_select_temp="connect gammu; SELECT ID FROM $sms_t WHERE SenderNumber='$numero'" |
| r_select_temp=$(mysql --user=$u_db --password=$p_db -B -se "$sql_select_temp") |
| nb_ban_t=$(echo $r_select_temp| wc -w) |
| |
| if [ $nb_ban_t -ge $nb_essais ] |
| then |
| supp_num_temp "$numero" |
| |
| if [ $nb_ban_t -ge $nb_essais ] |
| then |
| supp_num_temp "$numero" |
| export LC_TIME="en_US.UTF-8" |
| expir_f=$(date '+%d %B %Y' -d "$time_ban days") |
| |
| # Ajout du numero table SMS_ban_perm, 1 : flood |
| # Add "1" in SMS_ban_perm table : flood |
| 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" |
| fi |
| else |
| date_expiration=$(echo $result_bp | cut -d ' ' -f2,3,4) |
| perm=$(echo $result_bp | cut -d ' ' -f5) |
| |
| export LC_TIME="en_US.UTF-8" |
| date_script=$(date '+%d %B %Y' -d "now") |
| |
| # On converti les deux dates en secondes, pour les comparer. |
| d_exp=$(date --date "$date_expiration" +%s) |
| d_scr=$(date --date "$date_script" +%s) |
| |
| if test $d_scr -ge $d_exp # Si le ban à expiré |
| then |
| |
| # Test sur le nombre de mots (resultat) |
| if [ $nb -eq 2 ] # Si 2 mots : le mot de passe est manquant |
| fi |
| else |
| date_expiration=$(echo $result_bp | cut -d ' ' -f2,3,4) |
| perm=$(echo $result_bp | cut -d ' ' -f5) |
| export LC_TIME="en_US.UTF-8" |
| date_script=$(date '+%d %B %Y' -d "now") |
| # convert in seconds in order to be able to compare |
| d_exp=$(date --date "$date_expiration" +%s) |
| d_scr=$(date --date "$date_script" +%s) |
| if test $d_scr -ge $d_exp # Si le ban à expiré |
| then |
| # On incrémente de 1 dans la table des bans temp |
| # Test the number of words (result) |
| if [ $nb -eq 2 ] # Si 2 mots : le mot de passe est manquant |
| then |
| # Add "1" in ban temp table |
| sql_add_temp="connect gammu; INSERT INTO $sms_t(SenderNumber) VALUES ('$numero');" |
| mysql --user=$u_db --password=$p_db -B -se "$sql_add_temp" |
| |
| elif [ $nb -eq 3 ] # Si 3 mots : id + mot de passe + numero |
| then |
| date_expiration=$(echo $result_bp | cut -d ' ' -f2,3,4) |
| perm=$(echo $result_bp | cut -d ' ' -f5) |
| |
| date_script=$(date '+%d %B %Y' -d "now") |
| |
| # On converti les deux dates en secondes, pour les comparer. |
| d_exp=$(date --date "$date_expiration" +%s) |
| d_scr=$(date --date "$date_script" +%s) |
| |
| export pass=$(echo $result | cut -d ' ' -f3) |
| pass_salt=$(perl -e'print crypt($ARGV[0],$ARGV[1])' $pass $salt) |
| |
| export LC_TIME="en_US.UTF-8" |
| expir=$(date '+%d %B %Y' -d "$time_account days") |
| |
| |
| supp_acc_rad "$numero" |
| add_acc_rad "$numero" "$pass_salt" "$expir" |
| supp_num_temp "$numero" |
| supp_num_perm "$numero" |
| add_num_perm "$numero" "$expir" |
| |
| else |
| # Autrement, le mot de passe est trop grand ( > un mot ) |
| # On incrémente d'un 1 dans la table des bans temp |
| elif [ $nb -eq 3 ] # Si 3 mots : id + mot de passe + numero |
| then |
| date_expiration=$(echo $result_bp | cut -d ' ' -f2,3,4) |
| perm=$(echo $result_bp | cut -d ' ' -f5) |
| date_script=$(date '+%d %B %Y' -d "now") |
| # convert in seconds in order to be able to compare |
| d_exp=$(date --date "$date_expiration" +%s) |
| d_scr=$(date --date "$date_script" +%s) |
| export pass=$(echo $result | cut -d ' ' -f3) |
| pass_salt=$(perl -e'print crypt($ARGV[0],$ARGV[1])' $pass $salt) |
| export LC_TIME="en_US.UTF-8" |
| expir=$(date '+%d %B %Y' -d "$time_account days") |
| supp_acc_rad "$numero" |
| add_acc_rad "$numero" "$pass_salt" "$expir" |
| supp_num_temp "$numero" |
| supp_num_perm "$numero" |
| add_num_perm "$numero" "$expir" |
| else |
| # number of words to big (> 3) |
| # Add "1" in bans temp table |
| sql_add_temp="connect gammu; INSERT INTO $sms_t(SenderNumber) VALUES ('$numero');" |
| mysql --user=$u_db --password=$p_db -B -se "$sql_add_temp" |
| echo "Mot de passe incorrect, ajout du numero en ban temporaire" |
| fi |
| |
| # On gère les bans temp en ban perm |
| fi |
| # manage bans_temp & ban_perm |
| sql_select_temp="connect gammu; SELECT ID FROM $sms_t WHERE SenderNumber='$numero'" |
| r_select_temp=$(mysql --user=$u_db --password=$p_db -B -se "$sql_select_temp") |
| nb_ban_t=$(echo $r_select_temp| wc -w) |
| |
| if [ $nb_ban_t -ge $nb_essais ] |
| then |
| supp_num_perm "$numero" |
| supp_num_temp "$numero" |
| |
| if [ $nb_ban_t -ge $nb_essais ] |
| then |
| supp_num_perm "$numero" |
| supp_num_temp "$numero" |
| export LC_TIME="en_US.UTF-8" |
| expir_f=$(date '+%d %B %Y' -d "$time_ban days") |
| |
| # Ajout du numero table SMS_ban_perm, 1 : flood |
| 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" |
| # Add phne number in ban_perm : flood |
| 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" |
| fi |
| else |
| echo "Le ban de $numero est encore valide" |
| fi |
| else |
| echo "Le ban de $numero est encore valide" |
| break |
| fi |
| break |
| #else |
| #echo "Pays bloqué" |
| fi |
| #else |
| #echo "Pays bloqué" |
| fi |
| done |
| else |
| echo "Numero non autorisé (ex: 36665)" |
| fi |
| # On supprime la ligne d'ID=$id dans inbox |
| mysql --user=$u_db --password=$p_db -B -e "$sql_delete_inbox WHERE ID=$id;" |
| done |
| else |
| echo "Numero non autorisé (ex: 36665)" |
| fi |
| # On supprime la ligne d'ID=$id dans inbox |
| mysql --user=$u_db --password=$p_db -B -e "$sql_delete_inbox WHERE ID=$id;" |
| done |
| } # end function new_sms |
| |
| 337,23 → 272,46 |
| exit 0 |
| ;; |
| --start) |
| failed="0" |
| comports=`ls -l /dev/ttyUSB* 2>/dev/null | wc -l` |
| if [ $comports == "0" ] |
| then |
| echo "No GSM modem found." |
| failed="1" |
| fi |
| if [ -z "$(grep '^SMS_NUM=' $CONF_FILE | cut -d'=' -f2-)" ]; then |
| echo 'The phone number is not set.' |
| failed="1" |
| fi |
| if [ $failed == "1" ] |
| then |
| sed -i "s/^SMS=.*/SMS=off/" $CONF_FILE |
| exit 0 |
| fi |
| gammu_pid=`/usr/sbin/pidof gammu-smsd|wc -l` |
| if [ $gammu_pid != "0" ] |
| then |
| echo "gammu is already started" |
| then |
| echo "Gammu is already started" |
| else |
| start_gammu |
| sleep 1 |
| is_active=`systemctl is-active gammu-smsd` |
| if [ $is_active == "active" ] |
| then |
| sed -i "s/^SMS=.*/SMS=on/" $CONF_FILE |
| else |
| sed -i "s/^SMS=.*/SMS=off/" $CONF_FILE |
| fi |
| fi |
| sed -i "s/^SMS=.*/SMS=on/" $CONF_FILE |
| exit 0 |
| ;; |
| --stop) |
| gammu_pid=`/usr/sbin/pidof gammu-smsd|wc -l` |
| if [ $gammu_pid != "0" ] |
| then |
| then |
| stop_gammu |
| else |
| echo "gammu is already stopped" |
| echo "Gammu is already stopped" |
| fi |
| sed -i "s/^SMS=.*/SMS=off/" $CONF_FILE |
| exit 0 |