#Modif de /etc/syslog-ng/syslog-ng.conf :
#----------------------------------------
# Definition de la source de log => adresse IP du serveur DHCP
# Comme on aura plusieurs serveurs, on met 0.0.0.0 soit tous les serveurs de la planète
source dhcp {
         tcp(ip(0.0.0.0) port(514));
};
#
log {
      source(dhcp);
      destination(acct_radius);
};
#
# destinations
###########################################################################
# Ici on modifie les enregistrements effectués par l'accounting
# afin de rajouter l'adresse IP au client delivré par le serveur DHCP.
# Le protocole EAP ne permettant pas de faire passer l'adresse IP du client dans la trame.
# De ce fait il faut modifier l'enregistrement effectué par l'accounting,
# récupérer la ligne de la personne connectée depuis moins d'une minute
# avec une adresse MAC identique dans le log du serveur DHCP et celle
# enregistrée dans la base de données accounting. Il faut aussi que le champ
# devant contenir l'adresse IP du client soit vide (FramedIPAdress). Le
# $MSG est de la forme :
# dhcpd: DHCPACK on 147.173.240.253 to 00:30:13:c5:96:6d (portable-cric) via vlan240
# Le champ CallingStationId est de la forme 00-30-13-C5-96-6D
# MySQL n'est pas sensible à la casse dans les comparaisons de chaine par =.
############################################################################
destination acct_radius { pipe("/var/log/mysql.pipe" \
template("UPDATE radacct SET FramedIPAddress = SUBSTRING_INDEX(SUBSTRING_INDEX('$MSG','on ',-1),' to',1) WHERE TIMESTAMPDIFF(SECOND,AcctStartTime,CONCAT('$YEAR-$MONTH-$DAY',' ','$HOUR:$MIN:$SEC')) <= 180 AND \
REPLACE(REPLACE(CallingStationId,'-',''),':','') = REPLACE(SUBSTRING(SUBSTRING_INDEX('$MSG','to ',-1),1,17),':','') \
AND FramedIPAddress = \"\" ;\n") template-escape(yes));
};

