diff --git a/gestion/gest_crans.py b/gestion/gest_crans.py index dce2f178..d10b91fa 100755 --- a/gestion/gest_crans.py +++ b/gestion/gest_crans.py @@ -1015,7 +1015,7 @@ def set_blackliste(clas): 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'"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) if annul: return 1 @@ -1491,13 +1491,18 @@ def set_machine(machine): # Traitement err = '' try: machine.nom(result[0]) - except ValueError, c: err += c.args[0] + '\n' - except EnvironmentError, c: err += c.args[0] + '\n' + except ValueError, c: + err += c.args[0] + '\n' + except EnvironmentError, c: + err += c.args[0] + '\n' try: machine.ip(result[2]) - except ValueError, c: err += c.args[0] + '\n' - except EnvironmentError, c: err += c.__str__() + '\n' - except RuntimeError, c: err += c.args[0] + '\n' # Plus d'IP libres, peut-être à traiter differement ? + except ValueError, c: + err += c.args[0] + '\n' + 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]) except ValueError, c: if len(c.args)>1 and c.args[1] == 1 and isadm: @@ -1509,8 +1514,10 @@ def set_machine(machine): return set_machine(machine) else: try: machine.mac(result[1], 1) - except ValueError, c: err += c.args[0] + '\n' - except EnvironmentError, c: err += c.args[0] + '\n' + except ValueError, c: + 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: # Mac douteuse arg = u'--title "Adresse MAC" ' @@ -1520,8 +1527,10 @@ def set_machine(machine): return set_machine(machine) else: try: machine.mac(result[1], 1) - except ValueError, c: err += c.args[0] + '\n' - except EnvironmentError, c: err += c.args[0] + '\n' + except ValueError, c: + err += c.args[0] + '\n' + except EnvironmentError, c: + err += c.args[0] + '\n' else: try: err += c.args[0] + '\n' @@ -1529,7 +1538,8 @@ def set_machine(machine): raise 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: try: @@ -2224,8 +2234,9 @@ def menu_principal(): #Saisie prédictive de la mac try: prise = proprio.chbre().lower()[0] + becane.prise() + becane.ip("", lock=False) f = open('/usr/scripts/var/last_macs/' + prise, 'r') - becane.mac(f.read()) + becane.mac(f.read(), lock=False) f.close() except: pass diff --git a/gestion/ldap_crans.py b/gestion/ldap_crans.py index 93435049..f1cda62e 100755 --- a/gestion/ldap_crans.py +++ b/gestion/ldap_crans.py @@ -2823,7 +2823,7 @@ class Machine(BaseClasseCrans): """ Retourne le nom de la machine """ 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 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) # Lock de la mac - self.lock('macAddress', mac) + if lock: + self.lock('macAddress', mac) net = self.netv6() try: self._set('macAddress', [mac]) 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: - self.ipv6(config.ipv6_machines_speciales[int(self.rid())]) + self.ipv6(config.ipv6_machines_speciales[int(self.rid())], lock) 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 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) return liste - def ip(self, ip=None): + def ip(self, ip=None, lock=True): """ 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. @@ -3101,13 +3102,14 @@ Contactez nounou si la MAC est bien celle d'une carte.""", 3) my_rid = ridtools.Rid(ipv4=ip) # Lock ip - self.lock('ipHostNumber', ip) + if lock: + self.lock('ipHostNumber', ip) self._set('ipHostNumber', [ip]) - self.rid("%d" % my_rid) + self.rid("%d" % my_rid, lock=lock) return ip - def rid(self, rid=None): + def rid(self, rid=None, lock=True): """ Retourne le rid si rid == None, l'affecte sinon. """ @@ -3119,7 +3121,8 @@ Contactez nounou si la MAC est bien celle d'une carte.""", 3) 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)) - self.lock('rid', '%s' % rid) + if lock: + self.lock('rid', '%s' % rid) self._set('rid', ['%s' % rid]) def exempt(self, new=None): @@ -3360,7 +3363,7 @@ Contactez nounou si la MAC est bien celle d'une carte.""", 3) else: 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""" if ipv6 == None: @@ -3373,11 +3376,11 @@ Contactez nounou si la MAC est bien celle d'une carte.""", 3) ipv6_t = config.ipv6_machines_speciales[int(self.rid())] else: ipv6_t = str(ip6tools.mac_to_ipv6(net, netaddr.EUI(self.mac()))) - if ipv6 != ipv6_t: raise ValueError('L\'ipv6 n\'est pas celle EUID64 attendue. %s, %s' % (ipv6, ipv6_t)) - self.lock('ip6HostNumber', ipv6) + if lock: + self.lock('ip6HostNumber', ipv6) self._set('ip6HostNumber', [ipv6]) def nom6(self):