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] can_modify = [nounou]
def parse_value(self, ip, ldif): 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) self.value = netaddr.ip.IPAddress(ip)
def __unicode__(self): def __unicode__(self):
@ -506,7 +506,7 @@ class rid(Attr):
# On veut éviter les rid qui recoupent les ipv4 finissant par # On veut éviter les rid qui recoupent les ipv4 finissant par
# .0 ou .255 # .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: for plage in plages:
if rid in plage: 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. Cette fonction retourne l'ip de début de ce sous-réseau.
""" """
# Au cas où
rid = int(rid) rid = int(rid)
for net, plage in config.rid.items(): 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. 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(): for net, plage in config.rid.items():
if rid >= plage[0] and rid <= plage[1]: 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 ] ldif[attr] = [ str(val) for val in vals ]
return ldif return ldif
def lc_ldap_test(): def lc_ldap_test():
"""Binding LDAP à la base de tests""" """Binding LDAP à la base de tests"""
return lc_ldap(uri='ldap://vo.adm.crans.org',dn='cn=admin,dc=crans,dc=org', cred='75bdb64f32') 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() secrets = import_secrets()
return lc_ldap(uri='ldap://ldap.adm.crans.org/', dn=secrets.ldap_auth_dn, cred=secrets.ldap_password) 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):
"""Connexion à la base ldap crans, chaque instance représente une connexion """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')) ]) aid = uldif.setdefault('aid', [ unicode(self._find_id('aid')) ])
uldif['objectClass'] = [u'adherent'] uldif['objectClass'] = [u'adherent']
adherent = self._create_entity('aid=%s,%s' % (aid[0], base_dn), uldif) 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() adherent.create()
else: else:
raise EnvironmentError("Vous n'avez pas le droit de créer cet adhérent.") 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')) ]) cid = uldif.setdefault('cid', [ unicode(self._find_id('cid')) ])
uldif['objectClass'] = [u'club'] uldif['objectClass'] = [u'club']
club = self._create_entity('cid=%s,%s' % (cid[0], base_dn), uldif) 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() club.create()
else: else:
raise EnvironmentError("Vous n'avez pas le droit de créer cet adhérent.") 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: if i in nonfree:
continue continue
else: 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: if my_id.value != i:
continue continue
else: else:
@ -388,6 +405,7 @@ class CransLdapObject(object):
"""Classe de base des objets CransLdap. """Classe de base des objets CransLdap.
Cette classe ne devrait pas être utilisée directement.""" Cette classe ne devrait pas être utilisée directement."""
""" Qui peut faire quoi ? """
can_be_by = { created: [nounou], can_be_by = { created: [nounou],
modified: [nounou], modified: [nounou],
deleted: [nounou], deleted: [nounou],