[lc_ldap] Creation de machines, sanity checks

This commit is contained in:
Antoine Durand-Gasselin 2010-08-26 14:00:22 +00:00
parent 22a8e3be78
commit db8b27e6a5
2 changed files with 40 additions and 92 deletions

View file

@ -102,8 +102,8 @@ class lc_ldap(ldap.ldapobject.LDAPObject):
else:
self.conn = self.simple_bind_s()
def search(self, filter, mode='ro', dn= base_dn, scope= 2, sizelimit=400):
res = self.search_ext_s(dn, scope, filter, sizelimit=sizelimit)
def search(self, filterstr, mode='ro', dn= base_dn, scope= 2, sizelimit=400):
res = self.search_ext_s(dn, scope, filterstr, sizelimit=sizelimit)
return [ CransLdapObject(self, r[0], mode=mode) for r in res ]
def allMachines(self):
@ -122,13 +122,41 @@ class lc_ldap(ldap.ldapobject.LDAPObject):
return machines
def newMachine(self, parent, realm, uldif):
"""Crée une nouvelle machine"""
raise NotImplementedError()
"""Crée une nouvelle machine: realm peut être:
adm, serveurs, bornes, wifi, adherents, gratuit ou personnel-ens"""
owner = self.search('objectClass=*', dn=parent, scope=0)[0]
if realm in ["adm", "serveurs"]:
uldif['objectClass'] = [u'machineCrans']
assert isinstance(owner, AssociationCrans)
# XXX - Vérifier les droits
elif realm == "bornes":
uldif['objectClass'] = [u'borneWifi']
assert isinstance(owner, AssociationCrans)
# XXX - Vérifier les droits
elif realm in ["wifi", "wifi-adh"]:
uldif['objectClass'] = [u'machineWifi']
realm = "wifi-adh"
assert isinstance(owner, adherent) or isinstance(owner, club)
# XXX - Vérifier les droits (owner.type_connexion)
elif realm in ["adherent", "gratuit", "personnel-ens"]:
uldif['objectClass'] = [u'machineFixe']
assert isinstance(owner, adherent) or isinstance(owner, club)
# XXX - Vérifier les droits
else: raise ValueError("Realm inconnu: %s" % realm)
plage = config.NETs[realm]
mid = uldif.setdefault('mid', [ unicode(self._find_id('mid', plage)) ])
return self._create_entity('mid=%s,%s' % (aid[0], parent), uldif)
def newAdherent(self, uldif):
"""Crée un nouvel adhérent"""
aid = uldif.setdefault('aid', [ unicode(self._find_id('aid')) ])
# XXX - autres tests
uldif['objectClass'] = [u'adherent']
return self._create_entity('aid=%s,%s' % (aid[0], base_dn), uldif)
def newClub(self, uldif):
@ -142,13 +170,15 @@ class lc_ldap(ldap.ldapobject.LDAPObject):
def _create_entity(self, dn, uldif):
'''Crée une nouvelle entité ldap en dn, avec attributs ldif:
uniquement en unicode'''
for attr, vals in uldif:
nuldiff = self.normalize_and_validate(attr, vals)
lock = CransLock(self)
for item in ['aid', 'uid', 'chbre', 'mailAlias', 'canonicalAlias',
'fid', 'cid', 'mid', 'macAddress', 'host', 'hostAlias' ]:
for val in uldif.get(item, []):
for val in nuldif.get(item, []):
lock.add(item, val)
#uldif['historique'] = [ self._hist('Création')]
ldif = uldif_to_ldif(uldif)
ldif = uldif_to_ldif(nuldif)
modlist = addModlist(ldif)
with lock:
# print dn, modlist
@ -223,7 +253,7 @@ class CransLdapObject:
histo = self._gen_hist(self._modifs)
self._modifs['historique'] += histo
for attr, vals in self._modifs.items:
self._modifs[attr] = self.validate_and_normalize(attr, vals)
self._modifs[attr] = self.normalize_and_validate(attr, vals)
# On récupère la liste des modifications
modlist = self.get_modlist()