[lc_ldap] Methode pour supprimer un objet et le ressuciter
le cimetière est dans /home/cimetiere_lc/ ressucite prend le path du fichier contenant l'object à ressuciter
This commit is contained in:
parent
70fbc96d9d
commit
c5cbac5468
1 changed files with 48 additions and 0 deletions
48
lc_ldap.py
48
lc_ldap.py
|
@ -163,6 +163,23 @@ class lc_ldap(ldap.ldapobject.LDAPObject, object):
|
|||
self.dn = None
|
||||
self.droits = []
|
||||
|
||||
def ressucite(self, ldif_file, login=current_user):
|
||||
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:
|
||||
if self.search(dn=dn):
|
||||
raise ValueError ('objet existant: %s' % dn)
|
||||
except ldap.NO_SUCH_OBJECT: pass
|
||||
obj = new_cransldapobject(self, dn, mode='rw', ldif=ldif)
|
||||
obj.history_add(login, u"resurrection")
|
||||
return obj
|
||||
|
||||
def user_to_dn(self, user):
|
||||
"""Cherche le dn à partir de l'username."""
|
||||
self._first_bind()
|
||||
|
@ -554,6 +571,37 @@ class CransLdapObject(object):
|
|||
# Requête LDAP de création de l'objet
|
||||
self.conn.add_s(self.dn, modlist)
|
||||
|
||||
def delete(self, comm="", login=current_user):
|
||||
def bury(self, comm, login):
|
||||
self.history_add(login, u"destruction (%s)" % comm)
|
||||
self.save()
|
||||
#On produit un ldif
|
||||
ldif=u"dn: %s\n" % self.dn
|
||||
for key in self.attrs.keys():
|
||||
for value in self.attrs[key]:
|
||||
ldif+=u"%s: %s\n" % (key, value)
|
||||
|
||||
import datetime
|
||||
file="%s %s" % (datetime.datetime.now(), self.dn)
|
||||
f = open('/home/cimetiere_lc/%s/%s' % (self['objectClass'][0],file), 'w')
|
||||
f.write(ldif.encode("UTF-8"))
|
||||
f.close()
|
||||
|
||||
if self.mode not in ['w', 'rw']:
|
||||
raise EnvironmentError("Objet en lecture seule, réessayer en lecture/écriture")
|
||||
if not self.may_be(deleted, self.conn.droits):
|
||||
raise EnvironmentError("Vous n'avez pas le droit de supprimer %s." % self.dn)
|
||||
ref = [ r[0] for r in self.conn.search_s(self.dn, 2) ]
|
||||
ref.reverse()
|
||||
for dn in ref:
|
||||
if dn == self.dn: bury(self, comm, login)
|
||||
else:
|
||||
obj = new_cransldapobject(self.conn, dn, self.mode)
|
||||
bury(obj, comm, login)
|
||||
for dn in ref:
|
||||
self.conn.delete_s(dn)
|
||||
|
||||
|
||||
def save(self):
|
||||
"""Sauvegarde dans la base les modifications apportées à l'objet.
|
||||
Interne: Vérifie que ``self._modifs`` contient des valeurs correctes et
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue