Tout ce dont on a besoin c'est du current_login. On fait confiance aux gens qui ont le mdp LDAP pour fourni le bon username.

This commit is contained in:
Vincent Le Gallic 2013-05-16 17:03:06 +02:00
parent 51fcb73eec
commit 645b931736
2 changed files with 14 additions and 11 deletions

View file

@ -99,26 +99,26 @@ class lc_ldap(ldap.ldapobject.LDAPObject, object):
self.droits = self.search_s(dn, ldap.SCOPE_BASE, attrlist=['droits'])[0][1].get('droits', [])
if dn == variables.admin_dn:
self.droits += [attributs.nounou]
# On autorise root à se binder en cn=readonly ou cn=admin, les autres doivent exister dans la base.
if user != 'root' and dn in [variables.admin_dn, variables.readonly_dn]:
# Il faut peupler current_login, qui sera utilisé pour écrire dans l'historique qui fait des modifications
if dn in [variables.admin_dn, variables.readonly_dn]:
# À ce stade, l'utilsateur qui appelle le script a réussi à se binder en cn=admin ou cn=readonly,
# c'est donc qu'il a pu lire les secrets, (directement ou par un sudo idoine)
# on lui fait donc confiance sur l'username qu'il fournit à condition qu'il en ait fournit un, quand même
if user is None:
raise ValueError("Même root doit préciser qui il est pour se connecter à la base LDAP.")
self.current_login = user
else:
current_user = self.search("uid=%s" % user)
if len(current_user) != 1:
raise ValueError("L'utilisateur %s n'est pas présent dans la base en *1* exemplaire." % user)
else:
self.current_user = current_user[0]
self.current_login = current_user[0]["uid"][0].value
else:
self.conn = self.simple_bind_s()
self.dn = None
self.droits = []
self._username_given = user
def _get_login(self):
if self._username_given == 'root':
return 'root'
else:
return self.current_user["uid"][0].value
current_login = property(_get_login)
def ressuscite(self, ldif_file, login=None):
if login is None:
login = self.current_login