winlog/admin/scripts_distants/wifi/radius_notify_winlog.sh
2019-04-09 15:15:34 +02:00

63 lines
2.4 KiB
Bash

#!/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