Encodage en UTF-8 : Il reste encore beaucoup de boulot.

This commit is contained in:
Vincent Le Gallic 2014-04-18 20:21:56 +02:00
parent fc9ac609fc
commit 5fb0ee8bd5
16 changed files with 138 additions and 138 deletions

View file

@ -23,21 +23,21 @@ set -e
case "$1" in case "$1" in
start) start)
echo -n "Démarrage de $NAME" echo -n "Démarrage de $NAME"
/sbin/start-stop-daemon --start --quiet --pidfile $PIDF --exec $BIN $ARGS /sbin/start-stop-daemon --start --quiet --pidfile $PIDF --exec $BIN $ARGS
echo "." echo "."
;; ;;
stop) stop)
echo -n "Arrêt de $NAME" echo -n "Arrêt de $NAME"
/sbin/start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile $PIDF /sbin/start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile $PIDF
echo "." echo "."
;; ;;
restart) restart)
echo -n "Redémarrage (arrêt) de $NAME" echo -n "Redémarrage (arrêt) de $NAME"
/sbin/start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile $PIDF /sbin/start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile $PIDF
/bin/sleep 1 /bin/sleep 1
echo -n "Redémarrage (démarrage) de $NAME" echo -n "Redémarrage (démarrage) de $NAME"
/sbin/start-stop-daemon --start --quiet --pidfile $PIDF --exec $BIN $ARGS /sbin/start-stop-daemon --start --quiet --pidfile $PIDF --exec $BIN $ARGS
echo "." echo "."
;; ;;

View file

@ -1,22 +1,22 @@
-- Fichier permttant de reconstituer la base de données de filtrage des logs -- Fichier permttant de reconstituer la base de données de filtrage des logs
-- de net-acct et du firewall -- de net-acct et du firewall
-- Pour regénérer la base : -- Pour regénérer la base :
-- Dropper la bose en tant qu'utilisateur postgres : dropdb filtrage -- Dropper la bose en tant qu'utilisateur postgres : dropdb filtrage
-- Créer la base avec l'utilisateur crans (par exemple) : -- Créer la base avec l'utilisateur crans (par exemple) :
-- createdb -O crans filtrage -- createdb -O crans filtrage
-- exécuter en tant qu'utilisateur : -- exécuter en tant qu'utilisateur :
-- psql filtrage -U crans < filtrage.sql -- psql filtrage -U crans < filtrage.sql
BEGIN; BEGIN;
-- Création de la table de protocole de type udp .. : index(1,16,17) | nom (,tcp,udp) -- Création de la table de protocole de type udp .. : index(1,16,17) | nom (,tcp,udp)
CREATE TABLE protocole ( CREATE TABLE protocole (
id integer NOT NULL, id integer NOT NULL,
nom text NOT NULL, nom text NOT NULL,
CONSTRAINT id_protocole PRIMARY KEY (id)); CONSTRAINT id_protocole PRIMARY KEY (id));
-- Création de la table de protocole p2p : (1,2,3,...)|(eMule,SoulSeak, ...) -- Création de la table de protocole p2p : (1,2,3,...)|(eMule,SoulSeak, ...)
CREATE TABLE protocole_p2p ( CREATE TABLE protocole_p2p (
id_p2p serial NOT NULL, id_p2p serial NOT NULL,
nom text NOT NULL, nom text NOT NULL,
@ -103,19 +103,19 @@ CREATE TABLE flood (
date timestamp NOT NULL, date timestamp NOT NULL,
ip_crans inet NOT NULL); ip_crans inet NOT NULL);
-- Table des infectes -- Table des seedeurs
CREATE TABLE avertis_p2p ( CREATE TABLE avertis_p2p (
date timestamp NOT NULL, date timestamp NOT NULL,
ip_crans inet NOT NULL, ip_crans inet NOT NULL,
protocole text NOT NULL); protocole text NOT NULL);
-- Table des sanctionnés pour upload : -- Table des sanctionnés pour upload :
CREATE TABLE sanctions ( CREATE TABLE sanctions (
date timestamp NOT NULL, date timestamp NOT NULL,
ip_crans inet NOT NULL, ip_crans inet NOT NULL,
upload bigint NOT NULL); upload bigint NOT NULL);
-- Table des exemptés : -- Table des exemptés :
CREATE TABLE exemptes ( CREATE TABLE exemptes (
ip_crans inet NOT NULL, ip_crans inet NOT NULL,
ip_dest inet NOT NULL); ip_dest inet NOT NULL);
@ -180,7 +180,7 @@ CREATE TABLE flood (
INSERT INTO protocole_p2p (nom) VALUES ('GNUtella'); INSERT INTO protocole_p2p (nom) VALUES ('GNUtella');
-- Création des index -- Création des index
CREATE INDEX date_virus_idx ON virus (date); CREATE INDEX date_virus_idx ON virus (date);
CREATE INDEX ip_src_virux_idx ON virus (ip_src); CREATE INDEX ip_src_virux_idx ON virus (ip_src);
CREATE INDEX id_virus_idx ON virus (id); CREATE INDEX id_virus_idx ON virus (id);

View file

@ -6,21 +6,21 @@ exit 0
case "$1" in case "$1" in
start) start)
echo -n "Démarrage du script de parsage des logs du netacct" echo -n "Démarrage du script de parsage des logs du netacct"
start-stop-daemon --start --quiet --background --make-pidfile --pidfile /var/run/filtrage_netacct.pid --exec /usr/scripts/surveillance/filtrage_netacct.py start-stop-daemon --start --quiet --background --make-pidfile --pidfile /var/run/filtrage_netacct.pid --exec /usr/scripts/surveillance/filtrage_netacct.py
echo "." echo "."
;; ;;
stop) stop)
echo -n "Arrêt du parsage des logs du netacct" echo -n "Arrêt du parsage des logs du netacct"
start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile /var/run/filtrage_netacct.pid start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile /var/run/filtrage_netacct.pid
echo "." echo "."
;; ;;
restart) restart)
echo -n "Redémarrage du parsage des logs du netacct" echo -n "Redémarrage du parsage des logs du netacct"
start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile /var/run/filtrage_netacct.pid start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile /var/run/filtrage_netacct.pid
sleep 1 sleep 1
echo -n "Démarrage du script de parsage des logs du netacct" echo -n "Démarrage du script de parsage des logs du netacct"
start-stop-daemon --start --quiet --background --make-pidfile --pidfile /var/run/filtrage_netacct.pid --exec /usr/scripts/surveillance/filtrage_netacct.py start-stop-daemon --start --quiet --background --make-pidfile --pidfile /var/run/filtrage_netacct.pid --exec /usr/scripts/surveillance/filtrage_netacct.py
echo "." echo "."
;; ;;

View file

@ -1,12 +1,12 @@
----------------------------------------------------------------- -----------------------------------------------------------------
-- Maintenance de la base netacct-ng sur pgsql, lancé par cron -- Maintenance de la base netacct-ng sur pgsql, lancé par cron
----------------------------------------------------------------- -----------------------------------------------------------------
-- effacement des vieux enregistrements -- effacement des vieux enregistrements
DELETE FROM upload where date< timestamp 'now' - interval '2 days'; DELETE FROM upload where date< timestamp 'now' - interval '2 days';
-- suppression complète des entrées -- suppression complète des entrées
VACUUM; VACUUM;
-- réindexation des tables -- réindexation des tables
REINDEX TABLE upload; REINDEX TABLE upload;

View file

@ -1,20 +1,20 @@
----------------------------------------------------------------- -----------------------------------------------------------------
-- Maintenance de la base pgsql sur thot, lancé par cron -- Maintenance de la base pgsql sur thot, lancé par cron
----------------------------------------------------------------- -----------------------------------------------------------------
-- effacement des vieux enregistrements -- effacement des vieux enregistrements
DELETE FROM upload where date< timestamp 'now' - interval '5 days'; DELETE FROM upload where date< timestamp 'now' - interval '5 days';
-- la même pour upload6 -- la même pour upload6
DELETE FROM upload6 WHERE date< timestamp 'now' - interval '5 days'; DELETE FROM upload6 WHERE date< timestamp 'now' - interval '5 days';
-- On ne blackliste plus pour virus, on droppe seulement -- On ne blackliste plus pour virus, on droppe seulement
-- DELETE FROM virus where date< timestamp 'now' - interval '2 days'; -- DELETE FROM virus where date< timestamp 'now' - interval '2 days';
-- Idem pour flood -- Idem pour flood
-- DELETE FROM flood where date< timestamp 'now' - interval '2 days'; -- DELETE FROM flood where date< timestamp 'now' - interval '2 days';
-- suppression complète des entrées -- suppression complète des entrées
VACUUM; VACUUM;
-- réindexation des tables -- réindexation des tables
REINDEX TABLE upload; REINDEX TABLE upload;
REINDEX TABLE upload6; REINDEX TABLE upload6;
-- REINDEX TABLE virus; -- REINDEX TABLE virus;

View file

@ -2,7 +2,7 @@
# #
# $Id: monit-ovh,v 1.1 2007/05/26 01:17:37 dimino Exp $ # $Id: monit-ovh,v 1.1 2007/05/26 01:17:37 dimino Exp $
# #
# Récupère la sortie du monit status sur ovh # Récupère la sortie du monit status sur ovh
PATH=/sbin:/usr/sbin:/bin:/usr/bin PATH=/sbin:/usr/sbin:/bin:/usr/bin

View file

@ -1,7 +1,7 @@
#! /usr/bin/env python #! /usr/bin/env python
# -*- coding: iso-8859-15 -*- # -*- coding: utf-8 -*-
# Pour envoyer effectivement des mails, il faut désactiver le debug # Pour envoyer effectivement des mails, il faut désactiver le debug
debug = 1 debug = 1
import os,sys import os,sys
@ -19,9 +19,9 @@ for i in range(5):
sys.exit(1) sys.exit(1)
# On définit ici une liste d'adresse mail qui ne sont pas à prévenir # On définit ici une liste d'adresse mail qui ne sont pas à prévenir
# à utiliser par exemple si on a commencé à prévenir des adhérents mais que # à utiliser par exemple si on a commencé à prévenir des adhérents mais que
# tous ne l'ont pas été # tous ne l'ont pas été
try : try :
exempts = [] exempts = []
file = open('/home/salles/mails_envoyes',"r") file = open('/home/salles/mails_envoyes',"r")
@ -33,25 +33,25 @@ try :
except : except :
print "Aucune exemption d'adresses mails ne sera prise en compte" print "Aucune exemption d'adresses mails ne sera prise en compte"
# On définit ici la liste des mails perdus et qui sont inscrits dans les logs # On définit ici la liste des mails perdus et qui sont inscrits dans les logs
# Dans le cas du 11/09/2007, les mails perdus étaient identifiables avec # Dans le cas du 11/09/2007, les mails perdus étaient identifiables avec
# le message "too many hops" # le message "too many hops"
# On a donc créé le fichier mails_perdus avec la commande suivante : # On a donc créé le fichier mails_perdus avec la commande suivante :
# cat /var/log/mail.log | grep "too many hops" | grep '(!) FWD via SMTP' | awk -F ' ' '{print $1 " " $2 " " $3 " " $11 " " $12 " " $13}' | tr \[:upper:\] \[:lower:\] | sed 's/,$//g' > mails_perdus # cat /var/log/mail.log | grep "too many hops" | grep '(!) FWD via SMTP' | awk -F ' ' '{print $1 " " $2 " " $3 " " $11 " " $12 " " $13}' | tr \[:upper:\] \[:lower:\] | sed 's/,$//g' > mails_perdus
# Le fichier se présente alors sous la forme : # Le fichier se présente alors sous la forme :
# Mois Jour Heure <emetteur@adresse.mail> -> <recepteur@adresse.mail.2> # Mois Jour Heure <emetteur@adresse.mail> -> <recepteur@adresse.mail.2>
file = open('/home/salles/mails_perdus',"r") file = open('/home/salles/mails_perdus',"r")
# On crée les 2 dictionnaire qui vont contenir les 2 types d'avertissemnts à # On crée les 2 dictionnaire qui vont contenir les 2 types d'avertissemnts à
# communiquer : # communiquer :
# - les messages envoyés par des adhérents au serveur mais qui ne sont pas # - les messages envoyés par des adhérents au serveur mais qui ne sont pas
#partis vers leur destinataire #partis vers leur destinataire
unsend = {} unsend = {}
# - les messages reçus par le serveur mais non distribués aux adhérents # - les messages reçus par le serveur mais non distribués aux adhérents
unreceived = {} unreceived = {}
def is_crans(mail) : def is_crans(mail) :
""" Détermine si l'adresse mail concerne un adhérent""" """ Détermine si l'adresse mail concerne un adhérent"""
# Je remarque que les adresses de clubs et de mailings-listes ne sont # Je remarque que les adresses de clubs et de mailings-listes ne sont
# pas pris en compte @lists.crans. # pas pris en compte @lists.crans.
if mail.find('@crans.') > 0 : if mail.find('@crans.') > 0 :
@ -61,16 +61,16 @@ def is_crans(mail) :
def append(dict, chain, value, date) : def append(dict, chain, value, date) :
""" Définit une méthode pour ajouter un mail perdu dans l'un des """ Définit une méthode pour ajouter un mail perdu dans l'un des
dictionnaires. dictionnaires.
Les dictionnaires ont pour clés l'adresse mail d'un adhérent aux quelles Les dictionnaires ont pour clés l'adresse mail d'un adhérent aux quelles
sont associés une liste des mails perdus sur la forme ['adresse_mail2', 'date'] sont associés une liste des mails perdus sur la forme ['adresse_mail2', 'date']
""" """
if not dict.has_key(chain) : if not dict.has_key(chain) :
# Si la clé n'existe pas : initialisation # Si la clé n'existe pas : initialisation
dict[chain] = [ [value, date] ] dict[chain] = [ [value, date] ]
else : else :
# Sinon on ajoute le nouveau mail perdu à la liste existante # Sinon on ajoute le nouveau mail perdu à la liste existante
dict[chain].append([value, date]) dict[chain].append([value, date])
# On traite maintenant la liste des mails perdus # On traite maintenant la liste des mails perdus
@ -78,9 +78,9 @@ line = file.readline()
# Pour chaque mail perdu # Pour chaque mail perdu
while line: while line:
datas = line.split() datas = line.split()
# Il pourrait y avoir plusieurs expéditeurs pour le même mail # Il pourrait y avoir plusieurs expéditeurs pour le même mail
senders = datas[3].split(",") senders = datas[3].split(",")
# Il peut y avoir plusieurs destinataires pour un mail (ça c'est sur) # Il peut y avoir plusieurs destinataires pour un mail (ça c'est sur)
receivers = datas[5].split(",") receivers = datas[5].split(",")
# On tente d'enlever les adresses nulles de ces 2 listes # On tente d'enlever les adresses nulles de ces 2 listes
try : try :
@ -95,7 +95,7 @@ while line:
# On reformate le champ date en inversant Jour et Mois # On reformate le champ date en inversant Jour et Mois
date = u"%s %s %s" % (datas[1], datas[0], datas[2]) date = u"%s %s %s" % (datas[1], datas[0], datas[2])
# Pour chaque couple de mail perdu associé à une source et un destinataire # Pour chaque couple de mail perdu associé à une source et un destinataire
for sender in senders : for sender in senders :
for receiver in receivers : for receiver in receivers :
# L'expediteur et le receveur sont du crans ? # L'expediteur et le receveur sont du crans ?
@ -109,14 +109,14 @@ while line:
if is_crans(receiver) and not is_crans(sender) : if is_crans(receiver) and not is_crans(sender) :
append(unreceived, receiver, sender, date) append(unreceived, receiver, sender, date)
# On passe à la ligne suivante # On passe à la ligne suivante
line = file.readline() line = file.readline()
file.close() file.close()
# On traite le formatage des mails pour indiquer aux adhérents les # On traite le formatage des mails pour indiquer aux adhérents les
# mails qui ne leur ont pas été délivrés # mails qui ne leur ont pas été délivrés
for adh in unreceived.keys() : for adh in unreceived.keys() :
text = u"""From: CRANS (Nounous) <nounous@crans.org> text = u"""From: CRANS (Nounous) <nounous@crans.org>
To: %s To: %s
@ -125,30 +125,30 @@ Content-Type: text/plain; charset="iso-8859-15"
Bonjour, Bonjour,
Nous t'informons que suite à une erreur sur le serveur de mail Nous t'informons que suite à une erreur sur le serveur de mail
de l'association, il est fort probable que nous ayons égaré des de l'association, il est fort probable que nous ayons égaré des
messages te concernant dans la période allant du lundi 10/09/2007 messages te concernant dans la période allant du lundi 10/09/2007
23h00 à ce mardi 11/09/2007 9h50. 23h00 à ce mardi 11/09/2007 9h50.
Tu trouveras ci-dessous le détail des messages que tu n'as pas pu Tu trouveras ci-dessous le détail des messages que tu n'as pas pu
recevoir et/ou envoyer.\n""" % adh recevoir et/ou envoyer.\n""" % adh
for unrecv in unreceived[adh] : for unrecv in unreceived[adh] :
text += u""" - mail non reçu : envoyé par %s avant le %s\n""" % (unrecv[0], unrecv[1]) text += u""" - mail non reçu : envoyé par %s avant le %s\n""" % (unrecv[0], unrecv[1])
text += u"""Nous te conseillons de contacter les personnes qui figurent dans text += u"""Nous te conseillons de contacter les personnes qui figurent dans
cette liste si tu souhaites recevoir leur message, car elles n'ont cette liste si tu souhaites recevoir leur message, car elles n'ont
pas été informé de cette erreur de livraison. pas été informé de cette erreur de livraison.
""" """
# Au passage, on vérifie s'il n'y a pas des mails que l'adhérents auraient # Au passage, on vérifie s'il n'y a pas des mails que l'adhérents auraient
# voulu envoyer qui se seraient aussi perdus # voulu envoyer qui se seraient aussi perdus
if unsend.has_key(adh) : if unsend.has_key(adh) :
text += u""" text += u"""
""" """
for unsnd in unsend[adh] : for unsnd in unsend[adh] :
text += u""" - mail non envoyé : adressé à %s le %s\n""" % (unsnd[0], unsnd[1]) text += u""" - mail non envoyé : adressé à %s le %s\n""" % (unsnd[0], unsnd[1])
text += u"""Pour les mails que tu as pu essayé d'envoyer, et si ce n'est pas text += u"""Pour les mails que tu as pu essayé d'envoyer, et si ce n'est pas
déjà le cas, il te faut les réexpédier si tu souhaites que tes déjà le cas, il te faut les réexpédier si tu souhaites que tes
destinataires les reçoivent. destinataires les reçoivent.
""" """
text += u""" text += u"""
@ -167,8 +167,8 @@ Les nounous du CRANS"""
pass pass
# Le message est légèrement différent dans le cas où l'adhérent n'a perdu # Le message est légèrement différent dans le cas où l'adhérent n'a perdu
# des mails qu'à l'envoi. # des mails qu'à l'envoi.
for adh in unsend.keys() : for adh in unsend.keys() :
if not unreceived.has_key(adh) : if not unreceived.has_key(adh) :
text = u"""From: CRANS (Nounous) <nounous@crans.org> text = u"""From: CRANS (Nounous) <nounous@crans.org>
@ -178,20 +178,20 @@ Content-Type: text/plain; charset="iso-8859-15"
Bonjour, Bonjour,
Nous t'informons que suite à une erreur sur le serveur de mail Nous t'informons que suite à une erreur sur le serveur de mail
de l'association, il est fort probable que nous n'ayons pas pu de l'association, il est fort probable que nous n'ayons pas pu
transmettre certains de tes messages dans la période allant du transmettre certains de tes messages dans la période allant du
lundi 10/09/2007 23h00 à ce mardi 11/09/2007 9h50. lundi 10/09/2007 23h00 à ce mardi 11/09/2007 9h50.
Tu trouveras ci-dessous le détail des messages que nous n'avons Tu trouveras ci-dessous le détail des messages que nous n'avons
pas pu envoyer.\n""" % adh pas pu envoyer.\n""" % adh
for unsnd in unsend[adh] : for unsnd in unsend[adh] :
text += u""" - mail non envoyé : adressé à %s le %s\n""" % (unsnd[0], unsnd[1]) text += u""" - mail non envoyé : adressé à %s le %s\n""" % (unsnd[0], unsnd[1])
text += u"""Pour les mails que tu as pu essayé d'envoyer, et si ce n'est text += u"""Pour les mails que tu as pu essayé d'envoyer, et si ce n'est
pas déjà le cas, il te faut les réexpédier si tu souhaites que tes pas déjà le cas, il te faut les réexpédier si tu souhaites que tes
destinataires les reçoivent. destinataires les reçoivent.
""" """
text += u""" text += u"""
@ -207,4 +207,4 @@ Les nounous du CRANS"""
except : except :
pass pass

View file

@ -1,9 +1,9 @@
#!/bin/sh #!/bin/sh
# À exécuter en tant que l'utilisateur dont on veut déplacer les mails # À exécuter en tant que l'utilisateur dont on veut déplacer les mails
if [[ $USER = "root" ]]; then if [[ $USER = "root" ]]; then
echo "Ce script doit être exécuté en tant que l'utilisateur dont on veut déplacer les mails !" echo "Ce script doit être exécuté en tant que l'utilisateur dont on veut déplacer les mails !"
exit 1 exit 1
fi fi
@ -14,9 +14,9 @@ set -e
echo -n "Sauvegarde en cours vers $BACKUP... " echo -n "Sauvegarde en cours vers $BACKUP... "
test ! -a $BACKUP test ! -a $BACKUP
cp -a $MAIL $BACKUP cp -a $MAIL $BACKUP
# On évite l'* qui risque de donner trop d'arguments # On évite l'* qui risque de donner trop d'arguments
# On ne supprime pas non plus de répertoire car on peut ne pas avoir les # On ne supprime pas non plus de répertoire car on peut ne pas avoir les
# droits pour le recréer avec les mêmes permissions # droits pour le recréer avec les mêmes permissions
find $MAIL/{cur,tmp,new} -type f -print0 | xargs -0 rm -f || true find $MAIL/{cur,tmp,new} -type f -print0 | xargs -0 rm -f || true
find $BACKUP -type f | xargs chmod 600 find $BACKUP -type f | xargs chmod 600
find $BACKUP -type d | xargs chmod 700 find $BACKUP -type d | xargs chmod 700

View file

@ -11,7 +11,7 @@ import annuaires_pg
from iptools import AddrInNet from iptools import AddrInNet
def chap_ok(password, challenge, clear_pass) : def chap_ok(password, challenge, clear_pass) :
""" Test l'authentification chap fournie """ Test l'authentification chap fournie
password et chalenge doivent être données password et chalenge doivent être données
en hexa (avec ou sans le 0x devant) en hexa (avec ou sans le 0x devant)
retourne True si l'authentification est OK retourne True si l'authentification est OK
@ -31,39 +31,39 @@ def paiement_ok(adh):
paid = max(adh.paiement() + [0]) paid = max(adh.paiement() + [0])
if periode_transitoire: if periode_transitoire:
# Si periode transitoire, on accepte les personnes n'ayant pas # Si periode transitoire, on accepte les personnes n'ayant pas
# réadhéré # réadhéré
ann_scol -= 1 ann_scol -= 1
return ann_scol <= paid return ann_scol <= paid
def do_auth(mac, prise): def do_auth(mac, prise):
"""Effectue l'authentification. Renvoie (success, msg, """Effectue l'authentification. Renvoie (success, msg,
vlan). success est 0 si l'authentification est réussie, msg est vlan). success est 0 si l'authentification est réussie, msg est
pour les logs et vlan est le vlan non taggé à utiliser pour la pour les logs et vlan est le vlan non taggé à utiliser pour la
prise.""" prise."""
global ann_scol global ann_scol
# Test chap (comme cela on est sur que c'est bien un switch qui demande) # Test chap (comme cela on est sur que c'est bien un switch qui demande)
if not chap_ok(os.getenv('CHAP_PASSWORD'), os.getenv('CHAP_CHALLENGE'), mac): if not chap_ok(os.getenv('CHAP_PASSWORD'), os.getenv('CHAP_CHALLENGE'), mac):
return (-1, "Échec test CHAP", "") return (-1, "Échec test CHAP", "")
# Mac dans la base LDAP # Mac dans la base LDAP
conn = crans_ldap(readonly=True) conn = crans_ldap(readonly=True)
m = conn.search('mac=%s' % mac)['machine'] m = conn.search('mac=%s' % mac)['machine']
if len(m) == 0: if len(m) == 0:
# Est-ce un ancien client de l'offre Crous ? # Est-ce un ancien client de l'offre Crous ?
# on le met sur le vlan install-party où on aura activé un forwarding # on le met sur le vlan install-party où on aura activé un forwarding
# (uniquement en attendant qu'il soit inscrit proprement) # (uniquement en attendant qu'il soit inscrit proprement)
for chbre in annuaires_pg.reverse(prise[0], prise[1:]): for chbre in annuaires_pg.reverse(prise[0], prise[1:]):
if not annuaires_pg.is_crans(prise[0], chbre): if not annuaires_pg.is_crans(prise[0], chbre):
return (0, "TMP: ancien client CROUS", 'event') return (0, "TMP: ancien client CROUS", 'event')
return (0, "Mac inconnue", "accueil") return (0, "Mac inconnue", "accueil")
elif len(m) > 1: elif len(m) > 1:
return (-1, "Pb recherche mac (nb résultat %d!=1)" % len(m), "") return (-1, "Pb recherche mac (nb résultat %d!=1)" % len(m), "")
# N'appartient pas au Crans et n'a pas de prise attribuée # N'appartient pas au Crans et n'a pas de prise attribuée
# donc sur uplink ou switch non filtré # donc sur uplink ou switch non filtré
# But : éviter le spoof d'une mac d'une machine clef # But : éviter le spoof d'une mac d'une machine clef
proprio = m[0].proprietaire() proprio = m[0].proprietaire()
if proprio.__class__ == AssociationCrans: if proprio.__class__ == AssociationCrans:
return (-1, "Machine du crans", "") return (-1, "Machine du crans", "")
@ -72,7 +72,7 @@ def do_auth(mac, prise):
if 'bloq' in m[0].blacklist_actif(): if 'bloq' in m[0].blacklist_actif():
return (-1, "Bloquage total des services pour cette machine", "") return (-1, "Bloquage total des services pour cette machine", "")
# les gens qui doivent être isolés # les gens qui doivent être isolés
if ('virus' in m[0].blacklist_actif() or 'ipv6_ra' in m[0].blacklist_actif() if ('virus' in m[0].blacklist_actif() or 'ipv6_ra' in m[0].blacklist_actif()
or 'autodisc_virus' in m[0].blacklist_actif()): or 'autodisc_virus' in m[0].blacklist_actif()):
return (0, "Bad boy", "isolement") return (0, "Bad boy", "isolement")
@ -82,10 +82,10 @@ def do_auth(mac, prise):
# Paiement proprio ? # Paiement proprio ?
if not paiement_ok(proprio): if not paiement_ok(proprio):
return (0, "N'a pas payé", "accueil") return (0, "N'a pas payé", "accueil")
# Si l'adhérent n'est pas membre actif, il doit se brancher depuis la prise # Si l'adhérent n'est pas membre actif, il doit se brancher depuis la prise
# d'un autre adhérent à jour de cotisation # d'un autre adhérent à jour de cotisation
if not proprio.droits(): if not proprio.droits():
try: try:
chbre = prise[0] + annuaires_pg.reverse(prise[0], prise[1:])[0] chbre = prise[0] + annuaires_pg.reverse(prise[0], prise[1:])[0]
@ -96,15 +96,15 @@ def do_auth(mac, prise):
if paiement_ok(hebergeur): if paiement_ok(hebergeur):
break break
else: else:
return (0, "Hébergeur non à jour", "accueil") return (0, "Hébergeur non à jour", "accueil")
# Cas des personnels logés dans les appartements de l'ENS # Cas des personnels logés dans les appartements de l'ENS
if (proprio.etudes(0) == 'Personnel ENS' or if (proprio.etudes(0) == 'Personnel ENS' or
('Nounou' in proprio.droits() and AddrInNet(m[0].ip(),'10.2.9.0/24'))): ('Nounou' in proprio.droits() and AddrInNet(m[0].ip(),'10.2.9.0/24'))):
return (0, "Personnel ENS", "appts") return (0, "Personnel ENS", "appts")
# C'est bon # C'est bon
return (0, "Accès adhérent OK", "adherent") return (0, "Accès adhérent OK", "adherent")
if __name__ == '__main__' : if __name__ == '__main__' :
mac = os.getenv('USER_NAME', '').replace('"', '') mac = os.getenv('USER_NAME', '').replace('"', '')
@ -112,7 +112,7 @@ if __name__ == '__main__' :
prise = (len(switch) == 6 and (switch[3] + switch[5]) or (switch + "-")) prise = (len(switch) == 6 and (switch[3] + switch[5]) or (switch + "-"))
prise += "%02d" % int(os.getenv("NAS_PORT", 0)) prise += "%02d" % int(os.getenv("NAS_PORT", 0))
# On vérifie si la mac est autorisée # On vérifie si la mac est autorisée
(r, msg, vlan) = do_auth(mac, prise) (r, msg, vlan) = do_auth(mac, prise)
# On logue la prise sur laquelle a lieu la tentative # On logue la prise sur laquelle a lieu la tentative
@ -120,13 +120,13 @@ if __name__ == '__main__' :
syslog("%s -> %s [%s]" % (prise, mac, msg)) syslog("%s -> %s [%s]" % (prise, mac, msg))
if vlan: if vlan:
# Cela indique au switch comment configurer le vlan par défaut # Cela indique au switch comment configurer le vlan par défaut
# pour cette prise # pour cette prise
print ", ".join(["Tunnel-Type = VLAN", print ", ".join(["Tunnel-Type = VLAN",
"Tunnel-Medium-Type = IEEE-802", "Tunnel-Medium-Type = IEEE-802",
"Tunnel-Private-Group-Id = \"%d\"" % vlans[vlan]]) "Tunnel-Private-Group-Id = \"%d\"" % vlans[vlan]])
# On tente de logguer la dernière mac sur une prise donnée # On tente de logguer la dernière mac sur une prise donnée
try: try:
f = open('/usr/scripts/var/last_macs/' + prise,'w') f = open('/usr/scripts/var/last_macs/' + prise,'w')
f.write(mac) f.write(mac)

View file

@ -1,4 +1,4 @@
# -*- coding: iso-8859-1 -*- # -*- coding: utf-8 -*-
import sys import sys
sys.path.append('/usr/scripts/secours') sys.path.append('/usr/scripts/secours')
@ -6,7 +6,7 @@ import secours
def Cellule(texte, couleur, f) : def Cellule(texte, couleur, f) :
""" """
Retourne le code HTML d'une cellule formattée aver le formatter f Retourne le code HTML d'une cellule formattée aver le formatter f
""" """
code = f.table(1) code = f.table(1)
code += f.table_row(1) code += f.table_row(1)
@ -25,4 +25,4 @@ def execute(macro, text) :
else : else :
return Cellule('Nous sommes actuellement en connexion de secours.','red',macro.formatter) return Cellule('Nous sommes actuellement en connexion de secours.','red',macro.formatter)
except : except :
return Cellule('Impossible de déterminer l\'état de la connexion.','yellow',macro.formatter) return Cellule('Impossible de déterminer l\'état de la connexion.','yellow',macro.formatter)

View file

@ -1,4 +1,4 @@
# -*- coding: iso-8859-1 -*- # -*- coding: utf-8 -*-
""" """
EventCalendar.py Version 0.99a July 22, 2009 EventCalendar.py Version 0.99a July 22, 2009
@ -462,7 +462,7 @@ def setglobalvalues(macro):
Globs.pagepath = formatter.page.getPagePath() Globs.pagepath = formatter.page.getPagePath()
# european / US differences # european / US differences
months = (u'Janvier',u'Février',u'Mars',u'Avril',u'Mai',u'Juin',u'Juillet',u'Août',u'Septembre',u'Octobre',u'Novembre',u'Décembre') months = (u'Janvier',u'Février',u'Mars',u'Avril',u'Mai',u'Juin',u'Juillet',u'Août',u'Septembre',u'Octobre',u'Novembre',u'Décembre')
# Set things up for Monday or Sunday as the first day of the week # Set things up for Monday or Sunday as the first day of the week
if calendar.firstweekday() == calendar.MONDAY: if calendar.firstweekday() == calendar.MONDAY:
@ -612,7 +612,7 @@ def showmenubar():
mnu_curmonthcal = u'<a href="%s?calaction=%s&amp;caldate=%d%02d%02d%s" title="Aujourd\'hui">[Aujourd\'hui]</a>' % (page_url, cal_action, year, month, day, getquerystring(['numcal'])) mnu_curmonthcal = u'<a href="%s?calaction=%s&amp;caldate=%d%02d%02d%s" title="Aujourd\'hui">[Aujourd\'hui]</a>' % (page_url, cal_action, year, month, day, getquerystring(['numcal']))
# List View # List View
mnu_listview = u'<a href="%s?calaction=list%s" title="Liste de tous les évènements">[Liste]</a>' % (page_url, getquerystring(['caldate', 'numcal'])) mnu_listview = u'<a href="%s?calaction=list%s" title="Liste de tous les évènements">[Liste]</a>' % (page_url, getquerystring(['caldate', 'numcal']))
# Monthly View # Monthly View
mnu_monthview = u'<a href="%s?calaction=monthly%s" title="Vue du mois">[Mois]</a>' % (page_url, getquerystring(['caldate', 'numcal']) ) mnu_monthview = u'<a href="%s?calaction=monthly%s" title="Vue du mois">[Mois]</a>' % (page_url, getquerystring(['caldate', 'numcal']) )
@ -621,7 +621,7 @@ def showmenubar():
mnu_simpleview = u'<a href="%s?calaction=simple%s" title="Simple calendrier">[Simple]</a>' % (page_url, getquerystring(['caldate', 'numcal']) ) mnu_simpleview = u'<a href="%s?calaction=simple%s" title="Simple calendrier">[Simple]</a>' % (page_url, getquerystring(['caldate', 'numcal']) )
# Upcoming Event List # Upcoming Event List
mnu_upcomingview = u'<a href="%s?calaction=upcoming%s" title="Évènements à venir">[À venir]</a>' % (page_url, getquerystring(['caldate', 'numcal']) ) mnu_upcomingview = u'<a href="%s?calaction=upcoming%s" title="Évènements à venir">[À venir]</a>' % (page_url, getquerystring(['caldate', 'numcal']) )
# Daily View # Daily View
mnu_dayview = u'<a href="%s?calaction=daily%s" title="Vue du jour">[Jour]</a>' % (page_url, getquerystring(['caldate', 'numcal']) ) mnu_dayview = u'<a href="%s?calaction=daily%s" title="Vue du jour">[Jour]</a>' % (page_url, getquerystring(['caldate', 'numcal']) )
@ -795,9 +795,9 @@ def cal_listhead():
html = [ html = [
u' <tr>', u' <tr>',
u' <td class="list_head">Titre</td>', u' <td class="list_head">Titre</td>',
u' <td class="list_head">Début</td>', u' <td class="list_head">Début</td>',
u' <td class="list_head">Fin</td>', u' <td class="list_head">Fin</td>',
u' <td class="list_head">Fréquence</td>', u' <td class="list_head">Fréquence</td>',
u' <td class="list_head">Label</td>', u' <td class="list_head">Label</td>',
u' <td class="list_head">Description</td>', u' <td class="list_head">Description</td>',
u' <td class="list_head">Page source</td>', u' <td class="list_head">Page source</td>',
@ -914,7 +914,7 @@ def showupcomingeventlist():
html_list_table = [ html_list_table = [
u'\r\n<div id="eventlist">', u'\r\n<div id="eventlist">',
u'<table class="eventlist">', u'<table class="eventlist">',
u'<tr><td colspan="7" class="list_entry" style="border-width: 0px;"><b>Évènement à venir: %s ~ %s</b><p><br><p></td></tr>' % (datefrom, dateto), u'<tr><td colspan="7" class="list_entry" style="border-width: 0px;"><b>Évènement à venir: %s ~ %s</b><p><br><p></td></tr>' % (datefrom, dateto),
u'%s' % html_list_header, u'%s' % html_list_header,
u'%s' % html_event_rows, u'%s' % html_event_rows,
u'</table>', u'</table>',

View file

@ -1,7 +1,7 @@
#! /usr/bin/env python #! /usr/bin/env python
# -*- encoding: iso-8859-1 -*- # -*- encoding: utf-8 -*-
# Génération d'un fichier XML indiquant le status des bornes # Génération d'un fichier XML indiquant le status des bornes
import sys import sys
import os import os
@ -16,18 +16,18 @@ def execute(macro, text):
#os.putenv("http_proxy", "http://proxy.crans.org:3128") #os.putenv("http_proxy", "http://proxy.crans.org:3128")
status=xml.dom.minidom.parseString(urllib2.urlopen("https://wifi.crans.org/status.xml").read()) status=xml.dom.minidom.parseString(urllib2.urlopen("https://wifi.crans.org/status.xml").read())
except: except:
return f.text(u"Impossible d'accéder aux informations des bornes") return f.text(u"Impossible d'accéder aux informations des bornes")
# On récupère l'ensemble des bornes # On récupère l'ensemble des bornes
bornes = status.childNodes[0] bornes = status.childNodes[0]
code = f.text(u"Mise à jour le "+bornes.getAttribute("date")) code = f.text(u"Mise à jour le "+bornes.getAttribute("date"))
code += f.linebreak(0) code += f.linebreak(0)
code += f.table(True, {'tablealign': 'center'}) code += f.table(True, {'tablealign': 'center'})
code += f.table_row(True, {'rowbgcolor': '#FFFFA0'}) code += f.table_row(True, {'rowbgcolor': '#FFFFA0'})
for nom_col in (u"Nom", u"Hotspot", u"État", u"Localisation", u"Clients", for nom_col in (u"Nom", u"Hotspot", u"État", u"Localisation", u"Clients",
u"MAC", u"Canal", u"Uptime", u"°E", u"°N"): u"MAC", u"Canal", u"Uptime", u"°E", u"°N"):
code += f.table_cell(True) code += f.table_cell(True)
code += f.strong(True) code += f.strong(True)
code += f.text(nom_col) code += f.text(nom_col)

View file

@ -1,9 +1,9 @@
# -*- coding: iso-8859-1 -*- # -*- coding: utf-8 -*-
import os, sys, commands, time import os, sys, commands, time
""" """
Permet d'intégrer au wiki les résultats de Monit. Permet d'intégrer au wiki les résultats de Monit.
La macro wiki est : La macro wiki est :
[[MonitStatus(hotes=host,categories=[All|Process|File],services=[All|Off|On])]] [[MonitStatus(hotes=host,categories=[All|Process|File],services=[All|Off|On])]]
@ -27,7 +27,7 @@ def NotRunningHosts() :
def HostStatus (host) : def HostStatus (host) :
""" """
Retourne un dictionnaire représentation de l'état des services de Retourne un dictionnaire représentation de l'état des services de
la machine. la machine.
""" """
@ -46,7 +46,7 @@ def HostStatus (host) :
# ligne vide, on passe au service suivant # ligne vide, on passe au service suivant
s = None s = None
elif not s : elif not s :
# création d'un nouveau service # création d'un nouveau service
s = line.split(' ')[1][1:-1] s = line.split(' ')[1][1:-1]
t = line.split(' ')[0] t = line.split(' ')[0]
# ajout du type s'il n'est pas dedans # ajout du type s'il n'est pas dedans
@ -54,10 +54,10 @@ def HostStatus (host) :
status[t] = {} status[t] = {}
status[t][s] = {} status[t][s] = {}
else : else :
# on ajoute les données # on ajoute les données
status[t][s][line[:34].strip()] = line[34:].strip() status[t][s][line[:34].strip()] = line[34:].strip()
# on supprime les données system # on supprime les données system
try : try :
status.pop('System') status.pop('System')
except : except :
@ -83,7 +83,7 @@ def AllStatusOff () :
for h in status.keys() : for h in status.keys() :
# si c'est un host qui est down, on le laisse tel quel pour éviter qu'il le supprime # si c'est un host qui est down, on le laisse tel quel pour éviter qu'il le supprime
if h in NotRunningHosts() : if h in NotRunningHosts() :
continue continue
@ -111,7 +111,7 @@ def FormatService(Type, Service, Data, f) :
Retourne le code HTML d'un sercice Retourne le code HTML d'un sercice
Type : type de service Type : type de service
Service : Nom du service Service : Nom du service
Data : dictionnaire contenant toutes les données Data[info] Data : dictionnaire contenant toutes les données Data[info]
f : formatter f : formatter
""" """
@ -139,7 +139,7 @@ def FormatType(Type, Data, f) :
""" """
Retourne le code HTML d'une liste de services Retourne le code HTML d'une liste de services
Host : nom de l'hote Host : nom de l'hote
Data : dictionnaire contenant toutes les données Data[service][info] Data : dictionnaire contenant toutes les données Data[service][info]
f : formatter f : formatter
""" """
@ -160,9 +160,9 @@ def FormatType(Type, Data, f) :
def FormatHost (Host, Data, f) : def FormatHost (Host, Data, f) :
""" """
Retourne le code HTML d'un hôte Retourne le code HTML d'un hôte
Host : nom de l'hote Host : nom de l'hote
Data : dictionnaire contenant toutes les données Data[type][service][info] Data : dictionnaire contenant toutes les données Data[type][service][info]
f : formatter f : formatter
""" """
@ -195,7 +195,7 @@ def FormatHost (Host, Data, f) :
def FormatHosts(Data, f) : def FormatHosts(Data, f) :
""" """
Retourne le code HTML de tous les hotes fournis Retourne le code HTML de tous les hotes fournis
Data : dictionnaire contenant toutes les données Data[hote][type][service][info] Data : dictionnaire contenant toutes les données Data[hote][type][service][info]
f : formatter f : formatter
""" """
@ -208,7 +208,7 @@ def FormatHosts(Data, f) :
def Cellule(texte, couleur, f) : def Cellule(texte, couleur, f) :
""" """
Retourne le code HTML d'une cellule formattée aver le formatter f Retourne le code HTML d'une cellule formattée aver le formatter f
""" """
code = f.table(1) code = f.table(1)
code += f.table_row(1) code += f.table_row(1)
@ -238,7 +238,7 @@ def execute(macro, filtre) :
return FormatHosts(status, f) return FormatHosts(status, f)
else : else :
# aucun service off, on affiche OK # aucun service off, on affiche OK
return Cellule(u'Tous les services semblent opérationnels.','lime',f) return Cellule(u'Tous les services semblent opérationnels.','lime',f)
elif filtre == 'all' : elif filtre == 'all' :
# tous les services # tous les services
@ -259,13 +259,13 @@ def execute(macro, filtre) :
s = status[t][service] s = status[t][service]
if not s : if not s :
# service non trouvé # service non trouvé
code = f.table_cell(0) code = f.table_cell(0)
code += f.table_cell(1,{'style':'background-color:yellow'}) code += f.table_cell(1,{'style':'background-color:yellow'})
code += f.text(u'Service introuvable') code += f.text(u'Service introuvable')
return code return code
# création de la chaine de retour # création de la chaine de retour
code = f.table_cell(0) code = f.table_cell(0)
if s['status'].lower() in ['running','accessible'] : if s['status'].lower() in ['running','accessible'] :
code += f.table_cell(1,{'style':'background-color:lime'}) code += f.table_cell(1,{'style':'background-color:lime'})

View file

@ -1,4 +1,4 @@
# -*- encoding: iso-8859-1 -*- # -*- encoding: utf-8 -*-
import os import os
@ -45,7 +45,7 @@ class AccountList:
return html return html
class Account: class Account:
"""Classe représentant la page perso d'une personne""" """Classe représentant la page perso d'une personne"""
def __init__(self, home, login, www, url): def __init__(self, home, login, www, url):
"""Instanciation avec le `login' de la personne""" """Instanciation avec le `login' de la personne"""
@ -83,7 +83,7 @@ class Account:
def logo(self): def logo(self):
"""URL du logo s'il y en a un""" """URL du logo s'il y en a un"""
if self.info("logo"): if self.info("logo"):
# Le logo peut être en absolu ou en relatif # Le logo peut être en absolu ou en relatif
if self.info("logo").startswith(self.chemin()): if self.info("logo").startswith(self.chemin()):
logo = self.info("logo").replace("%s/" % self.chemin(), "") logo = self.info("logo").replace("%s/" % self.chemin(), "")
else: else:

View file

@ -1,4 +1,4 @@
# -*- coding: iso-8859-1 -*- # -*- coding: utf-8 -*-
""" """
MoinMoin - RandomIncludeQuote macro MoinMoin - RandomIncludeQuote macro
@ -8,7 +8,7 @@
for detailed docs. for detailed docs.
@copyright: 2000-2004 by Jürgen Hermann <jh@web.de> @copyright: 2000-2004 by Jürgen Hermann <jh@web.de>
@copyright: 2000-2001 by Richard Jones <richard@bizarsoftware.com.au> @copyright: 2000-2001 by Richard Jones <richard@bizarsoftware.com.au>
@license: GNU GPL, see COPYING for details. @license: GNU GPL, see COPYING for details.
""" """

View file

@ -1,4 +1,4 @@
# -*- coding: iso-8859-1 -*- # -*- coding: utf-8 -*-
""" """
MoinMoin - RandomQuote Macro MoinMoin - RandomQuote Macro
@ -12,7 +12,7 @@
It will look for list delimiters on the page in question. It will look for list delimiters on the page in question.
It will ignore anything that is not in an "*" list. It will ignore anything that is not in an "*" list.
@copyright: 2002-2004 by Jürgen Hermann <jh@web.de> @copyright: 2002-2004 by Jürgen Hermann <jh@web.de>
@license: GNU GPL, see COPYING for details. @license: GNU GPL, see COPYING for details.
Originally written by Thomas Waldmann. Originally written by Thomas Waldmann.