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)
|