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
75
lc_ldap.py
75
lc_ldap.py
|
@ -64,6 +64,7 @@ from ldap_locks import CransLock
|
||||||
uri = '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"
|
||||||
|
admin_dn = "cn=admin,dc=crans,dc=org"
|
||||||
|
|
||||||
# Protection contre les typos
|
# Protection contre les typos
|
||||||
created = 'created'
|
created = 'created'
|
||||||
|
@ -121,35 +122,7 @@ def cldif_to_ldif(cldif):
|
||||||
ldif[attr] = [ str(val) for val in vals ]
|
ldif[attr] = [ str(val) for val in vals ]
|
||||||
return ldif
|
return ldif
|
||||||
|
|
||||||
def lc_ldap_test():
|
class lc_ldap(ldap.ldapobject.LDAPObject, object):
|
||||||
"""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):
|
|
||||||
"""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, test=False):
|
def __init__(self, dn=None, user=None, cred=None, uri=uri, test=False):
|
||||||
|
@ -170,11 +143,6 @@ class lc_ldap(ldap.ldapobject.LDAPObject):
|
||||||
|
|
||||||
# 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:
|
||||||
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()
|
secrets = import_secrets()
|
||||||
self.simple_bind_s(who=secrets.ldap_readonly_auth_dn, cred=secrets.ldap_readonly_password)
|
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)
|
||||||
|
@ -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
|
# Si on a un dn, on se connecte avec à la base ldap sinon on s'y
|
||||||
# connecte en anonyme
|
# connecte en anonyme
|
||||||
if dn:
|
if dn:
|
||||||
secrets = import_secrets()
|
#secrets = import_secrets()
|
||||||
self.conn = self.bind_s(secrets.ldap_auth_dn, secrets.ldap_password)
|
self.conn = self.bind_s(dn, cred)
|
||||||
self.dn = dn
|
self.dn = dn
|
||||||
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 == secrets.ldap_auth_dn:
|
if dn == admin_dn:
|
||||||
self.droits += [nounou]
|
self.droits += [nounou]
|
||||||
else:
|
else:
|
||||||
self.conn = self.simple_bind_s()
|
self.conn = self.simple_bind_s()
|
||||||
|
@ -381,6 +349,39 @@ class lc_ldap(ldap.ldapobject.LDAPObject):
|
||||||
return []
|
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):
|
def new_cransldapobject(conn, dn, mode='ro', ldif = None):
|
||||||
"""Crée un objet CransLdap en utilisant la classe correspondant à
|
"""Crée un objet CransLdap en utilisant la classe correspondant à
|
||||||
l'objectClass du ldif
|
l'objectClass du ldif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue