Encodage en UTF-8 : Il reste encore beaucoup de boulot.
This commit is contained in:
parent
fc9ac609fc
commit
5fb0ee8bd5
16 changed files with 138 additions and 138 deletions
|
@ -1,7 +1,7 @@
|
|||
#! /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
|
||||
|
||||
import os,sys
|
||||
|
@ -19,9 +19,9 @@ for i in range(5):
|
|||
sys.exit(1)
|
||||
|
||||
|
||||
# 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
|
||||
# tous ne l'ont pas été
|
||||
# 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
|
||||
# tous ne l'ont pas été
|
||||
try :
|
||||
exempts = []
|
||||
file = open('/home/salles/mails_envoyes',"r")
|
||||
|
@ -33,25 +33,25 @@ try :
|
|||
except :
|
||||
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
|
||||
# Dans le cas du 11/09/2007, les mails perdus étaient identifiables avec
|
||||
# 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
|
||||
# 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
|
||||
# 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>
|
||||
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 :
|
||||
# - 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
|
||||
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 = {}
|
||||
|
||||
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
|
||||
# pas pris en compte @lists.crans.
|
||||
if mail.find('@crans.') > 0 :
|
||||
|
@ -61,16 +61,16 @@ def is_crans(mail) :
|
|||
|
||||
|
||||
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.
|
||||
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']
|
||||
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']
|
||||
"""
|
||||
if not dict.has_key(chain) :
|
||||
# Si la clé n'existe pas : initialisation
|
||||
# Si la clé n'existe pas : initialisation
|
||||
dict[chain] = [ [value, date] ]
|
||||
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])
|
||||
|
||||
# On traite maintenant la liste des mails perdus
|
||||
|
@ -78,9 +78,9 @@ line = file.readline()
|
|||
# Pour chaque mail perdu
|
||||
while line:
|
||||
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(",")
|
||||
# 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(",")
|
||||
# On tente d'enlever les adresses nulles de ces 2 listes
|
||||
try :
|
||||
|
@ -95,7 +95,7 @@ while line:
|
|||
# On reformate le champ date en inversant Jour et Mois
|
||||
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 receiver in receivers :
|
||||
# L'expediteur et le receveur sont du crans ?
|
||||
|
@ -109,14 +109,14 @@ while line:
|
|||
if is_crans(receiver) and not is_crans(sender) :
|
||||
append(unreceived, receiver, sender, date)
|
||||
|
||||
# On passe à la ligne suivante
|
||||
# On passe à la ligne suivante
|
||||
line = file.readline()
|
||||
|
||||
file.close()
|
||||
|
||||
|
||||
# On traite le formatage des mails pour indiquer aux adhérents les
|
||||
# mails qui ne leur ont pas été délivrés
|
||||
# On traite le formatage des mails pour indiquer aux adhérents les
|
||||
# mails qui ne leur ont pas été délivrés
|
||||
for adh in unreceived.keys() :
|
||||
text = u"""From: CRANS (Nounous) <nounous@crans.org>
|
||||
To: %s
|
||||
|
@ -125,30 +125,30 @@ Content-Type: text/plain; charset="iso-8859-15"
|
|||
|
||||
Bonjour,
|
||||
|
||||
Nous t'informons que suite à une erreur sur le serveur de mail
|
||||
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
|
||||
23h00 à ce mardi 11/09/2007 9h50.
|
||||
Nous t'informons que suite à une erreur sur le serveur de mail
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
if unsend.has_key(adh) :
|
||||
text += u"""
|
||||
"""
|
||||
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
|
||||
déjà le cas, il te faut les réexpédier si tu souhaites que tes
|
||||
destinataires les reçoivent.
|
||||
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
|
||||
destinataires les reçoivent.
|
||||
"""
|
||||
|
||||
text += u"""
|
||||
|
@ -167,8 +167,8 @@ Les nounous du CRANS"""
|
|||
pass
|
||||
|
||||
|
||||
# Le message est légèrement différent dans le cas où l'adhérent n'a perdu
|
||||
# des mails qu'à l'envoi.
|
||||
# Le message est légèrement différent dans le cas où l'adhérent n'a perdu
|
||||
# des mails qu'à l'envoi.
|
||||
for adh in unsend.keys() :
|
||||
if not unreceived.has_key(adh) :
|
||||
text = u"""From: CRANS (Nounous) <nounous@crans.org>
|
||||
|
@ -178,20 +178,20 @@ Content-Type: text/plain; charset="iso-8859-15"
|
|||
|
||||
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
|
||||
transmettre certains de tes messages dans la période allant du
|
||||
lundi 10/09/2007 23h00 à ce mardi 11/09/2007 9h50.
|
||||
transmettre certains de tes messages dans la période allant du
|
||||
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
|
||||
|
||||
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 déjà le cas, il te faut les réexpédier si tu souhaites que tes
|
||||
destinataires les reçoivent.
|
||||
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
|
||||
destinataires les reçoivent.
|
||||
"""
|
||||
|
||||
text += u"""
|
||||
|
@ -207,4 +207,4 @@ Les nounous du CRANS"""
|
|||
except :
|
||||
pass
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
#!/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
|
||||
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
|
||||
fi
|
||||
|
||||
|
@ -14,9 +14,9 @@ set -e
|
|||
echo -n "Sauvegarde en cours vers $BACKUP... "
|
||||
test ! -a $BACKUP
|
||||
cp -a $MAIL $BACKUP
|
||||
# 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
|
||||
# droits pour le recréer avec les mêmes permissions
|
||||
# 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
|
||||
# droits pour le recréer avec les mêmes permissions
|
||||
find $MAIL/{cur,tmp,new} -type f -print0 | xargs -0 rm -f || true
|
||||
find $BACKUP -type f | xargs chmod 600
|
||||
find $BACKUP -type d | xargs chmod 700
|
||||
|
|
|
@ -11,7 +11,7 @@ import annuaires_pg
|
|||
from iptools import AddrInNet
|
||||
def chap_ok(password, challenge, clear_pass) :
|
||||
""" 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)
|
||||
|
||||
retourne True si l'authentification est OK
|
||||
|
@ -31,39 +31,39 @@ def paiement_ok(adh):
|
|||
paid = max(adh.paiement() + [0])
|
||||
if periode_transitoire:
|
||||
# Si periode transitoire, on accepte les personnes n'ayant pas
|
||||
# réadhéré
|
||||
# réadhéré
|
||||
ann_scol -= 1
|
||||
return ann_scol <= paid
|
||||
|
||||
def do_auth(mac, prise):
|
||||
"""Effectue l'authentification. Renvoie (success, msg,
|
||||
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
|
||||
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
|
||||
prise."""
|
||||
|
||||
global ann_scol
|
||||
|
||||
# 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):
|
||||
return (-1, "Échec test CHAP", "")
|
||||
return (-1, "Échec test CHAP", "")
|
||||
|
||||
# Mac dans la base LDAP
|
||||
conn = crans_ldap(readonly=True)
|
||||
m = conn.search('mac=%s' % mac)['machine']
|
||||
if len(m) == 0:
|
||||
# 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)
|
||||
for chbre in annuaires_pg.reverse(prise[0], prise[1:]):
|
||||
if not annuaires_pg.is_crans(prise[0], chbre):
|
||||
return (0, "TMP: ancien client CROUS", 'event')
|
||||
return (0, "Mac inconnue", "accueil")
|
||||
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
|
||||
# donc sur uplink ou switch non filtré
|
||||
# But : éviter le spoof d'une mac d'une machine clef
|
||||
# N'appartient pas au Crans et n'a pas de prise attribuée
|
||||
# donc sur uplink ou switch non filtré
|
||||
# But : éviter le spoof d'une mac d'une machine clef
|
||||
proprio = m[0].proprietaire()
|
||||
if proprio.__class__ == AssociationCrans:
|
||||
return (-1, "Machine du crans", "")
|
||||
|
@ -72,7 +72,7 @@ def do_auth(mac, prise):
|
|||
if 'bloq' in m[0].blacklist_actif():
|
||||
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()
|
||||
or 'autodisc_virus' in m[0].blacklist_actif()):
|
||||
return (0, "Bad boy", "isolement")
|
||||
|
@ -82,10 +82,10 @@ def do_auth(mac, prise):
|
|||
|
||||
# Paiement 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
|
||||
# d'un autre adhérent à jour de cotisation
|
||||
# Si l'adhérent n'est pas membre actif, il doit se brancher depuis la prise
|
||||
# d'un autre adhérent à jour de cotisation
|
||||
if not proprio.droits():
|
||||
try:
|
||||
chbre = prise[0] + annuaires_pg.reverse(prise[0], prise[1:])[0]
|
||||
|
@ -96,15 +96,15 @@ def do_auth(mac, prise):
|
|||
if paiement_ok(hebergeur):
|
||||
break
|
||||
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
|
||||
('Nounou' in proprio.droits() and AddrInNet(m[0].ip(),'10.2.9.0/24'))):
|
||||
return (0, "Personnel ENS", "appts")
|
||||
|
||||
# C'est bon
|
||||
return (0, "Accès adhérent OK", "adherent")
|
||||
return (0, "Accès adhérent OK", "adherent")
|
||||
|
||||
if __name__ == '__main__' :
|
||||
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 += "%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)
|
||||
|
||||
# On logue la prise sur laquelle a lieu la tentative
|
||||
|
@ -120,13 +120,13 @@ if __name__ == '__main__' :
|
|||
syslog("%s -> %s [%s]" % (prise, mac, msg))
|
||||
|
||||
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
|
||||
print ", ".join(["Tunnel-Type = VLAN",
|
||||
"Tunnel-Medium-Type = IEEE-802",
|
||||
"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:
|
||||
f = open('/usr/scripts/var/last_macs/' + prise,'w')
|
||||
f.write(mac)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue