[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.droits = []
|
||||||
self._username_given = user
|
self._username_given = user
|
||||||
|
|
||||||
def ressuscite(self, ldif_file, login=None):
|
def ressuscite_build_ldif(self, ldif_file):
|
||||||
if login is None:
|
|
||||||
login = self.current_login
|
|
||||||
ldif={}
|
ldif={}
|
||||||
for line in open(ldif_file).readlines():
|
for line in open(ldif_file).readlines():
|
||||||
line = line.split(':',1)
|
line = line.split(':',1)
|
||||||
if len(line)==2:
|
if len(line)==2:
|
||||||
(key, value) = line
|
(key, value) = line
|
||||||
ldif[key]=ldif.get(key, []) + [value.strip()]
|
ldif[key]=ldif.get(key, []) + [value.strip()]
|
||||||
dn = ldif['dn'][0]
|
try:
|
||||||
del(ldif['dn'])
|
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:
|
try:
|
||||||
if self.search(dn=dn):
|
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:
|
except ldap.NO_SUCH_OBJECT:
|
||||||
pass
|
pass
|
||||||
obj = objets.new_cransldapobject(self, dn, mode='rw', uldif=ldif_to_uldif(ldif))
|
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
|
# La vérification des attibuts uniques et de l'existance du dn est faite en appelant create()
|
||||||
# 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([])
|
|
||||||
|
|
||||||
obj.history_add(login, u"resurrection")
|
obj.history_add(login, u"resurrection")
|
||||||
return obj
|
return obj
|
||||||
|
|
||||||
|
|
10
objets.py
10
objets.py
|
@ -209,13 +209,19 @@ class CransLdapObject(object):
|
||||||
if login is None:
|
if login is None:
|
||||||
login = self.conn.current_login
|
login = self.conn.current_login
|
||||||
self._check_optionnal(comment="créez")
|
self._check_optionnal(comment="créez")
|
||||||
|
|
||||||
self.history_add(login, u"Inscription")
|
try:
|
||||||
|
if self.conn.search(dn=self.dn):
|
||||||
|
raise ValueError ('objet existant: %s' % self.dn)
|
||||||
|
except ldap.NO_SUCH_OBJECT:
|
||||||
|
pass
|
||||||
|
|
||||||
for attr in self.attrs.keys():
|
for attr in self.attrs.keys():
|
||||||
for attribut in self[attr]:
|
for attribut in self[attr]:
|
||||||
attribut.check_uniqueness([])
|
attribut.check_uniqueness([])
|
||||||
|
|
||||||
|
self.history_add(login, u"Inscription")
|
||||||
|
|
||||||
# Création de la requête LDAP
|
# Création de la requête LDAP
|
||||||
modlist = addModlist(self._modifs.to_ldif())
|
modlist = addModlist(self._modifs.to_ldif())
|
||||||
# Requête LDAP de création de l'objet
|
# Requête LDAP de création de l'objet
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue