Un dbut de correction
darcs-hash:20051215231807-72cb0-ef1e5642bc6da7929644b0f09fcd7b119f8586a6.gz
This commit is contained in:
parent
21a1ac3b2c
commit
a541b5e943
1 changed files with 64 additions and 38 deletions
|
@ -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 )
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue