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

@ -474,7 +474,7 @@ class ip6HostNumber(Attr):
can_modify = [nounou]
def parse_value(self, ip, ldif):
ip = ip6_of_mac(ldif['macAddress'][0], ldif['rid'][0])
ip = ip6_of_mac(ldif['macAddress'][0], int(ldif['rid'][0]))
self.value = netaddr.ip.IPAddress(ip)
def __unicode__(self):
@ -506,7 +506,7 @@ class rid(Attr):
# On veut éviter les rid qui recoupent les ipv4 finissant par
# .0 ou .255
plages = [xrange(rid[a][0], rid[a][1]+1) for a in rid.keys() if 'v6' not in a]
plages = [xrange(config.rid[a][0], config.rid[a][1]+1) for a in config.rid.keys() if ('v6' not in a) and ('special' not in a)]
for plage in plages:
if rid in plage:

View file

@ -60,6 +60,7 @@ def prefixev6_of_rid(rid):
Cette fonction retourne l'ip de début de ce sous-réseau.
"""
# Au cas où
rid = int(rid)
for net, plage in config.rid.items():
@ -75,6 +76,8 @@ def ip6_of_mac(mac, rid):
"""
Retourne la bonne ipv6 de la machine en fonction de sa mac et de son rid.
"""
# Au cas où
rid = int(rid)
for net, plage in config.rid.items():
if rid >= plage[0] and rid <= plage[1]:

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
@ -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],