Un dbut de correction

darcs-hash:20051215231807-72cb0-ef1e5642bc6da7929644b0f09fcd7b119f8586a6.gz
This commit is contained in:
salles 2005-12-16 00:18:07 +01:00
parent 21a1ac3b2c
commit a541b5e943

View file

@ -50,9 +50,9 @@ random.seed() # On initialise le g
##################################################################################
### Items de la blackliste
blacklist_items = { u'bloq' : u'Bloquage total de tout services' ,
blacklist_items = { u'bloq' : u'Bloquage total de tous les services' ,
u'virus' : u'Bloquage sur squid',
u'upload' : u'Bloquage total accès extérieur',
u'upload' : u'Bloquage total de l'accès - l'ext-bérieur',
u'autodisc' : u'Autodisconnect pour upload',
u'warez' : u'Bloquage sur squid',
u'p2p' : u'Sanction à définir'}
@ -71,8 +71,11 @@ script_utilisateur = user_tests.getuser()
##################################################################################
### Fonctions utiles
def decode(s):
""" Retourne un unicode à partir de s
s doit être en utf-8 """
"""
Retourne un unicode à partir de s
s doit être en utf-8
"""
return s.decode('utf-8','ignore') # On ignore les erreurs
accents = "êëèéÉÈÀÙâäàûüôöÖÔîïÎÏ'çÇÿßæÆøØ" # Si modif ici modifier aussi la fonction
@ -88,8 +91,11 @@ def strip_accents(a):
return a
def mailexist(mail):
""" Vérifie si un mail existe ou non
grace à la commande vrfy du serveur mail """
"""
Vérifie si une adresse mail existe ou non grace à la commande vrfy
du serveur mail
"""
try:
s=smtplib.SMTP(smtpserv)
r = s.vrfy(mail)
@ -107,10 +113,9 @@ def preattr(val):
val est :
* un entier
* une chaîne
* une liste avec un seul entier ou chaine
* une liste avec un seul entier ou une seule cha-Aîne-b
Retourne
[ len(str(val).strip), str(val).strip en utf-8 ]
Retourne [ len(str(val).strip), str(val).strip en utf-8 ]
"""
t = type(val)
@ -131,9 +136,9 @@ def preattr(val):
def is_actif(sanction):
"""
Retourne True ou False suivant si la sanction founie (chaine venant de blacklist)
est active ou non
"""
Retourne True ou False suivant si la sanction fournie (cha-Aîne-b
venant de blacklist) est active ou non
"""
bl = sanction.split(',')
try:
@ -163,10 +168,10 @@ def format_mac(mac):
map(lambda x: "%02s" % x, mac.split(":"))))
mac= mac.replace(':','').lower()
if len(mac)!=12:
raise ValueError(u'Longueur adresse mac incorrecte.')
raise ValueError(u'Longueur de l\'adresse mac incorrecte.')
for c in mac[:]:
if c not in string.hexdigits:
raise ValueError(u"Caractère interdit '%s' dans adresse mac." % c)
raise ValueError(u"Caractère interdit '%s' dans l\'adresse mac." % c)
if mac=='000000000000':
raise ValueError(u"MAC nulle interdite\nIl doit être possible de modifier l'adresse de la carte.")
@ -179,11 +184,14 @@ def format_mac(mac):
### Définition des classes
class service:
""" Défini un service à redémarrer """
""" Définit un service à redémarrer """
def __init__(self,nom,args=[],start=[]):
""" nom du service
liste des arguments
liste d'horaires de démarages """
"""
Nom du service
Liste des arguments
Liste d'horaires de démarrages
"""
self.nom=nom
self.args=args
self.start=map(int,start)
@ -203,7 +211,7 @@ class crans_ldap:
base_services = 'ou=services,dc=crans,dc=org'
### Configuration de la recheche
# Dictionnaire de tranformation des champs
# Dictionnaire de transformation des champs
trans = { 'prénom': 'prenom' ,
'chambre': 'chbre',
'login': 'mail' ,
@ -222,7 +230,7 @@ class crans_ldap:
'machine': [ 'mid' , 'ipsec', 'historique', 'blacklist' , 'puissance', 'canal', 'portTCPin', 'portTCPout', 'portUDPin', 'portUDPout', 'prise' , 'info', 'exempt' ] ,
'club': [ 'cid' , 'responsable', 'paiement', 'historique', 'blacklist', 'mailAlias', 'info', 'controle' ] }
# Scope des différentes recherches
# Profondeur des différentes recherches (scope)
scope = { 'adherent': 1 , 'machine': 2 , 'club': 1 }
def __init__(self,readonly=False):
@ -256,20 +264,25 @@ class crans_ldap:
def exist(self,arg):
"""
Vérifie l'existence d'une entrée dans la base et que cette entrée
n'appartient pas à l'objet en cours, prend en compte les locks
Vérifie l'existence d'une entrée dans la base et que cette
entrée n'appartient pas à l'objet en cours.
La m-Aéthode prend en compte les locks.-b
arg doit être une expression de recherche ldap
Si existence, retourne la liste de dn correspondants
Si il y a existence, on retourne la liste des dn correspondants
Sinon retourne une liste vide
Exemple : exist('chbre=Z345') vérifie si il y a un adhérent en Z345
"""
r=[]
# Premier test: dans les objets déja inscrits
# Premier test: dans les objets déj-Aà inscrits-b
ret = self.conn.search_s(self.base_dn,2,arg)
for res in ret:
# C'est peut être l'objet courant
try: # Si ce n'est pas une classe fille avec l'attribu dn => erreur
try: # Si ce n'est pas une classe fille avec l'attribut dn => erreur
if res[0] == self.dn:
continue
except:
@ -297,10 +310,14 @@ class crans_ldap:
return r
def lock(self,item,valeur):
""" Lock un item avec la valeur valeur, les items possibles peuvent être :
"""
Lock un item avec la valeur valeur, les items possibles
peuvent être :
aid $ chbre $ mail $ mailAlias $ cannonicalAlias $
mid $ macAddress $ host $ hostAlias $ ipHostNumber
retourne le dn du lock
Retourne le dn du lock
"""
valeur = valeur.encode('utf-8')
@ -338,8 +355,10 @@ class crans_ldap:
self._locks.append(lock_dn)
def remove_lock(self,lockdn):
""" Destruction d'un lock
Destruction de tous les locks si lockdn=*"""
"""
Destruction d'un lock
Destruction de tous les locks si lockdn=*
"""
# Mettre des verifs ?
if lockdn!='*':
self.conn.delete_s(lockdn)
@ -358,13 +377,20 @@ class crans_ldap:
return self.conn.search_s(self.base_lock,1,'objectClass=lock')
def services_to_restart(self,new=None,args=[],start=0):
""" Si new = None retourne la liste des services à redémarrer
Si new est fourni et ne commence pas par - ajoute le service à la liste
avec les arguments args (args doit être une liste).
start indique la date (secondes depuis epoch) à partir du moment ou
cette action doit être effectué
Si new commence par - supprime le service si son start est plus vieux que maintenant
Si new commence par -- supprime dans condition.
"""
start indique la date (en secondes depuis epoch) à partir du
moment o- cette action sera effectu-
Si new = None retourne la liste des services à redémarrer
Si new est fourni mais ne commence pas par '-', on ajoute
le service à la liste avec les arguments args (args doit être
une liste).
Si new commence par '-', on supprime le service si son start
est dans le futur
Si new commence par '--', on supprime le service de condition.
"""
if new: new = preattr(new)[1]
@ -401,10 +427,10 @@ class crans_ldap:
remove_dn=None
if remove_dn:
# Supression
# Suppression
try: self.conn.delete_s(remove_dn)
except: pass
# Si n'existe pas => Erreur mais le résultat est la.
# Si n'existe pas => Erreur mais le résultat est l-Aà.-b
return
serv_dn = 'cn=%s,%s' % ( new, self.base_services )