diff --git a/gestion/ldap_crans.py b/gestion/ldap_crans.py index 976996ab..708c7509 100755 --- a/gestion/ldap_crans.py +++ b/gestion/ldap_crans.py @@ -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 -Aà 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-Aù cette action sera effectu-bé + + 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 )