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
|
@ -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:
|
||||||
|
|
|
@ -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]:
|
||||||
|
|
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 ]
|
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
|
||||||
|
@ -206,15 +222,15 @@ class lc_ldap(ldap.ldapobject.LDAPObject):
|
||||||
m = new_cransldapobject(self, dn, ldif = attrs)
|
m = new_cransldapobject(self, dn, ldif = attrs)
|
||||||
parent_dn = dn.split(',', 1)[1]
|
parent_dn = dn.split(',', 1)[1]
|
||||||
if not machines.has_key(parent_dn):
|
if not machines.has_key(parent_dn):
|
||||||
machines[parent_dn]=[]
|
machines[parent_dn] = []
|
||||||
machines[parent_dn].append(m)
|
machines[parent_dn].append(m)
|
||||||
elif (dn.startswith('aid=') or dn.startswith('cid=') or dn==base_dn) and not parent.has_key(dn):
|
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)
|
parent[dn] = new_cransldapobject(self, dn, ldif = attrs)
|
||||||
allmachines=[]
|
allmachines = []
|
||||||
for dn,mlist in machines.items(): # on associe propriétaires et machines
|
for dn,mlist in machines.items(): # on associe propriétaires et machines
|
||||||
parent[dn]._machines=mlist
|
parent[dn]._machines = mlist
|
||||||
for m in mlist:
|
for m in mlist:
|
||||||
m._proprio=parent[dn]
|
m._proprio = parent[dn]
|
||||||
allmachines.append(m)
|
allmachines.append(m)
|
||||||
return allmachines,parent.values() # on renvoie la liste des machines et des adherents (dont club et crans)
|
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
|
s'éxécuter le plus rapidement possible. On dumpe malgré tout
|
||||||
toute la base, c'est pour pouvoir aussi rajouter à moindre coût
|
toute la base, c'est pour pouvoir aussi rajouter à moindre coût
|
||||||
les propriétaires."""
|
les propriétaires."""
|
||||||
machines,_=self.allMachinesAdherents()
|
machines,_ = self.allMachinesAdherents()
|
||||||
return machines
|
return machines
|
||||||
|
|
||||||
def allAdherents(self):
|
def allAdherents(self):
|
||||||
|
@ -231,7 +247,7 @@ class lc_ldap(ldap.ldapobject.LDAPObject):
|
||||||
s'éxécuter le plus rapidement possible. On dumpe malgré tout
|
s'éxécuter le plus rapidement possible. On dumpe malgré tout
|
||||||
toute la base, c'est pour pouvoir aussi rajouter à moindre coût
|
toute la base, c'est pour pouvoir aussi rajouter à moindre coût
|
||||||
les machines."""
|
les machines."""
|
||||||
_,adherents=self.allMachinesAdherents()
|
_,adherents = self.allMachinesAdherents()
|
||||||
return adherents
|
return adherents
|
||||||
|
|
||||||
def newMachine(self, parent, realm, uldif):
|
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')) ])
|
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],
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue