[lc_ldap] Maintenant on peut se connecter à la base de test *et* à la vraie base.
This commit is contained in:
parent
129c4593b5
commit
42ebecd9ca
1 changed files with 21 additions and 6 deletions
27
lc_ldap.py
27
lc_ldap.py
|
@ -43,10 +43,17 @@ import config, crans_utils
|
||||||
from attributs import attrify, blacklist
|
from attributs import attrify, blacklist
|
||||||
from ldap_locks import CransLock
|
from ldap_locks import CransLock
|
||||||
|
|
||||||
uri = 'ldapi:///' #'ldap://ldap.adm.crans.org/'
|
uri = 'ldap://ldap.adm.crans.org/'
|
||||||
base_dn = 'ou=data,dc=crans,dc=org'
|
base_dn = 'ou=data,dc=crans,dc=org'
|
||||||
log_dn = "cn=log"
|
log_dn = "cn=log"
|
||||||
|
|
||||||
|
# Quand on a besoin du fichier de secrets
|
||||||
|
def import_secrets():
|
||||||
|
if not "/etc/crans/secrets/" in sys.path:
|
||||||
|
sys.path.append("/etc/crans/secrets/")
|
||||||
|
import secrets
|
||||||
|
return secrets
|
||||||
|
|
||||||
# Champs à ignorer dans l'historique
|
# Champs à ignorer dans l'historique
|
||||||
HIST_IGNORE_FIELDS = ["modifiersName", "entryCSN", "modifyTimestamp", "historique"]
|
HIST_IGNORE_FIELDS = ["modifiersName", "entryCSN", "modifyTimestamp", "historique"]
|
||||||
|
|
||||||
|
@ -79,7 +86,7 @@ def lc_ldap_test():
|
||||||
return lc_ldap(uri='ldap://vo.adm.crans.org',dn='cn=admin,dc=crans,dc=org', cred='75bdb64f32')
|
return lc_ldap(uri='ldap://vo.adm.crans.org',dn='cn=admin,dc=crans,dc=org', cred='75bdb64f32')
|
||||||
|
|
||||||
def lc_ldap_admin():
|
def lc_ldap_admin():
|
||||||
"""Binding LDAP à la vraie vase, en admin.
|
"""Binding LDAP à la vraie base, en admin.
|
||||||
Possible seulement si on peut lire secrets.py"""
|
Possible seulement si on peut lire secrets.py"""
|
||||||
secrets = import_secrets()
|
secrets = import_secrets()
|
||||||
return lc_ldap(uri='ldap://ldap.adm.crans.org/', dn=secrets.ldap_auth_dn, cred=secrets.ldap_password)
|
return lc_ldap(uri='ldap://ldap.adm.crans.org/', dn=secrets.ldap_auth_dn, cred=secrets.ldap_password)
|
||||||
|
@ -87,23 +94,31 @@ def lc_ldap_admin():
|
||||||
class lc_ldap(ldap.ldapobject.LDAPObject):
|
class lc_ldap(ldap.ldapobject.LDAPObject):
|
||||||
"""Connexion à la base ldap crans, chaque instance représente une connexion
|
"""Connexion à la base ldap crans, chaque instance représente une connexion
|
||||||
"""
|
"""
|
||||||
def __init__(self, dn=None, user=None, cred=None, uri=uri):
|
def __init__(self, dn=None, user=None, cred=None, uri=uri, test=False):
|
||||||
"""Initialise la connexion ldap,
|
"""Initialise la connexion ldap,
|
||||||
- En authentifiant avec dn et cred s'ils sont précisés
|
- En authentifiant avec dn et cred s'ils sont précisés
|
||||||
- Si dn n'est pas précisé, mais que user est précisé, récupère
|
- Si dn n'est pas précisé, mais que user est précisé, récupère
|
||||||
le dn associé à l'uid user, et effectue l'authentification
|
le dn associé à l'uid user, et effectue l'authentification
|
||||||
avec ce dn et cred
|
avec ce dn et cred
|
||||||
- Sinon effectue une authentification anonyme
|
- Sinon effectue une authentification anonyme
|
||||||
|
Si test est à True, on se connecte à la base de test sur vo.
|
||||||
"""
|
"""
|
||||||
|
if test:
|
||||||
|
uri = "ldapi:///"
|
||||||
ldap.ldapobject.LDAPObject.__init__(self, uri)
|
ldap.ldapobject.LDAPObject.__init__(self, uri)
|
||||||
|
|
||||||
if user and not re.match('[a-z_][a-z0-9_-]*', user):
|
if user and not re.match('[a-z_][a-z0-9_-]*', user):
|
||||||
raise ValueError('Invalid user name: %s' % user)
|
raise ValueError('Invalid user name: %s' % user)
|
||||||
|
|
||||||
# Si un username, on récupère le dn associé
|
# Si un username, on récupère le dn associé…
|
||||||
if user and not dn:
|
if user and not dn:
|
||||||
self.simple_bind_s(base_dn)
|
if test:
|
||||||
|
# …en anonyme si on se connecte à la base de test
|
||||||
|
self.simple_bind_s(base_dn)
|
||||||
|
else:
|
||||||
|
# …sinon, en se connectant en readonly (on récupère les identifiants dans secrets.py)
|
||||||
|
secrets = import_secrets()
|
||||||
|
self.simple_bind_s(who=secrets.ldap_readonly_auth_dn, cred=secrets.ldap_readonly_password)
|
||||||
res = self.search_s(base_dn, 1, 'uid=%s' % user)
|
res = self.search_s(base_dn, 1, 'uid=%s' % user)
|
||||||
if len(res) < 1:
|
if len(res) < 1:
|
||||||
raise ldap.INVALID_CREDENTIALS({'desc': 'No such user: %s' % user })
|
raise ldap.INVALID_CREDENTIALS({'desc': 'No such user: %s' % user })
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue