[ressucite] On donne un nouvel id si l'id est déjà pris et on vérifie l'unicité seulement au moment d'enregistrer l'objet
par id j'entends aid, cid, fid, mid, tout ce que apparait dans un dn et qu'on ne peut normalement par modifier tout seul après.
This commit is contained in:
parent
aa573c3c35
commit
007bfeb54e
2 changed files with 26 additions and 17 deletions
33
lc_ldap.py
33
lc_ldap.py
|
@ -124,32 +124,35 @@ class lc_ldap(ldap.ldapobject.LDAPObject, object):
|
|||
self.droits = []
|
||||
self._username_given = user
|
||||
|
||||
def ressuscite(self, ldif_file, login=None):
|
||||
if login is None:
|
||||
login = self.current_login
|
||||
def ressuscite_build_ldif(self, ldif_file):
|
||||
ldif={}
|
||||
for line in open(ldif_file).readlines():
|
||||
line = line.split(':',1)
|
||||
if len(line)==2:
|
||||
(key, value) = line
|
||||
ldif[key]=ldif.get(key, []) + [value.strip()]
|
||||
dn = ldif['dn'][0]
|
||||
del(ldif['dn'])
|
||||
try:
|
||||
dn = ldif['dn'][0]
|
||||
del(ldif['dn'])
|
||||
return (dn,ldif)
|
||||
except KeyError as error:
|
||||
raise KeyError("%s in %s" % (error, ldif_file))
|
||||
|
||||
def ressuscite(self, ldif_file, login=None):
|
||||
if login is None:
|
||||
login = self.current_login
|
||||
(dn, ldif)= self.ressuscite_build_ldif(ldif_file)
|
||||
# On définit de nouveaux dn si ceux-ci sont déjà pris
|
||||
try:
|
||||
if self.search(dn=dn):
|
||||
raise ValueError ('objet existant: %s' % dn)
|
||||
for id in ["aid", "mid", "fid", "cid"]:
|
||||
if dn.startswith("%s=" % id):
|
||||
ldif[id]=[str(self._find_id(id))]
|
||||
dn="%s=%s,%s" % (id, ldif['aid'][0], dn.split(',',1)[1])
|
||||
except ldap.NO_SUCH_OBJECT:
|
||||
pass
|
||||
obj = objets.new_cransldapobject(self, dn, mode='rw', uldif=ldif_to_uldif(ldif))
|
||||
# On vérifie que les attibuts uniques que l'on veut réssuciter
|
||||
# ne sont pas déjà dans ldap.
|
||||
### TODO
|
||||
### S'il existent déjà, traiter au cas par cas,
|
||||
### par exemple, remettre l'ip/rid en automatique
|
||||
for attr in obj.attrs.keys():
|
||||
for attribut in obj[attr]:
|
||||
attribut.check_uniqueness([])
|
||||
|
||||
# La vérification des attibuts uniques et de l'existance du dn est faite en appelant create()
|
||||
obj.history_add(login, u"resurrection")
|
||||
return obj
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue