[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): if user and not re.match('[a-z_][a-z0-9_-]*', user):
raise ValueError('Invalid user name: %s' % user) raise ValueError('Invalid user name: %s' % user)
# Si un username, on récupère le dn associé
if user and not dn: if user and not dn:
self.simple_bind_s(base_dn) self.simple_bind_s(base_dn)
res = self.search_s(base_dn, 1, 'uid=%s' % user) 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 }) raise ldap.INVALID_CREDENTIALS({'desc': 'Too many matches: uid=%s' % user })
else: else:
dn = res[0][0] 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: if dn:
self.conn = self.bind_s(dn, cred) self.conn = self.bind_s(dn, cred)
self.dn = dn self.dn = dn
@ -109,16 +113,23 @@ class lc_ldap(ldap.ldapobject.LDAPObject):
self.droits = [] self.droits = []
def search(self, filterstr='(objectClass=*)', mode='ro', dn= base_dn, scope= 2, sizelimit=400): 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) res = self.search_ext_s(dn, scope, filterstr, sizelimit=sizelimit)
return [ new_cransldapobject(self, r[0], mode=mode) for r in res ] return [ new_cransldapobject(self, r[0], mode=mode) for r in res ]
def allMachines(self): def allMachines(self):
"""Renvoie la liste de toutes les machines, """Renvoie la liste de toutes les machines, Conçue pour
Conçue pour s'éxécuter le plus rapidement possible""" 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 = {} res = {}
machines = [] 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): for dn, attrs in self.search_s(base_dn, scope=2):
res[dn] = attrs res[dn] = attrs
# On crée la liste des machines
for dn, attrs in res.items(): for dn, attrs in res.items():
if dn.startswith('mid='): if dn.startswith('mid='):
m = new_cransldapobject(self, dn, ldif = attrs) m = new_cransldapobject(self, dn, ldif = attrs)
@ -155,10 +166,13 @@ class lc_ldap(ldap.ldapobject.LDAPObject):
else: raise ValueError("Realm inconnu: %s" % realm) else: raise ValueError("Realm inconnu: %s" % realm)
# On récupère la plage des mids
if realm == 'fil': if realm == 'fil':
plage = xrange(256, 2047) plage = xrange(256, 2047)
else: else:
plage = xrange( *(config.mid[realm])) 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)) ]) mid = uldif.setdefault('mid', [ unicode(self._find_id('mid', plage)) ])
uldif['ipHostNumber'] = [ unicode(crans_utils.ip_of_mid(int (mid[0]))) ] uldif['ipHostNumber'] = [ unicode(crans_utils.ip_of_mid(int (mid[0]))) ]
return self._create_entity('mid=%s,%s' % (mid[0], parent), uldif) 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): def _create_entity(self, dn, uldif):
'''Crée une nouvelle entité ldap en dn, avec attributs ldif: '''Crée une nouvelle entité ldap en dn, avec attributs ldif:
uniquement en unicode''' uniquement en unicode'''
# Conversion en cldiff pour vérification des valeurs
cldif = ldif_to_cldif(uldif, self) cldif = ldif_to_cldif(uldif, self)
#lock = CransLock(self) # Conversion en ascii
# for item in ['aid', 'uid', 'chbre', 'mailAlias', 'canonicalAlias',
# 'fid', 'cid', 'mid', 'macAddress', 'host', 'hostAlias' ]:
# for val in cldif.get(item, []):
# lock.add(item, val)
ldif = cldif_to_ldif(cldif) ldif = cldif_to_ldif(cldif)
# Création de la requête LDAP
modlist = addModlist(ldif) modlist = addModlist(ldif)
#with lock: # Requête LDAP de création de l'objet
# print dn, modlist
#
self.add_s(dn, modlist) self.add_s(dn, modlist)
# Renvoi du CransLdapObject
return new_cransldapobject(self, dn, mode='w') return new_cransldapobject(self, dn, mode='w')
def _find_id(self, attr, plage = xrange(1, 32000)): def _find_id(self, attr, plage = xrange(1, 32000)):
'''Trouve un <attr>id libre dans plage''' '''Trouve un <attr>id libre dans plage'''
res = self.search_s(base_dn, 2, '%s=*' % attr, attrlist = [attr]) 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)) (attr, plage[0], i))
return 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): def new_cransldapobject(conn, dn, mode='ro', ldif = None):
"""Crée un objet CransLdap en utilisant la classe correspondant à """Crée un objet CransLdap en utilisant la classe correspondant à
@ -290,10 +296,6 @@ class CransLdapObject(object):
if self.mode not in ['w', 'rw']: if self.mode not in ['w', 'rw']:
raise EnvironmentError("Objet en lecture seule, réessayer en lecture/écriture") 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 # On récupère la liste des modifications
modlist = self.get_modlist() modlist = self.get_modlist()
self.conn.modify_s(self.dn, modlist) self.conn.modify_s(self.dn, modlist)