schema base + script bash radius_notify_winlog.hs
This commit is contained in:
62
admin/scripts_distants/wifi/radius_notify_winlog.sh
Normal file
62
admin/scripts_distants/wifi/radius_notify_winlog.sh
Normal file
@@ -0,0 +1,62 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Script de log des connexions Eduroam dans Winlog
|
||||
# Ce script est programmé dans la crontab à intervalle régulier
|
||||
# Il copie le fichier /var/log/freeradius/radius.log localement
|
||||
# Il compare cette copie à la version précédente de la copie pour déterminer le nombre de nouvelles inscrites dans le log depuis le dernier traitement
|
||||
# Il réduit le fichier de travail à ces nouvelles lignes desquelles il extrait les lignes de connexions réussies
|
||||
# Il émet une requête POST à Winlog avec les données de connexion extraites
|
||||
|
||||
ficLog=/var/log/freeradius/radius.log
|
||||
ficCopie=/root/radius.copie.log
|
||||
ficDerniereCopie=/root/radius.precedent.log
|
||||
ficTravail=/root/radius.connexions.log
|
||||
winlogURL=http://winlog.iut.rdz/wifi/index.php
|
||||
|
||||
# copie du fichier de log dans un fichier de travail local
|
||||
cp $ficLog $ficCopie
|
||||
|
||||
# comparaison du delta entre la copie et la précédente
|
||||
if [ ! -f $ficDerniereCopie ]; then
|
||||
touch $ficDerniereCopie
|
||||
fi
|
||||
nbLignesCopie=$(wc -l < $ficCopie)
|
||||
nbLignesPrec=$(wc -l < $ficDerniereCopie)
|
||||
delta=$(($nbLignesCopie-$nbLignesPrec))
|
||||
|
||||
# si le log actuel a plus de lignes que la derniere copie (delta > 0), alors on copie les delta dernières lignes dans le fichier de travail
|
||||
# sinon, le fichier de log a été réinitialisé (logrotate), le fichier de travail devient directement la copie du fichier du log courant entier
|
||||
if test "$delta" -gt 0; then
|
||||
tail -n $delta $ficCopie > $ficTravail
|
||||
else
|
||||
cp $ficCopie $ficTravail
|
||||
fi
|
||||
# dans tous les cas, on copie le fichier de log actuel dans la fichier "derniere copie"
|
||||
cp $ficCopie $ficDerniereCopie
|
||||
|
||||
|
||||
# Tout le traitement se fait maintenant sur le fichier de travail uniquement
|
||||
#
|
||||
# Sélection des lignes contenant "Login OK" uniquement
|
||||
connexionsOK=$(cat $ficTravail | grep 'Login OK' | cut -d ':' -f6)
|
||||
# Remplacement de tous les espaces par * pour itérer ligne par ligne dans la boucle for (et pas par mot)
|
||||
connexions=${connexionsOK// /*}
|
||||
|
||||
|
||||
for connexion in $connexions; do
|
||||
# Récupération du username dans les colonnes de la ligne
|
||||
username=$(echo $connexion | cut -d'*' -f2)
|
||||
# suppression de tous les caractères à partir du / final
|
||||
username=${username/\/*}
|
||||
# suppression du [ initial
|
||||
username=${username/[}
|
||||
|
||||
# Récupération de la MAC ADDRESS
|
||||
mac=$(echo $connexion | cut -d'*' -f12)
|
||||
# suppression du ) final
|
||||
mac=${mac/)}
|
||||
|
||||
# Envoi de la requête POST à Winlog
|
||||
postData=agent=EDUROAM\&ip=$mac\&username=$username
|
||||
wget -qO- --post-data=$postData $winlogURL
|
||||
done
|
||||
Reference in New Issue
Block a user