| Line 1... | Line 1... | 
          
            | 1 | #! /bin/bash
 | 1 | #!/bin/bash
 | 
          
            | 2 | # $Id: alcasar-mysql.sh 1827 2016-04-19 09:47:29Z raphael.pion $
 | 2 | # $Id: alcasar-mysql.sh 2412 2017-09-17 12:11:23Z tom.houdayer $
 | 
          
            | 3 |  
 | 3 |  
 | 
          
            | 4 | # alcasar-mysql.sh
 | 4 | # alcasar-mysql.sh
 | 
          
            | 5 | # by Franck BOUIJOUX, Pascal LEVANT and Richard REY
 | 5 | # by Franck BOUIJOUX, Pascal LEVANT and Richard REY
 | 
          
            | 6 | # This script is distributed under the Gnu General Public License (GPL)
 | 6 | # This script is distributed under the Gnu General Public License (GPL)
 | 
          
            | 7 |  
 | 7 |  
 | 
          
            | 8 | # Gestion (sauvegarde / import / RAZ) de la base MySQL 'radius'. Fermeture des sessions de comptabilité ouvertes
 | 8 | # Gestion (sauvegarde / import / RAZ) de la base MySQL 'radius'. Fermeture des sessions de comptabilité ouvertes
 | 
          
            | 9 | # Management of mysql 'radius' database (save / import / RAZ). Close the accounting open sessions
 | 9 | # Management of mysql 'radius' database (save / import / RAZ). Close the accounting open sessions
 | 
          
            | 10 |  
 | 10 |  
 | 
          
            | 11 | rep_tr="/var/Save/base" 	 	# répertoire d'accueil des sauvegardes
 | 11 | rep_tr="/var/Save/base"				# répertoire d'accueil des sauvegardes
 | 
          
            | 12 | ext="sql"  				# extension des fichiers de sauvegarde
 | 12 | PASSWD_FILE="/root/ALCASAR-passwords.txt"
 | 
          
            | 13 | DB_RADIUS="radius"
 | 13 | DB_RADIUS="radius"
 | 
          
            | 14 | DB_USER="radius"
 | 14 | DB_USER=$(grep '^db_user=' $PASSWD_FILE | cut -d'=' -f 2-)
 | 
          
            | 15 | radiuspwd="MotdePasse"
 | 15 | DB_PASS=$(grep '^db_password=' $PASSWD_FILE | cut -d'=' -f 2-)
 | 
          
            | 16 | new="$(date +%G%m%d-%Hh%M)"  		# date et heure des fichiers
 | 16 | new="$(date +%G%m%d-%Hh%M)"			# date et heure des fichiers
 | 
          
            | 17 | fichier="alcasar-users-database-$new.$ext"		# nom du fichier de sauvegarde
 | 17 | fichier="alcasar-users-database-$new.sql"	# nom du fichier de sauvegarde
 | 
          
            | 18 |  
 | 18 |  
 | 
          
            | 19 |  
 | 19 |  
 | 
          
            | 20 | stop_acct ()
 | 20 | stop_acct ()
 | 
          
            | 21 | {
 | 21 | {
 | 
          
            | 22 | 	date_now=`date "+%F %X"`
 | 22 | 	date_now=`date "+%F %X"`
 | 
          
            | 23 | 	echo "UPDATE radacct SET acctstoptime = '$date_now', acctterminatecause = 'Admin-Reset' WHERE acctstoptime IS NULL" | mysql -u$DB_USER -p$radiuspwd $DB_RADIUS
 | 23 | 	echo "UPDATE radacct SET acctstoptime = '$date_now', acctterminatecause = 'Admin-Reset' WHERE acctstoptime IS NULL" | mysql -u$DB_USER -p$DB_PASS $DB_RADIUS
 | 
          
            | 24 | }
 | 24 | }
 | 
          
            | 25 | check ()
 | 25 | check ()
 | 
          
            | 26 | {
 | 26 | {
 | 
          
            | 27 | 	echo "check (and repair if needed) the database :"
 | 27 | 	echo "check (and repair if needed) the database :"
 | 
          
            | 28 | 	mysqlcheck --databases $DB_RADIUS -u $DB_USER -p$radiuspwd --auto-repair
 | 28 | 	mysqlcheck --databases $DB_RADIUS -u $DB_USER -p$DB_PASS --auto-repair
 | 
          
            | 29 | }
 | 29 | }
 | 
          
            | 30 |  
 | 30 |  
 | 
          
            | 31 | expire_user ()	# remove users whom expiration date has passed to 7 days
 | 31 | expire_user ()	# remove users whom expiration date has passed to 7 days
 | 
          
            | 32 | {
 | 32 | {
 | 
          
            | 33 | 	del_date=`date +%F`
 | 33 | 	del_date=`date +%F`
 | 
          
            | 34 | 	MYSQL_USER=""
 | 34 | 	MYSQL_USER=""
 | 
          
            | 35 | 	MYSQL_USER=`/usr/bin/mysql -u$DB_USER -p$radiuspwd $DB_RADIUS -ss --exec  "SELECT username FROM radcheck WHERE ( DATE_SUB(CURDATE(),INTERVAL 7 DAY) > STR_TO_DATE(value,'%d %M %Y')) AND attribute='Expiration';"`
 | 35 | 	MYSQL_USER=`/usr/bin/mysql -u$DB_USER -p$DB_PASS $DB_RADIUS -ss --exec  "SELECT username FROM radcheck WHERE ( DATE_SUB(CURDATE(),INTERVAL 7 DAY) > STR_TO_DATE(value,'%d %M %Y')) AND attribute='Expiration';"`
 | 
          
            | 36 | 	for u in $MYSQL_USER
 | 36 | 	for u in $MYSQL_USER
 | 
          
            | 37 | 	do
 | 37 | 	do
 | 
          
            | 38 | 		 /usr/bin/mysql -u$DB_USER -p$radiuspwd $DB_RADIUS --exec "DELETE FROM radusergroup WHERE username = '$u'; DELETE FROM radreply WHERE username = '$u'; DELETE FROM userinfo WHERE UserName = '$u'; DELETE FROM radcheck WHERE username = '$u';"
 | 38 | 		 /usr/bin/mysql -u$DB_USER -p$DB_PASS $DB_RADIUS --exec "DELETE FROM radusergroup WHERE username = '$u'; DELETE FROM radreply WHERE username = '$u'; DELETE FROM userinfo WHERE UserName = '$u'; DELETE FROM radcheck WHERE username = '$u';"
 | 
          
            | 39 | 		if [ $? = 0 ]
 | 39 | 		if [ $? = 0 ]
 | 
          
            | 40 | 		then
 | 40 | 		then
 | 
          
            | 41 | 			echo "User $u was deleted $del_date" >> /var/log/mysqld/delete_user.log
 | 41 | 			echo "User $u was deleted $del_date" >> /var/log/mysqld/delete_user.log
 | 
          
            | 42 | 		else
 | 42 | 		else
 | 
          
            | 43 | 			echo "Delete User $u : Error $del_date" >> /var/log/mysqld/delete_user.log
 | 43 | 			echo "Delete User $u : Error $del_date" >> /var/log/mysqld/delete_user.log
 | 
          
            | Line 47... | Line 47... | 
          
            | 47 |  
 | 47 |  
 | 
          
            | 48 | expire_group () # remove users of group whom expiration date has passed to 7 days
 | 48 | expire_group () # remove users of group whom expiration date has passed to 7 days
 | 
          
            | 49 | {
 | 49 | {
 | 
          
            | 50 | 	del_date=`date +%F`
 | 50 | 	del_date=`date +%F`
 | 
          
            | 51 | 	MYSQL_GROUP=""
 | 51 | 	MYSQL_GROUP=""
 | 
          
            | 52 | 	MYSQL_GROUP=`/usr/bin/mysql -u$DB_USER -p$radiuspwd $DB_RADIUS -ss --exec  "SELECT groupname FROM radgroupcheck WHERE ( DATE_SUB(CURDATE(),INTERVAL 7 DAY) > STR_TO_DATE(value,'%d %M %Y')) AND attribute='Expiration';"`
 | 52 | 	MYSQL_GROUP=`/usr/bin/mysql -u$DB_USER -p$DB_PASS $DB_RADIUS -ss --exec  "SELECT groupname FROM radgroupcheck WHERE ( DATE_SUB(CURDATE(),INTERVAL 7 DAY) > STR_TO_DATE(value,'%d %M %Y')) AND attribute='Expiration';"`
 | 
          
            | 53 | 	for g in $MYSQL_GROUP
 | 53 | 	for g in $MYSQL_GROUP
 | 
          
            | 54 | 	do
 | 54 | 	do
 | 
          
            | 55 | 		MYSQL_USERGROUP=""
 | 55 | 		MYSQL_USERGROUP=""
 | 
          
            | 56 | 		MYSQL_USERGROUP=`/usr/bin/mysql -u$DB_USER -p$radiuspwd $DB_RADIUS -ss --exec  "SELECT username FROM radusergroup WHERE groupname = '$g';"`
 | 56 | 		MYSQL_USERGROUP=`/usr/bin/mysql -u$DB_USER -p$DB_PASS $DB_RADIUS -ss --exec  "SELECT username FROM radusergroup WHERE groupname = '$g';"`
 | 
          
            | 57 | 		for u in $MYSQL_USERGROUP
 | 57 | 		for u in $MYSQL_USERGROUP
 | 
          
            | 58 | 		do
 | 58 | 		do
 | 
          
            | 59 | 		 	/usr/bin/mysql -u$DB_USER -p$radiuspwd $DB_RADIUS --exec "DELETE FROM radusergroup WHERE username = '$u'; DELETE FROM radreply WHERE username = '$u'; DELETE FROM userinfo WHERE UserName = '$u'; DELETE FROM radcheck WHERE username = '$u';"
 | 59 | 		 	/usr/bin/mysql -u$DB_USER -p$DB_PASS $DB_RADIUS --exec "DELETE FROM radusergroup WHERE username = '$u'; DELETE FROM radreply WHERE username = '$u'; DELETE FROM userinfo WHERE UserName = '$u'; DELETE FROM radcheck WHERE username = '$u';"
 | 
          
            | 60 | 			if [ $? = 0 ]
 | 60 | 			if [ $? = 0 ]
 | 
          
            | 61 | 			then
 | 61 | 			then
 | 
          
            | 62 | 				echo "User $u was deleted $del_date" >> /var/log/mysqld/delete_user.log
 | 62 | 				echo "User $u was deleted $del_date" >> /var/log/mysqld/delete_user.log
 | 
          
            | 63 | 			else
 | 63 | 			else
 | 
          
            | 64 | 				echo "Delete User $u : Error $del_date" >> /var/log/mysqld/delete_user.log
 | 64 | 				echo "Delete User $u : Error $del_date" >> /var/log/mysqld/delete_user.log
 | 
          
            | 65 | 			fi
 | 65 | 			fi
 | 
          
            | 66 | 	 	 done
 | 66 | 	 	 done
 | 
          
            | 67 | 		 /usr/bin/mysql -u$DB_USER -p$radiuspwd $DB_RADIUS --exec "DELETE FROM radgroupreply WHERE groupname = '$g'; DELETE FROM radgroupcheck WHERE groupname = '$g';"
 | 67 | 		 /usr/bin/mysql -u$DB_USER -p$DB_PASS $DB_RADIUS --exec "DELETE FROM radgroupreply WHERE groupname = '$g'; DELETE FROM radgroupcheck WHERE groupname = '$g';"
 | 
          
            | 68 | 		if [ $? = 0 ]
 | 68 | 		if [ $? = 0 ]
 | 
          
            | 69 | 		then
 | 69 | 		then
 | 
          
            | 70 | 			echo "Group $g was deleted $del_date" >> /var/log/mysqld/delete_group.log
 | 70 | 			echo "Group $g was deleted $del_date" >> /var/log/mysqld/delete_group.log
 | 
          
            | 71 | 		else
 | 71 | 		else
 | 
          
            | 72 | 			echo "Delete Group $g : Error $del_date" >> /var/log/mysqld/delete_group.log
 | 72 | 			echo "Delete Group $g : Error $del_date" >> /var/log/mysqld/delete_group.log
 | 
          
            | Line 91... | Line 91... | 
          
            | 91 | 		[ -d $rep_tr ] || mkdir -p $rep_tr
 | 91 | 		[ -d $rep_tr ] || mkdir -p $rep_tr
 | 
          
            | 92 | 		if [ -e  $fichier ];
 | 92 | 		if [ -e  $fichier ];
 | 
          
            | 93 | 			then rm -f  $fichier 
 | 93 | 			then rm -f  $fichier 
 | 
          
            | 94 | 		fi
 | 94 | 		fi
 | 
          
            | 95 | 		check
 | 95 | 		check
 | 
          
            | 96 | 		echo "Export the database in file : $fichier"
 | 96 | 		echo "Export the database in file : $fichier.gz"
 | 
          
            | 97 | 		mysqldump -u $DB_USER -p$radiuspwd --opt -BcQC  $DB_RADIUS > $rep_tr/$fichier
 | 97 | 		mysqldump -u $DB_USER -p$DB_PASS --opt -BcQC  $DB_RADIUS > $rep_tr/$fichier
 | 
          
            | 98 | 		gzip -f $rep_tr/$fichier
 | 98 | 		gzip -f $rep_tr/$fichier
 | 
          
            | 99 | 		echo "End of export $( date "+%Hh %Mmn" )"
 | 99 | 		echo "End of export $( date "+%Hh %Mmn" )"
 | 
          
            | 100 | 		;;
 | 100 | 		;;
 | 
          
            | 101 | 	-c | --check | -check)	
 | 101 | 	-c | --check | -check)	
 | 
          
            | 102 | 		check
 | 102 | 		check
 | 
          
            | Line 107... | Line 107... | 
          
            | 107 | 				echo "Enter a SQL file name ('.sql' or '.sql.gz')"
 | 107 | 				echo "Enter a SQL file name ('.sql' or '.sql.gz')"
 | 
          
            | 108 | 			exit 0
 | 108 | 			exit 0
 | 
          
            | 109 | 		else
 | 109 | 		else
 | 
          
            | 110 | 			case $2 in
 | 110 | 			case $2 in
 | 
          
            | 111 | 			*.sql.gz )
 | 111 | 			*.sql.gz )
 | 
          
            | 112 | 				gunzip -f < $2 | mysql -u $DB_USER -p$radiuspwd
 | 112 | 				gunzip -f < $2 | mysql -u $DB_USER -p$DB_PASS
 | 
          
            | 113 | 				stop_acct	
 | 113 | 				stop_acct	
 | 
          
            | 114 | 				;;
 | 114 | 				;;
 | 
          
            | 115 | 			*.sql )
 | 115 | 			*.sql )
 | 
          
            | 116 | 				mysql -u $DB_USER -p$radiuspwd < $2
 | 116 | 				mysql -u $DB_USER -p$DB_PASS < $2
 | 
          
            | 117 | 				stop_acct	
 | 117 | 				stop_acct	
 | 
          
            | 118 | 				;;
 | 118 | 				;;
 | 
          
            | 119 | 			esac
 | 119 | 			esac
 | 
          
            | 120 | 		fi
 | 120 | 		fi
 | 
          
            | 121 | 		;;
 | 121 | 		;;
 | 
          
            | 122 | 	-r | --raz | -raz)
 | 122 | 	-r | --raz | -raz)
 | 
          
            | 123 | 		mysqldump -u $DB_USER -p$radiuspwd --opt -BcQC  $DB_RADIUS > $rep_tr/$fichier
 | 123 | 		mysqldump -u $DB_USER -p$DB_PASS --opt -BcQC  $DB_RADIUS > $rep_tr/$fichier
 | 
          
            | 124 | 		gzip -f $rep_tr/$fichier
 | 124 | 		gzip -f $rep_tr/$fichier
 | 
          
            | 125 | 		mysql -u$DB_USER -p$radiuspwd $DB_RADIUS < /etc/raddb/empty-radiusd-db.sql
 | 125 | 		mysql -u$DB_USER -p$DB_PASS $DB_RADIUS < /etc/raddb/empty-radiusd-db.sql
 | 
          
            | 126 | 		;;
 | 126 | 		;;
 | 
          
            | 127 | 	-a | --acct_stop | -acct_stop)
 | 127 | 	-a | --acct_stop | -acct_stop)
 | 
          
            | 128 | 		stop_acct
 | 128 | 		stop_acct
 | 
          
            | 129 | 		;;
 | 129 | 		;;
 | 
          
            | 130 | 	-e | --expire_user)
 | 130 | 	-e | --expire_user)
 |