[ldap_locks] Mise en place des locks. Cf commentaires pour les détails.
* Malheureusement lc_ldap._create_entity et objet.create sont un peu sales, mais j'ai pas trouvé mieux. * L'historique contient désormais les secondes.
This commit is contained in:
parent
17efae121c
commit
d6efff30de
7 changed files with 123 additions and 58 deletions
20
lc_ldap.py
20
lc_ldap.py
|
@ -84,6 +84,8 @@ class lc_ldap(ldap.ldapobject.LDAPObject, object):
|
|||
|
||||
"""
|
||||
ldap.ldapobject.LDAPObject.__init__(self, uri)
|
||||
|
||||
self.lockholder = ldap_locks.LdapLockHolder(self)
|
||||
|
||||
if user and not re.match('[a-z_][a-z0-9_-]*', user):
|
||||
raise ValueError('Invalid user name: %r' % user)
|
||||
|
@ -205,7 +207,7 @@ class lc_ldap(ldap.ldapobject.LDAPObject, object):
|
|||
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."""
|
||||
machines,_ = self.allMachinesAdherents(mode)
|
||||
machines, _ = self.allMachinesAdherents(mode)
|
||||
return machines
|
||||
|
||||
def allAdherents(self, mode='ro'):
|
||||
|
@ -213,7 +215,7 @@ class lc_ldap(ldap.ldapobject.LDAPObject, object):
|
|||
s'éxécuter le plus rapidement possible. On dumpe malgré tout
|
||||
toute la base, c'est pour pouvoir aussi rajouter à moindre coût
|
||||
les machines."""
|
||||
_,adherents = self.allMachinesAdherents(mode)
|
||||
_, adherents = self.allMachinesAdherents(mode)
|
||||
return adherents
|
||||
|
||||
def newMachine(self, parent, realm, uldif, login=None):
|
||||
|
@ -295,6 +297,13 @@ class lc_ldap(ldap.ldapobject.LDAPObject, object):
|
|||
'''Crée une nouvelle entité ldap avec le dn ``dn`` et les
|
||||
attributs de ``ldif``. Attention, ldif doit contenir des
|
||||
données encodées.'''
|
||||
for key, values in uldif.iteritems():
|
||||
if key.endswith('id'):
|
||||
continue
|
||||
attribs = [attributs.attrify(val, key, self) for val in values]
|
||||
for attribut in attribs:
|
||||
if attribut.unique:
|
||||
self.lockholder.addlock(key, str(attribut))
|
||||
return objets.new_cransldapobject(self, dn, 'rw', uldif)
|
||||
|
||||
def _find_id(self, attr, plage=None):
|
||||
|
@ -314,12 +323,17 @@ class lc_ldap(ldap.ldapobject.LDAPObject, object):
|
|||
if my_id.value != i:
|
||||
continue
|
||||
else:
|
||||
break
|
||||
try:
|
||||
self.lockholder.addlock(attr, str(i))
|
||||
break
|
||||
except:
|
||||
continue
|
||||
else:
|
||||
raise EnvironmentError('Aucun %s libre dans la plage [%d, %d]' %
|
||||
(attr, plage[0], i))
|
||||
else:
|
||||
i = nonfree[-1]+1
|
||||
self.lockholder.addlock(attr, str(i))
|
||||
return i
|
||||
|
||||
def _check_parent(self, objdn):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue