Surcharges diverses de la classe lc_ldap plutôt que des fonctions. + Réparation de la connexion à la base de test.
This commit is contained in:
parent
8814ddd1e7
commit
8572d8e2e7
1 changed files with 40 additions and 39 deletions
79
lc_ldap.py
79
lc_ldap.py
|
@ -64,6 +64,7 @@ from ldap_locks import CransLock
|
|||
uri = 'ldap://ldap.adm.crans.org/'
|
||||
base_dn = 'ou=data,dc=crans,dc=org'
|
||||
log_dn = "cn=log"
|
||||
admin_dn = "cn=admin,dc=crans,dc=org"
|
||||
|
||||
# Protection contre les typos
|
||||
created = 'created'
|
||||
|
@ -121,35 +122,7 @@ def cldif_to_ldif(cldif):
|
|||
ldif[attr] = [ str(val) for val in vals ]
|
||||
return ldif
|
||||
|
||||
def lc_ldap_test():
|
||||
"""Binding LDAP à la base de tests"""
|
||||
return lc_ldap(uri='ldap://vo.adm.crans.org',dn='cn=admin,dc=crans,dc=org', cred='75bdb64f32')
|
||||
|
||||
def lc_ldap_admin():
|
||||
"""Binding LDAP à la vraie base, en admin.
|
||||
Possible seulement si on peut lire secrets.py"""
|
||||
secrets = import_secrets()
|
||||
return lc_ldap(uri='ldap://ldap.adm.crans.org/', dn=secrets.ldap_auth_dn, cred=secrets.ldap_password)
|
||||
|
||||
def lc_ldap_self():
|
||||
"""Binding 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."""
|
||||
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
|
||||
|
||||
return lc_ldap(uri=ro_uri, dn=auth_dn, cred=auth_pw)
|
||||
|
||||
class lc_ldap(ldap.ldapobject.LDAPObject):
|
||||
class lc_ldap(ldap.ldapobject.LDAPObject, object):
|
||||
"""Connexion à la base ldap crans, chaque instance représente une connexion
|
||||
"""
|
||||
def __init__(self, dn=None, user=None, cred=None, uri=uri, test=False):
|
||||
|
@ -170,13 +143,8 @@ class lc_ldap(ldap.ldapobject.LDAPObject):
|
|||
|
||||
# Si un username, on récupère le dn associé…
|
||||
if user and not 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)
|
||||
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)
|
||||
if len(res) < 1:
|
||||
raise ldap.INVALID_CREDENTIALS({'desc': 'No such user: %s' % user })
|
||||
|
@ -188,11 +156,11 @@ class lc_ldap(ldap.ldapobject.LDAPObject):
|
|||
# Si on a un dn, on se connecte avec à la base ldap sinon on s'y
|
||||
# connecte en anonyme
|
||||
if dn:
|
||||
secrets = import_secrets()
|
||||
self.conn = self.bind_s(secrets.ldap_auth_dn, secrets.ldap_password)
|
||||
#secrets = import_secrets()
|
||||
self.conn = self.bind_s(dn, cred)
|
||||
self.dn = dn
|
||||
self.droits = self.search_s(dn, ldap.SCOPE_BASE, attrlist=['droits'])[0][1].get('droits', [])
|
||||
if dn == secrets.ldap_auth_dn:
|
||||
if dn == admin_dn:
|
||||
self.droits += [nounou]
|
||||
else:
|
||||
self.conn = self.simple_bind_s()
|
||||
|
@ -381,6 +349,39 @@ class lc_ldap(ldap.ldapobject.LDAPObject):
|
|||
return []
|
||||
|
||||
|
||||
class lc_ldap_test(lc_ldap):
|
||||
"""Connexion LDAP à la base de tests"""
|
||||
def __init__(self, *args, **kwargs):
|
||||
"""Oui, je droppe les paramètres"""
|
||||
super(lc_ldap_test, self).__init__(uri='ldap://vo.adm.crans.org', dn='cn=admin,dc=crans,dc=org', cred='75bdb64f32')
|
||||
|
||||
class lc_ldap_admin(lc_ldap):
|
||||
"""Connexion LDAP à la vraie base, en admin.
|
||||
Possible seulement si on peut lire secrets.py"""
|
||||
def __init__(self):
|
||||
secrets = import_secrets()
|
||||
super(lc_ldap_admin, self).__init__(uri='ldap://ldap.adm.crans.org/', dn=secrets.ldap_auth_dn, cred=secrets.ldap_password)
|
||||
|
||||
class lc_ldap_local(lc_ldap):
|
||||
"""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."""
|
||||
def __init__(self):
|
||||
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
|
||||
|
||||
super(lc_ldap_local, self).__init__(uri=ro_uri, dn=auth_dn, cred=auth_pw)
|
||||
|
||||
|
||||
def new_cransldapobject(conn, dn, mode='ro', ldif = None):
|
||||
"""Crée un objet CransLdap en utilisant la classe correspondant à
|
||||
l'objectClass du ldif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue