* Correction de plusieurs bugs, on peut théoriquement créer des machines
Mais il faut éviter, parce qu'elles peuvent prendre des ip en .0 ou .255 Il reste quelques détails genre 'historique' et 'ouverture de ports' à régler...
This commit is contained in:
parent
e3e0485045
commit
18571ae112
3 changed files with 42 additions and 15 deletions
23
lc_ldap.py
23
lc_ldap.py
|
@ -258,19 +258,22 @@ class lc_ldap(ldap.ldapobject.LDAPObject):
|
|||
|
||||
else: raise ValueError("Realm inconnu: %r" % realm)
|
||||
|
||||
# On récupère la plage des mids
|
||||
plage = xrange( *(config.rid[realm]))
|
||||
# On récupère le premier id libre dans la plages s'il n'est pas
|
||||
# déjà précisé dans le ldiff
|
||||
rid = uldif.setdefault('rid', [ unicode(self._find_id('rid', plage)) ])
|
||||
|
||||
# La machine peut-elle avoir une ipv4 ?
|
||||
if 'v6' not in realm:
|
||||
uldif['ipHostNumber'] = [ unicode(crans_utils.ip4_of_rid(rid[0])) ]
|
||||
uldif['ip6HostNumber'] = [ unicode(crans_utils.ip6_of_mac(uldif['macAddress'][0], rid[0])) ]
|
||||
uldif['ipHostNumber'] = [ unicode(crans_utils.ip4_of_rid(int(rid[0]))) ]
|
||||
uldif['ip6HostNumber'] = [ unicode(crans_utils.ip6_of_mac(uldif['macAddress'][0], int(rid[0]))) ]
|
||||
|
||||
# Mid
|
||||
uldif['mid'] = [ unicode(self._find_id('mid')) ]
|
||||
|
||||
# On récupère la plage des mids
|
||||
plage = xrange( *(config.rid[realm]))
|
||||
# Tout doit disparaître !!
|
||||
machine = self._create_entity('mid=%s,%s' % (mid[0], parent), uldif)
|
||||
machine = self._create_entity('mid=%s,%s' % (uldif['mid'][0], parent), uldif)
|
||||
if machine.may_be(created, self.droits + self._is_parent(machine)):
|
||||
machine.create()
|
||||
else:
|
||||
|
@ -483,7 +486,7 @@ class CransLdapObject(object):
|
|||
# Création de la requête LDAP
|
||||
modlist = addModlist(cldif_to_ldif(self.attrs))
|
||||
# Requête LDAP de création de l'objet
|
||||
self.add_s(self.dn, modlist)
|
||||
self.conn.add_s(self.dn, modlist)
|
||||
|
||||
|
||||
def save(self):
|
||||
|
@ -513,12 +516,14 @@ class CransLdapObject(object):
|
|||
if differences:
|
||||
raise EnvironmentError("Les modifications apportées à l'objet %s n'ont pas été correctement sauvegardées\n%s" % (self.dn, differences))
|
||||
|
||||
def may_be(self, what, obj):
|
||||
"""Teste si celui qui est bindé peut effectuer ce qui est dans what, pour
|
||||
def may_be(self, what, liste):
|
||||
"""Teste si liste peut faire ce qui est dans what, pour
|
||||
what élément de {create, delete, modify}.
|
||||
On passe une liste de droits plutôt que l'objet car il faut ajouter
|
||||
les droits soi et parent.
|
||||
Retourne un booléen
|
||||
"""
|
||||
if set(obj.droits).intersection(self.can_be_by[what]) != set([]):
|
||||
if set(liste).intersection(self.can_be_by[what]) != set([]):
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue