Dplacement de la mthode ipsec.

Il ne faut plus utiliser m.ipsec() pour dterminer si m est une machine
wifi.

darcs-hash:20060313161212-68412-c18bb0100a5d2bc06988d8a19302616405364aca.gz
This commit is contained in:
glondu 2006-03-13 17:12:12 +01:00
parent 9cc6478e4e
commit 858702f0b2
4 changed files with 62 additions and 59 deletions

View file

@ -723,6 +723,8 @@ class crans_ldap:
# Croisement
bons_dn = [] # liste des dn d'adhérents qui correspondent aux critères
for i in 'adherent', 'club':
if r[i] == None:
continue
for a in r[i]:
if a[0] in mach_adh and not a[0] in bons_dn:
bons_dn.append(a[0])
@ -731,6 +733,8 @@ class crans_ldap:
# Maintenant c'est au tour des bonnes machines
bons_dn2 = []
for i in 'machineFixe', 'machineWifi':
if r[i] == None:
continue
for a in r[i]:
dn = string.join(a[0].split(',')[-4:], ',')
if dn in bons_dn and not a[0] in bons_dn2:
@ -1270,27 +1274,24 @@ class base_proprietaire(base_classes_crans):
def machines(self):
""" Retourne les machines (instances) appartenant à la classe """
if self.id():
res = []
try:
for r in self.conn.search_s('%s=%s,%s' % ( self.idn,self.id() , self.base_dn ),1,'objectClass=machine'):
if r[1].has_key('puissance'):
res.append(BorneWifi(r, self._modifiable, self.conn))
else:
res.append(Machine(r, self._modifiable, self.conn))
return res
except:
return []
else:
return []
res = []
for r in self.conn.search_s('%s=%s,%s' % (self.idn, self.id(), self.base_dn), 1, Machine.filtre_idn):
res.append(self.make(r, self._modifiable))
return res
def machines_fixes(self):
""" Retourne les machines fixes appartenant à l'instance """
return filter(lambda x: not x.ipsec(), self.machines())
res = []
for r in self.conn.search_s('%s=%s,%s' % (self.idn, self.id(), self.base_dn), 1, 'objectClass=machineFixe'):
res.append(self.make(r, self._modifiable))
return res
def machines_wifi(self):
""" Retourne les machines wifi appartenant à l'instance """
return filter(lambda x: x.ipsec(), self.machines())
res = []
for r in self.conn.search_s('%s=%s,%s' % (self.idn, self.id(), self.base_dn), 1, 'objectClass=machineWifi'):
res.append(self.make(r, self._modifiable))
return res
def solde(self, operation=None, comment=None):
""" Retourne ou modifie le solde d'un propriétaire
@ -1426,16 +1427,14 @@ class base_proprietaire(base_classes_crans):
"""
# Note: un peu trop de fonctions pour un club mais ce n'est pas génant
ret =''
ret = ''
if self._init_data:
nouveau =0
nouveau = 0
# Reconfiguration switch si changement de chambre et si machine fixe
if 'chbre' in self.modifs:
for m in self.machines():
if not m.ipsec():
self.services_to_restart('switch',[self._data['chbre'][0]])
self.services_to_restart('switch',[self._init_data.get('chbre','')[0]])
break
if self.machines_fixe():
self.services_to_restart('switch', [self._data['chbre'][0]])
self.services_to_restart('switch', [self._init_data.get('chbre', '')[0]])
else:
nouveau = 1
@ -1466,7 +1465,7 @@ class base_proprietaire(base_classes_crans):
for m in self.machines():
self.services_to_restart('macip',[m.ip()] )
self.services_to_restart('dns')
if m.ipsec():
if isinstance(m, MachineWifi):
self.services_to_restart('conf_wifi_ng')
self.services_to_restart('ragnarok-dhcp')
else:
@ -1478,7 +1477,7 @@ class base_proprietaire(base_classes_crans):
# Verif si machines avec bonnes ip
err = 0
for m in self.machines():
if m.ipsec():
if isinstance(m, MachineWifi):
# Machine Wifi
continue
# Machine fixe
@ -1621,7 +1620,7 @@ class adherent(base_proprietaire):
# N'est pas ou plus sur le campus
# Machine fixe ?
# for m in self.machines():
# if not m.ipsec():
# if not isinstance(m, MachineWifi):
# raise ValueError(u'Un adhérent en dehors du campus ne doit pas avoir de machine fixe.')
self._set('chbre',['EXT'])
@ -2179,7 +2178,7 @@ class Machine(base_classes_crans):
if typ == 'wifi':
# Génération de la clef IPsec
self.ipsec(1)
self.ipsec(True)
else:
raise TypeError(u'Arguments invalides')
@ -2493,26 +2492,6 @@ class Machine(base_classes_crans):
return self.__proprietaire
def ipsec(self, clef=0):
""" Génération (clef=1) ou affichage de la clef IPsec de la machine
Si clef!=1: prend la clef fournie.
"""
if self.__typ != 'wifi': return None
if not clef:
return decode(self._data.get('ipsec',[''])[0])
if clef == 1:
# Génération
clef = ''
for i in range(22):
clef += random.choice(filter(lambda x: x != 'l' and x != 'o', string.lowercase) +
filter(lambda x: x != '1' and x != '0', string.digits))
self._set('ipsec',[clef])
return clef
def save(self):
"""
Enregistre la machine courante dans la base LDAP
@ -2542,7 +2521,7 @@ class Machine(base_classes_crans):
# Clef IPsec
if 'ipsec' in self.modifs:
ret += coul(u'Clef IPsec de la machine : %s\n' % self.ipsec(),'cyan')
ret += coul(u'Clef IPsec de la machine : %s\n' % self.ipsec(), 'cyan')
self.services_to_restart('conf_wifi_ng')
# Reconfiguration firewalls et dhcps
@ -2654,6 +2633,7 @@ class MachineFixe(Machine):
def __init__(self, parent_or_tuple, typ='fixe', conn=None):
Machine.__init__(self, parent_or_tuple, typ, conn)
class MachineWifi(Machine):
""" Classe de définition d'une machine wifi """
objectClass = "machineWifi"
@ -2661,6 +2641,26 @@ class MachineWifi(Machine):
def __init__(self, parent_or_tuple, typ='wifi', conn=None):
Machine.__init__(self, parent_or_tuple, typ, conn)
def ipsec(self, clef=None):
"""
Affichage (clef=None), génération (clef=True) ou définition de la clef IPsec
de la machine. Si clef différent de True et None: prend la clef fournie.
"""
if clef == None:
return decode(self._data.get('ipsec', [''])[0])
if clef == True:
# Génération
clef = ''
for i in range(22):
clef += random.choice(filter(lambda x: x != 'l' and x != 'o', string.lowercase) +
filter(lambda x: x != '1' and x != '0', string.digits))
self._set('ipsec', [clef])
return clef
class MachineCrans(Machine):
""" Classe de définition d'une machine du Crans """
objectClass = "machineCrans"