Merge branch 'master' of git.crans.org:/git/ldap
This commit is contained in:
commit
b45c791c19
3 changed files with 35 additions and 14 deletions
42
lc_ldap.py
42
lc_ldap.py
|
@ -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],
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue