[lc_ldap.py] ajout de commentaires, suppression de code mort
This commit is contained in:
parent
76cfc500e9
commit
f786fa148e
1 changed files with 22 additions and 20 deletions
42
lc_ldap.py
42
lc_ldap.py
|
@ -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)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue