Merge branch 'master' of git.crans.org:/git/ldap

This commit is contained in:
Pierre-Elliott Bécue 2013-02-14 16:38:37 +01:00
commit b45c791c19
3 changed files with 35 additions and 14 deletions

View file

@ -121,7 +121,6 @@ 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')
@ -132,6 +131,23 @@ def lc_ldap_admin():
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
@ -206,15 +222,15 @@ class lc_ldap(ldap.ldapobject.LDAPObject):
m = new_cransldapobject(self, dn, ldif = attrs)
parent_dn = dn.split(',', 1)[1]
if not machines.has_key(parent_dn):
machines[parent_dn]=[]
machines[parent_dn] = []
machines[parent_dn].append(m)
elif (dn.startswith('aid=') or dn.startswith('cid=') or dn==base_dn) and not parent.has_key(dn):
parent[dn]=new_cransldapobject(self, dn, ldif = attrs)
allmachines=[]
elif (dn.startswith('aid=') or dn.startswith('cid=') or dn == base_dn) and not parent.has_key(dn):
parent[dn] = new_cransldapobject(self, dn, ldif = attrs)
allmachines = []
for dn,mlist in machines.items(): # on associe propriétaires et machines
parent[dn]._machines=mlist
parent[dn]._machines = mlist
for m in mlist:
m._proprio=parent[dn]
m._proprio = parent[dn]
allmachines.append(m)
return allmachines,parent.values() # on renvoie la liste des machines et des adherents (dont club et crans)
@ -223,7 +239,7 @@ class lc_ldap(ldap.ldapobject.LDAPObject):
s'éxécuter le plus rapidement possible. On dumpe malgré tout
toute la base, c'est pour pouvoir aussi rajouter à moindre coût
les propriétaires."""
machines,_=self.allMachinesAdherents()
machines,_ = self.allMachinesAdherents()
return machines
def allAdherents(self):
@ -231,7 +247,7 @@ class lc_ldap(ldap.ldapobject.LDAPObject):
s'éxécuter le plus rapidement possible. On dumpe malgré tout
toute la base, c'est pour pouvoir aussi rajouter à moindre coût
les machines."""
_,adherents=self.allMachinesAdherents()
_,adherents = self.allMachinesAdherents()
return adherents
def newMachine(self, parent, realm, uldif):
@ -285,7 +301,7 @@ class lc_ldap(ldap.ldapobject.LDAPObject):
aid = uldif.setdefault('aid', [ unicode(self._find_id('aid')) ])
uldif['objectClass'] = [u'adherent']
adherent = self._create_entity('aid=%s,%s' % (aid[0], base_dn), uldif)
if adherent.may_be(created, self):
if adherent.may_be(created, self.droits):
adherent.create()
else:
raise EnvironmentError("Vous n'avez pas le droit de créer cet adhérent.")
@ -295,7 +311,7 @@ class lc_ldap(ldap.ldapobject.LDAPObject):
cid = uldif.setdefault('cid', [ unicode(self._find_id('cid')) ])
uldif['objectClass'] = [u'club']
club = self._create_entity('cid=%s,%s' % (cid[0], base_dn), uldif)
if club.may_be(created, self):
if club.may_be(created, self.droits):
club.create()
else:
raise EnvironmentError("Vous n'avez pas le droit de créer cet adhérent.")
@ -327,7 +343,8 @@ class lc_ldap(ldap.ldapobject.LDAPObject):
if i in nonfree:
continue
else:
my_id = attrify(i, attr, self, True)
# On crée l'attribut associé, pour parser sa valeur.
my_id = attrify(unicode(i), attr, {}, self, False)
if my_id.value != i:
continue
else:
@ -388,6 +405,7 @@ class CransLdapObject(object):
"""Classe de base des objets CransLdap.
Cette classe ne devrait pas être utilisée directement."""
""" Qui peut faire quoi ? """
can_be_by = { created: [nounou],
modified: [nounou],
deleted: [nounou],