Split de lc_ldap.py en lc_ldap.py et objets.py + création du wrapper shortcuts.py
Ça permet de faire les choses sales du genre os.getenv("SUDO_USER") ou import_secrets dans le wrapper et pas dans le binding même.
This commit is contained in:
parent
a620f5b5e9
commit
db7d41d967
8 changed files with 968 additions and 867 deletions
97
shortcuts.py
Normal file
97
shortcuts.py
Normal file
|
@ -0,0 +1,97 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
""" Raccourcis pour se connecter facilement à la base LDAP avec le binding lc_ldap. """
|
||||
|
||||
import sys
|
||||
import os.path
|
||||
|
||||
import lc_ldap as module_qui_a_le_meme_nom_que_sa_classe_principale
|
||||
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")
|
||||
|
||||
# Quand on a besoin du fichier de secrets
|
||||
def import_secrets():
|
||||
"""Importe le fichier de secrets."""
|
||||
if not "/etc/crans/secrets/" in sys.path:
|
||||
sys.path.append("/etc/crans/secrets/")
|
||||
import secrets
|
||||
return secrets
|
||||
|
||||
def lc_ldap(*args, **kwargs):
|
||||
"""Renvoie une connexion à la base LDAP."""
|
||||
return module_qui_a_le_meme_nom_que_sa_classe_principale.lc_ldap(*args, **kwargs)
|
||||
|
||||
def lc_ldap_test(*args, **kwargs):
|
||||
"""Renvoie une connexion LDAP à la base de tests."""
|
||||
# On impose le serveur
|
||||
kwargs["uri"] = 'ldap://vo.adm.crans.org'
|
||||
# On pense à laisser la possibilité de se connecter par username ou dn…
|
||||
if not kwargs.has_key("user"):
|
||||
# … mais si rien n'est spécifié, on fournit le dn par défaut
|
||||
kwargs.setdefault("dn", 'cn=admin,dc=crans,dc=org')
|
||||
# Le mot de passe de la base de test
|
||||
kwargs.setdefault("cred", variables.ldap_test_password)
|
||||
# On en a aussi besoin pour le lookup en readonly
|
||||
kwargs.setdefault("readonly_dn", variables.readonly_dn)
|
||||
kwargs.setdefault("readonly_password", variables.ldap_test_password)
|
||||
kwargs.setdefault("user", current_user)
|
||||
return module_qui_a_le_meme_nom_que_sa_classe_principale.lc_ldap(*args, **kwargs)
|
||||
|
||||
def lc_ldap_admin(*args, **kwargs):
|
||||
"""Renvoie une connexion LDAP à la vraie base, en admin.
|
||||
Possible seulement si on peut lire secrets.py
|
||||
|
||||
"""
|
||||
secrets = import_secrets()
|
||||
kwargs.setdefault("user", current_user)
|
||||
return module_qui_a_le_meme_nom_que_sa_classe_principale.lc_ldap(uri='ldap://ldap.adm.crans.org/', dn=secrets.ldap_auth_dn,
|
||||
cred=secrets.ldap_password, user=current_user)
|
||||
|
||||
def lc_ldap_readonly(*args, **kwargs):
|
||||
"""Connexion LDAP à la vraie base, en readonly.
|
||||
Possible seulement si on peut lire secrets.py
|
||||
|
||||
"""
|
||||
secrets = import_secrets()
|
||||
kwargs["uri"] = 'ldap://ldap.adm.crans.org/'
|
||||
kwargs["dn"] = secrets.ldap_readonly_auth_dn
|
||||
kwargs["cred"] = secrets.ldap_readonly_password
|
||||
kwargs.setdefault("user", current_user)
|
||||
return module_qui_a_le_meme_nom_que_sa_classe_principale.lc_ldap(*args, **kwargs)
|
||||
|
||||
def lc_ldap_local(*args, **kwargs):
|
||||
"""Connexion LDAP en lecture seule sur la base locale.
|
||||
L'idée est que les machines avec un réplica bossent
|
||||
avec elles-mêmes pour la lecture, pas avec vert.
|
||||
|
||||
Attention, les accès internes en lecture seule
|
||||
ou avec une socket ldapi semblent moins prioritaires
|
||||
qu'avec cn=admin. Ne pas utiliser cette fonction
|
||||
si vous souhaitez faire beaucoup de recherches
|
||||
indépendantes (c'est le temps d'accès à la socket
|
||||
qui est problématique).
|
||||
|
||||
"""
|
||||
if os.path.exists('/var/run/slapd/ldapi'):
|
||||
ro_uri = 'ldapi://%2fvar%2frun%2fslapd%2fldapi/'
|
||||
auth_dn = ""
|
||||
auth_pw = ""
|
||||
elif os.path.exists('/var/run/ldapi'):
|
||||
ro_uri = 'ldapi://%2fvar%2frun%2fldapi/'
|
||||
auth_dn = ""
|
||||
auth_pw = ""
|
||||
else:
|
||||
secrets = import_secrets()
|
||||
ro_uri = 'ldap://127.0.0.1'
|
||||
auth_dn = secrets.ldap_readonly_auth_dn
|
||||
auth_pw = secrets.ldap_readonly_password
|
||||
kwargs["uri"] = ro_uri
|
||||
kwargs["dn"] = auth_dn
|
||||
kwargs["cred"] = auth_pw
|
||||
kwargs.setdefault("user", current_user)
|
||||
return module_qui_a_le_meme_nom_que_sa_classe_principale.lc_ldap(*args, **kwargs)
|
Loading…
Add table
Add a link
Reference in a new issue