[lc_ldap] On interdit la modification d'objets comme les machines
Crans aux câbleurs par exemple.
This commit is contained in:
parent
90a0b565cc
commit
b565cc51e5
1 changed files with 18 additions and 12 deletions
30
lc_ldap.py
30
lc_ldap.py
|
@ -92,6 +92,8 @@ def escape(chaine):
|
||||||
dans une requête ldap."""
|
dans une requête ldap."""
|
||||||
return ldap.filter.escape_filter_chars(chaine)
|
return ldap.filter.escape_filter_chars(chaine)
|
||||||
|
|
||||||
|
# A priori, ldif_to_uldif et ldif_to_cldif sont obsolètes,
|
||||||
|
# du fait de l'apparition de AttrsDict dans attributs.py
|
||||||
def ldif_to_uldif(ldif):
|
def ldif_to_uldif(ldif):
|
||||||
"""
|
"""
|
||||||
Transforme un dictionnaire ldif en un dictionnaire
|
Transforme un dictionnaire ldif en un dictionnaire
|
||||||
|
@ -270,7 +272,7 @@ class lc_ldap(ldap.ldapobject.LDAPObject, object):
|
||||||
|
|
||||||
# Tout doit disparaître !!
|
# Tout doit disparaître !!
|
||||||
machine = self._create_entity('mid=%s,%s' % (uldif['mid'][0], parent), uldif)
|
machine = self._create_entity('mid=%s,%s' % (uldif['mid'][0], parent), uldif)
|
||||||
if machine.may_be(created, self.droits + self._is_parent(machine)):
|
if machine.may_be(created, self.droits + self._is_parent(machine.dn)):
|
||||||
machine.create()
|
machine.create()
|
||||||
else:
|
else:
|
||||||
raise EnvironmentError("Vous n'avez pas le droit de créer cette machine.")
|
raise EnvironmentError("Vous n'avez pas le droit de créer cette machine.")
|
||||||
|
@ -335,26 +337,26 @@ class lc_ldap(ldap.ldapobject.LDAPObject, object):
|
||||||
i = nonfree[-1]+1
|
i = nonfree[-1]+1
|
||||||
return i
|
return i
|
||||||
|
|
||||||
def _is_parent(self, obj):
|
def _is_parent(self, objdn):
|
||||||
"""
|
"""
|
||||||
Teste le lien de parenté de l'objet 1 sur l'objet 2.
|
Teste le rapport entre le dn fourni et self
|
||||||
Retourne une liste qui s'ajoutera à la liste des droits
|
Retourne une liste qui s'ajoutera à la liste des droits
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if obj.dn.endswith(self.dn) and obj.dn != self.dn:
|
if objdn.endswith(self.dn) and objdn != self.dn:
|
||||||
return [attributs.parent]
|
return [attributs.parent]
|
||||||
|
|
||||||
else:
|
else:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
||||||
def _is_self(self, obj):
|
def _is_self(self, objdn):
|
||||||
"""
|
"""
|
||||||
Teste si l'objet qui se binde est celui qui est en cours de modif.
|
Teste si le dn fourni est celui de self.
|
||||||
Retourne une liste qui s'ajoutera à la liste des droits
|
Retourne une liste qui s'ajoutera à la liste des droits
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if obj.dn == self.dn:
|
if objdn == self.dn:
|
||||||
return [attributs.soi]
|
return [attributs.soi]
|
||||||
else:
|
else:
|
||||||
return []
|
return []
|
||||||
|
@ -450,16 +452,15 @@ class CransLdapObject(object):
|
||||||
recherche dans la base ldap.
|
recherche dans la base ldap.
|
||||||
'''
|
'''
|
||||||
|
|
||||||
self.mode = mode
|
if not isinstance(conn, lc_ldap):
|
||||||
|
raise TypeError("conn doit être une instance de lc_ldap")
|
||||||
|
self.conn = conn
|
||||||
|
|
||||||
self.attrs = attributs.AttrsDict(conn) # Contient un dico uldif qui doit représenter ce qui
|
self.attrs = attributs.AttrsDict(conn) # Contient un dico uldif qui doit représenter ce qui
|
||||||
# est dans la base. On attrify paresseusement au moment où on utilise un attribut
|
# est dans la base. On attrify paresseusement au moment où on utilise un attribut
|
||||||
|
|
||||||
self._modifs = None # C'est là qu'on met les modifications
|
self._modifs = None # C'est là qu'on met les modifications
|
||||||
|
|
||||||
if not isinstance(conn, lc_ldap):
|
|
||||||
raise TypeError("conn doit être une instance de lc_ldap")
|
|
||||||
self.conn = conn
|
|
||||||
self.dn = dn
|
self.dn = dn
|
||||||
|
|
||||||
orig = {}
|
orig = {}
|
||||||
|
@ -486,6 +487,12 @@ class CransLdapObject(object):
|
||||||
|
|
||||||
self._modifs = attributs.AttrsDict(self.conn, res[0][1], check_ctxt = False)
|
self._modifs = attributs.AttrsDict(self.conn, res[0][1], check_ctxt = False)
|
||||||
|
|
||||||
|
if mode in ['w', 'rw']:
|
||||||
|
if not self.may_be(modified, self.conn.droits + self.conn._is_parent(dn) + self.conn._is_self(dn)):
|
||||||
|
raise EnvironmentError("Vous n'avez pas le droit de modifier cet objet.")
|
||||||
|
|
||||||
|
self.mode = mode
|
||||||
|
|
||||||
# Je m'interroge sur la pertinence de cette partie, je pense qu'elle n'est
|
# Je m'interroge sur la pertinence de cette partie, je pense qu'elle n'est
|
||||||
# pas utile. -- PEB 27/01/2013
|
# pas utile. -- PEB 27/01/2013
|
||||||
if mode in ['w', 'rw']:
|
if mode in ['w', 'rw']:
|
||||||
|
@ -528,7 +535,6 @@ class CransLdapObject(object):
|
||||||
# Requête LDAP de création de l'objet
|
# Requête LDAP de création de l'objet
|
||||||
self.conn.add_s(self.dn, modlist)
|
self.conn.add_s(self.dn, modlist)
|
||||||
|
|
||||||
|
|
||||||
def save(self):
|
def save(self):
|
||||||
"""Sauvegarde dans la base les modifications apportées à l'objet.
|
"""Sauvegarde dans la base les modifications apportées à l'objet.
|
||||||
Interne: Vérifie que ``self._modifs`` contient des valeurs correctes et
|
Interne: Vérifie que ``self._modifs`` contient des valeurs correctes et
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue