[gest_crans] On répare la méthode de préremplissage, et on corrige des bugs

* La méthode de préremplissage posait des locks, les fonctions affectant
 des valeurs ont désormais un argument lock, par défaut à True, pour
 savoir si elles doivent poser des locks
 * La méthode de préremplissage doit aussi affecter une ip
 * Il y avait un decode de trop dans la gestion des blacklistes
This commit is contained in:
Pierre-Elliott Bécue 2013-10-15 00:44:17 +02:00
parent 673e8266e8
commit 337f4906b6
2 changed files with 39 additions and 25 deletions

View file

@ -1015,7 +1015,7 @@ def set_blackliste(clas):
arg += u'"- pour fin indéterminée" 2 25 "" 0 0 0 0 ' arg += u'"- pour fin indéterminée" 2 25 "" 0 0 0 0 '
arg += u'"Les jours de début et de fin sont inclus." 3 1 "" 0 0 0 0 ' arg += u'"Les jours de début et de fin sont inclus." 3 1 "" 0 0 0 0 '
arg += u'"Sanction : %s" 4 1 "" 0 0 0 0 ' % t[2] arg += u'"Sanction : %s" 4 1 "" 0 0 0 0 ' % t[2]
arg += u'"Commentaire (pas de dollar) : " 5 1 "%s" 6 1 52 0 ' % t[3].decode("utf-8") arg += u'"Commentaire (pas de dollar) : " 5 1 "%s" 6 1 52 0 ' % t[3]
annul, r = dialog(arg) annul, r = dialog(arg)
if annul: return 1 if annul: return 1
@ -1491,13 +1491,18 @@ def set_machine(machine):
# Traitement # Traitement
err = '' err = ''
try: machine.nom(result[0]) try: machine.nom(result[0])
except ValueError, c: err += c.args[0] + '\n' except ValueError, c:
except EnvironmentError, c: err += c.args[0] + '\n' err += c.args[0] + '\n'
except EnvironmentError, c:
err += c.args[0] + '\n'
try: machine.ip(result[2]) try: machine.ip(result[2])
except ValueError, c: err += c.args[0] + '\n' except ValueError, c:
except EnvironmentError, c: err += c.__str__() + '\n' err += c.args[0] + '\n'
except RuntimeError, c: err += c.args[0] + '\n' # Plus d'IP libres, peut-être à traiter differement ? except EnvironmentError, c:
err += c.__str__() + '\n'
except RuntimeError, c:
err += c.args[0] + '\n' # Plus d'IP libres, peut-être à traiter differement ?
try: machine.mac(result[1]) try: machine.mac(result[1])
except ValueError, c: except ValueError, c:
if len(c.args)>1 and c.args[1] == 1 and isadm: if len(c.args)>1 and c.args[1] == 1 and isadm:
@ -1509,8 +1514,10 @@ def set_machine(machine):
return set_machine(machine) return set_machine(machine)
else: else:
try: machine.mac(result[1], 1) try: machine.mac(result[1], 1)
except ValueError, c: err += c.args[0] + '\n' except ValueError, c:
except EnvironmentError, c: err += c.args[0] + '\n' err += c.args[0] + '\n'
except EnvironmentError, c:
err += c.args[0] + '\n'
elif len(c.args)>1 and c.args[1] == 3 and isadm: elif len(c.args)>1 and c.args[1] == 3 and isadm:
# Mac douteuse # Mac douteuse
arg = u'--title "Adresse MAC" ' arg = u'--title "Adresse MAC" '
@ -1520,8 +1527,10 @@ def set_machine(machine):
return set_machine(machine) return set_machine(machine)
else: else:
try: machine.mac(result[1], 1) try: machine.mac(result[1], 1)
except ValueError, c: err += c.args[0] + '\n' except ValueError, c:
except EnvironmentError, c: err += c.args[0] + '\n' err += c.args[0] + '\n'
except EnvironmentError, c:
err += c.args[0] + '\n'
else: else:
try: try:
err += c.args[0] + '\n' err += c.args[0] + '\n'
@ -1529,7 +1538,8 @@ def set_machine(machine):
raise raise
raise Exception("UnicodeDecodeError on %s" % repr(c.args)) raise Exception("UnicodeDecodeError on %s" % repr(c.args))
except EnvironmentError, c: err += c.args[0] + '\n' except EnvironmentError, c:
err += c.args[0] + '\n'
if isadm: if isadm:
try: try:
@ -2224,8 +2234,9 @@ def menu_principal():
#Saisie prédictive de la mac #Saisie prédictive de la mac
try: try:
prise = proprio.chbre().lower()[0] + becane.prise() prise = proprio.chbre().lower()[0] + becane.prise()
becane.ip("<automatique>", lock=False)
f = open('/usr/scripts/var/last_macs/' + prise, 'r') f = open('/usr/scripts/var/last_macs/' + prise, 'r')
becane.mac(f.read()) becane.mac(f.read(), lock=False)
f.close() f.close()
except: except:
pass pass

View file

@ -2823,7 +2823,7 @@ class Machine(BaseClasseCrans):
""" Retourne le nom de la machine """ """ Retourne le nom de la machine """
return self.nom() return self.nom()
def mac(self, mac=None, multi_ok=0): def mac(self, mac=None, multi_ok=0, lock=True):
""" """
Défini ou retourne l'adresse mac de la machine Défini ou retourne l'adresse mac de la machine
Adresse valide si: Adresse valide si:
@ -2867,16 +2867,17 @@ Contactez nounou si la MAC est bien celle d'une carte.""", 3)
raise ValueError(u"Mac déjà utilisée sur le réseau.", 1) raise ValueError(u"Mac déjà utilisée sur le réseau.", 1)
# Lock de la mac # Lock de la mac
if lock:
self.lock('macAddress', mac) self.lock('macAddress', mac)
net = self.netv6() net = self.netv6()
try: try:
self._set('macAddress', [mac]) self._set('macAddress', [mac])
if net.size > 1: if net.size > 1:
self.ipv6(ip6tools.mac_to_ipv6(net, netaddr.EUI(mac))) self.ipv6(ip6tools.mac_to_ipv6(net, netaddr.EUI(mac)), lock)
else: else:
self.ipv6(config.ipv6_machines_speciales[int(self.rid())]) self.ipv6(config.ipv6_machines_speciales[int(self.rid())], lock)
except Exception as e: except Exception as e:
raise ValueError('La correspondance MAC <-> EUID64 a planté. Tapez PEB et son entourage. (net : %s, mac : %s, exception levée : %s)' % (net, mac, e)) raise ValueError('La correspondance MAC <-> EUID64 a plante. Tapez PEB et son entourage. (net : %s, mac : %s, exception levee : %s)' % (net, mac, e))
return mac return mac
def __host_alias(self, champ, new): def __host_alias(self, champ, new):
@ -3029,7 +3030,7 @@ Contactez nounou si la MAC est bien celle d'une carte.""", 3)
self._set('sshFingerprint', liste) self._set('sshFingerprint', liste)
return liste return liste
def ip(self, ip=None): def ip(self, ip=None, lock=True):
""" """
Défini ou retourne l'IP de la machine. Défini ou retourne l'IP de la machine.
Les IP sont stoquées sous forme xxx.xxx.xxx.xxx et doivent être fournies ainsi. Les IP sont stoquées sous forme xxx.xxx.xxx.xxx et doivent être fournies ainsi.
@ -3101,13 +3102,14 @@ Contactez nounou si la MAC est bien celle d'une carte.""", 3)
my_rid = ridtools.Rid(ipv4=ip) my_rid = ridtools.Rid(ipv4=ip)
# Lock ip # Lock ip
if lock:
self.lock('ipHostNumber', ip) self.lock('ipHostNumber', ip)
self._set('ipHostNumber', [ip]) self._set('ipHostNumber', [ip])
self.rid("%d" % my_rid) self.rid("%d" % my_rid, lock=lock)
return ip return ip
def rid(self, rid=None): def rid(self, rid=None, lock=True):
""" """
Retourne le rid si rid == None, l'affecte sinon. Retourne le rid si rid == None, l'affecte sinon.
""" """
@ -3119,6 +3121,7 @@ Contactez nounou si la MAC est bien celle d'une carte.""", 3)
if int(rid_t) != int(rid): if int(rid_t) != int(rid):
raise ValueError('L\'ip et le rid doivent correspondre. rid : %s, ip : %s, rid_t : %s' % (int(rid), self.ip(), rid_t)) raise ValueError('L\'ip et le rid doivent correspondre. rid : %s, ip : %s, rid_t : %s' % (int(rid), self.ip(), rid_t))
if lock:
self.lock('rid', '%s' % rid) self.lock('rid', '%s' % rid)
self._set('rid', ['%s' % rid]) self._set('rid', ['%s' % rid])
@ -3360,7 +3363,7 @@ Contactez nounou si la MAC est bien celle d'une carte.""", 3)
else: else:
return netaddr.IPNetwork(config.ipv6_machines_speciales[int(self.rid())]) return netaddr.IPNetwork(config.ipv6_machines_speciales[int(self.rid())])
def ipv6(self, ipv6=None): def ipv6(self, ipv6=None, lock=True):
"""Retourne l'adresse IPv6 correspondant à la machine""" """Retourne l'adresse IPv6 correspondant à la machine"""
if ipv6 == None: if ipv6 == None:
@ -3373,10 +3376,10 @@ Contactez nounou si la MAC est bien celle d'une carte.""", 3)
ipv6_t = config.ipv6_machines_speciales[int(self.rid())] ipv6_t = config.ipv6_machines_speciales[int(self.rid())]
else: else:
ipv6_t = str(ip6tools.mac_to_ipv6(net, netaddr.EUI(self.mac()))) ipv6_t = str(ip6tools.mac_to_ipv6(net, netaddr.EUI(self.mac())))
if ipv6 != ipv6_t: if ipv6 != ipv6_t:
raise ValueError('L\'ipv6 n\'est pas celle EUID64 attendue. %s, %s' % (ipv6, ipv6_t)) raise ValueError('L\'ipv6 n\'est pas celle EUID64 attendue. %s, %s' % (ipv6, ipv6_t))
if lock:
self.lock('ip6HostNumber', ipv6) self.lock('ip6HostNumber', ipv6)
self._set('ip6HostNumber', [ipv6]) self._set('ip6HostNumber', [ipv6])