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', [])
|
self.droits = self.search_s(dn, ldap.SCOPE_BASE, attrlist=['droits'])[0][1].get('droits', [])
|
||||||
if dn == variables.admin_dn:
|
if dn == variables.admin_dn:
|
||||||
self.droits += [attributs.nounou]
|
self.droits += [attributs.nounou]
|
||||||
# On autorise root à se binder en cn=readonly ou cn=admin, les autres doivent exister dans la base.
|
# Il faut peupler current_login, qui sera utilisé pour écrire dans l'historique qui fait des modifications
|
||||||
if user != 'root' and dn in [variables.admin_dn, variables.readonly_dn]:
|
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)
|
current_user = self.search("uid=%s" % user)
|
||||||
if len(current_user) != 1:
|
if len(current_user) != 1:
|
||||||
raise ValueError("L'utilisateur %s n'est pas présent dans la base en *1* exemplaire." % user)
|
raise ValueError("L'utilisateur %s n'est pas présent dans la base en *1* exemplaire." % user)
|
||||||
else:
|
else:
|
||||||
self.current_user = current_user[0]
|
self.current_login = current_user[0]["uid"][0].value
|
||||||
else:
|
else:
|
||||||
self.conn = self.simple_bind_s()
|
self.conn = self.simple_bind_s()
|
||||||
self.dn = None
|
self.dn = None
|
||||||
self.droits = []
|
self.droits = []
|
||||||
self._username_given = user
|
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):
|
def ressuscite(self, ldif_file, login=None):
|
||||||
if login is None:
|
if login is None:
|
||||||
login = self.current_login
|
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
|
#: 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)
|
#: 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)
|
#: 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
|
# Quand on a besoin du fichier de secrets
|
||||||
def import_secrets():
|
def import_secrets():
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue