[lc_ldap.py] ajout de commentaires, suppression de code mort

This commit is contained in:
Antoine Durand-Gasselin 2011-02-26 16:40:13 +01:00
parent 76cfc500e9
commit f786fa148e

View file

@ -90,6 +90,7 @@ class lc_ldap(ldap.ldapobject.LDAPObject):
if user and not re.match('[a-z_][a-z0-9_-]*', user):
raise ValueError('Invalid user name: %s' % user)
# Si un username, on récupère le dn associé
if user and not dn:
self.simple_bind_s(base_dn)
res = self.search_s(base_dn, 1, 'uid=%s' % user)
@ -99,6 +100,9 @@ class lc_ldap(ldap.ldapobject.LDAPObject):
raise ldap.INVALID_CREDENTIALS({'desc': 'Too many matches: uid=%s' % user })
else:
dn = res[0][0]
# Si on a un dn, on se connecte avec à la base ldap sinon on s'y
# connecte en anonyme
if dn:
self.conn = self.bind_s(dn, cred)
self.dn = dn
@ -109,16 +113,23 @@ class lc_ldap(ldap.ldapobject.LDAPObject):
self.droits = []
def search(self, filterstr='(objectClass=*)', mode='ro', dn= base_dn, scope= 2, sizelimit=400):
"""La fonction de recherche dans la base ldap qui renvoie un liste de
CransLdapObjects. On utilise la feature de sizelimit de python ldap"""
res = self.search_ext_s(dn, scope, filterstr, sizelimit=sizelimit)
return [ new_cransldapobject(self, r[0], mode=mode) for r in res ]
def allMachines(self):
"""Renvoie la liste de toutes les machines,
Conçue pour s'éxécuter le plus rapidement possible"""
"""Renvoie la liste de toutes les machines, Conçue pour
s'éxécuter le plus rapidement possible. On dumpe malgré tout
toute la base, c'est pour pouvoir aussi rajouter à moindre coût
les propriétaires."""
res = {}
machines = []
# On récupère tous les objets ldap et on les met dans un dico
# (proxying de la base ldap)
for dn, attrs in self.search_s(base_dn, scope=2):
res[dn] = attrs
# On crée la liste des machines
for dn, attrs in res.items():
if dn.startswith('mid='):
m = new_cransldapobject(self, dn, ldif = attrs)
@ -155,10 +166,13 @@ class lc_ldap(ldap.ldapobject.LDAPObject):
else: raise ValueError("Realm inconnu: %s" % realm)
# On récupère la plage des mids
if realm == 'fil':
plage = xrange(256, 2047)
else:
plage = xrange( *(config.mid[realm]))
# On récupère le premier id libre dans la plages s'il n'est pas
# déjà précisé dans le ldiff
mid = uldif.setdefault('mid', [ unicode(self._find_id('mid', plage)) ])
uldif['ipHostNumber'] = [ unicode(crans_utils.ip_of_mid(int (mid[0]))) ]
return self._create_entity('mid=%s,%s' % (mid[0], parent), uldif)
@ -180,20 +194,18 @@ class lc_ldap(ldap.ldapobject.LDAPObject):
def _create_entity(self, dn, uldif):
'''Crée une nouvelle entité ldap en dn, avec attributs ldif:
uniquement en unicode'''
# Conversion en cldiff pour vérification des valeurs
cldif = ldif_to_cldif(uldif, self)
#lock = CransLock(self)
# for item in ['aid', 'uid', 'chbre', 'mailAlias', 'canonicalAlias',
# 'fid', 'cid', 'mid', 'macAddress', 'host', 'hostAlias' ]:
# for val in cldif.get(item, []):
# lock.add(item, val)
# Conversion en ascii
ldif = cldif_to_ldif(cldif)
# Création de la requête LDAP
modlist = addModlist(ldif)
#with lock:
# print dn, modlist
#
# Requête LDAP de création de l'objet
self.add_s(dn, modlist)
# Renvoi du CransLdapObject
return new_cransldapobject(self, dn, mode='w')
def _find_id(self, attr, plage = xrange(1, 32000)):
'''Trouve un <attr>id libre dans plage'''
res = self.search_s(base_dn, 2, '%s=*' % attr, attrlist = [attr])
@ -211,12 +223,6 @@ class lc_ldap(ldap.ldapobject.LDAPObject):
(attr, plage[0], i))
return i
# def _hist(self, msg):
# now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M : ')
# return unicode(now) + msg
# ? def reconnect(self, conn=None):
def new_cransldapobject(conn, dn, mode='ro', ldif = None):
"""Crée un objet CransLdap en utilisant la classe correspondant à
@ -290,10 +296,6 @@ class CransLdapObject(object):
if self.mode not in ['w', 'rw']:
raise EnvironmentError("Objet en lecture seule, réessayer en lecture/écriture")
# Vérifications et Historique
#histo = self._gen_hist(self._modifs)
#self._modifs['historique'] += histo
# On récupère la liste des modifications
modlist = self.get_modlist()
self.conn.modify_s(self.dn, modlist)