ldap_crans: valeur "<automatique>" pour champ mac

Et on vire l'ipv6 dans ce cas.
This commit is contained in:
Daniel STAN 2014-02-23 16:58:59 +01:00
parent 5c9e740f73
commit ff88440f2e
3 changed files with 22 additions and 3 deletions

View file

@ -24,7 +24,11 @@ import netaddr
def mac_to_ipv6(ipv6_prefix, mac_address): def mac_to_ipv6(ipv6_prefix, mac_address):
"""Convert a MAC address (EUI48) to an IPv6 (prefix::EUI64).""" """Convert a MAC address (EUI48) to an IPv6 (prefix::EUI64)."""
if mac_address == '<automatique>':
return ''
if type(mac_address) in [str, unicode]:
mac_address = netaddr.EUI(mac_address)
addr = int(mac_address.bits(netaddr.mac_bare), 2) addr = int(mac_address.bits(netaddr.mac_bare), 2)
ip6addr = (((addr >> 24) ^ (1 << 17)) << 40) | (0xFFFE << 24) | (addr & 0xFFFFFF) ip6addr = (((addr >> 24) ^ (1 << 17)) << 40) | (0xFFFE << 24) | (addr & 0xFFFFFF)
n = netaddr.IPNetwork(ipv6_prefix) n = netaddr.IPNetwork(ipv6_prefix)

View file

@ -223,6 +223,9 @@ def format_mac(mac):
Le séparateur original peut être :, - ou rien Le séparateur original peut être :, - ou rien
Retourne la mac formatée. Retourne la mac formatée.
""" """
mac = mac.strip()
if mac == '<automatique>':
return mac
l, mac = preattr(mac) l, mac = preattr(mac)
mac = mac.strip().replace(' ','').replace("-", ":") mac = mac.strip().replace(' ','').replace("-", ":")
if mac.count(":") == 5: if mac.count(":") == 5:
@ -2863,6 +2866,10 @@ class Machine(BaseClasseCrans):
mac = format_mac(mac) mac = format_mac(mac)
if mac == '<automatique>':
multi_ok = True
lock = False
# La MAC serait-elle une MAC à la con ? # La MAC serait-elle une MAC à la con ?
if mac == "00:04:4b:80:80:03": if mac == "00:04:4b:80:80:03":
raise ValueError(u"Il s'agit de l'unique adresse MAC achetée par nVidia pour ses cartes réseau. Il faut changer cette adresse.", 2) raise ValueError(u"Il s'agit de l'unique adresse MAC achetée par nVidia pour ses cartes réseau. Il faut changer cette adresse.", 2)
@ -2898,7 +2905,7 @@ Contactez nounou si la MAC est bien celle d'une carte.""", 3)
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)), lock) self.ipv6(ip6tools.mac_to_ipv6(net, mac), lock)
else: else:
self.ipv6(config.ipv6_machines_speciales[int(self.rid())], lock) self.ipv6(config.ipv6_machines_speciales[int(self.rid())], lock)
except Exception as e: except Exception as e:
@ -3390,7 +3397,14 @@ Contactez nounou si la MAC est bien celle d'une carte.""", 3)
"""Retourne l'adresse IPv6 correspondant à la machine""" """Retourne l'adresse IPv6 correspondant à la machine"""
if ipv6 == None: if ipv6 == None:
return netaddr.IPAddress(self._data.get('ip6HostNumber', [''])[0]) if self._data.get('ip6HostNumber', []) == []:
return None
else:
return netaddr.IPAddress(self._data.get('ip6HostNumber')[0])
if ipv6 == '':
self._set('ip6HostNumber', [])
return
ipv6 = str(ipv6) ipv6 = str(ipv6)
net = self.netv6() net = self.netv6()

View file

@ -670,7 +670,8 @@ def machine_details(machine) :
f+= coul(u'IP : ','gras') + "%s\t\t" %machine.ip() f+= coul(u'IP : ','gras') + "%s\t\t" %machine.ip()
f+= coul(u'MAC : ','gras') + "%s\n" %machine.mac() f+= coul(u'MAC : ','gras') + "%s\n" %machine.mac()
f+= coul(u'IPv6 : ','gras') + "%s\n" %machine.ipv6() if machine.ipv6() != None:
f+= coul(u'IPv6 : ','gras') + "%s\n" %machine.ipv6()
if len(machine.sshFingerprint()) > 0 and aff_ssh: if len(machine.sshFingerprint()) > 0 and aff_ssh:
f += u"\n".join([coul(u'Fingerprint SSH : ', 'gras') + u"%s" % (i) for i in machine.sshFingerprint()])+"\n" f += u"\n".join([coul(u'Fingerprint SSH : ', 'gras') + u"%s" % (i) for i in machine.sshFingerprint()])+"\n"