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