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
|
### 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 -Aà 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-Aù cette action sera effectu-bé
|
||||||
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 )
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue