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:
parent
51fcb73eec
commit
645b931736
2 changed files with 14 additions and 11 deletions
20
lc_ldap.py
20
lc_ldap.py
|
@ -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
|
||||
|
|
|
@ -12,7 +12,10 @@ import variables
|
|||
#: Pour enregistrer dans l'historique, on a besoin de savoir qui exécute le script
|
||||
#: Si le script a été exécuté via un sudo, la variable SUDO_USER (l'utilisateur qui a effectué le sudo)
|
||||
#: est plus pertinente que USER (qui sera root)
|
||||
current_user = os.getenv("SUDO_USER") or os.getenv("USER") or os.getlogin()
|
||||
#: À noter que Cron, par exemple, n'a ni USER ni SUDO_USER mais possède bien LOGNAME
|
||||
current_user = os.getenv("SUDO_USER") or os.getenv("USER") or os.getenv("LOGNAME")
|
||||
if isinstance(current_user, str):
|
||||
current_user = current_user.decode("utf-8")
|
||||
|
||||
# Quand on a besoin du fichier de secrets
|
||||
def import_secrets():
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue