From a4d70511f5e8baa347cfc0ddc35e94d932abaebc Mon Sep 17 00:00:00 2001 From: Nicolas Dandrimont Date: Sat, 7 May 2011 16:52:40 +0200 Subject: [PATCH] [ldap_crans] Support de l'ipv6 pour les objets Machine Ignore-this: d5afb3764b61df716f4cabde716c709 darcs-hash:20110507145240-ffbb2-99daa2eb37fd6aa8aef9e895372fb8c469cbd815.gz --- gestion/ldap_crans.py | 64 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 59 insertions(+), 5 deletions(-) diff --git a/gestion/ldap_crans.py b/gestion/ldap_crans.py index 8c09f99a..7d65bfce 100644 --- a/gestion/ldap_crans.py +++ b/gestion/ldap_crans.py @@ -12,9 +12,10 @@ Licence : GPLv2 from socket import gethostname import smtplib, re, os, random, string, time, sys, pwd import ldap, ldap.modlist, ldap_passwd +import netaddr import annuaires_pg as annuaires -import config, iptools, cPickle, config_mail +import config, iptools, ip6tools, cPickle, config_mail from chgpass import chgpass from affich_tools import coul, prompt, cprint from email_tools import send_email @@ -336,7 +337,7 @@ class CransLdap: # Champs de recherche pour la recherche manuelle (en plus de la recherche auto) non_auto_search_machines_champs = \ ['mid', 'historique', 'blacklist', 'info', 'exempt', 'mblacklist', - 'portTCPin', 'portTCPout', 'portUDPin', 'portUDPout'] + 'portTCPin', 'portTCPout', 'portUDPin', 'portUDPout', 'dnsIpv6', 'machineAlias'] non_auto_search_champs = { \ 'adherent': \ @@ -1140,7 +1141,7 @@ class BaseClasseCrans(CransLdap): 'rewriteMailHeaders', 'contourneGreylist', 'puissance', 'canal', 'prise', 'responsable', 'macAddress', 'ipHostNumber', 'host', 'positionBorne', - 'derniereConnexion', 'hotspot']: + 'derniereConnexion', 'hotspot', 'dnsIpv6', 'machineAlias']: if champ in self.modifs: if champ not in self._init_data.keys(): valeur_initiale = 'N/A' @@ -1291,7 +1292,7 @@ class BaseClasseCrans(CransLdap): self.conn.rename_s(self.dn, "%s=%d" % (self.idn, mid)) self.dn = "%s=%d,%s" % (self.idn, mid, self.dn.split(',', 1)[1]) self._data[self.idn] = [ '%d' % mid ] - + ### Génération de la liste de services à redémarrer # Quasiement tout est traité dans les classes filles. @@ -1855,7 +1856,7 @@ class BaseProprietaire(BaseClasseCrans): chgpass(self.dn) else: ret += coul(u' Il faudra penser à attribuer un mot de passe\n', 'jaune') - + r = prompt(u"Redirection mail ? [O/N]") mail1 = mail2 = None if r.lower().startswith('o'): @@ -3166,6 +3167,59 @@ Contactez nounou si la MAC est bien celle d'une carte.""", 3) ports.sort() self._set(champ, map(lambda x: ':'.join(map(str, x)), ports)) + def dnsIpv6(self, dnsIpv6 = None): + """Accès au champ DNS IPv6""" + if dnsIpv6 == True: + self._set('dnsIpv6', ['TRUE']) + elif dnsIpv6 == False: + self._set('dnsIpv6', []) + elif dnsIpv6 != None: + raise ValueError, u"dnsIpv6 prend un booléen comme argument" + + # renvoie la valeur trouvée dans la base + return bool(self._data.get('dnsIpv6', [])) + + def machineAlias(self, machineAlias = None): + """Accès au champ DNS IPv6""" + if machineAlias == True: + self._set('machineAlias', ['TRUE']) + elif machineAlias == False: + self._set('machineAlias', []) + elif machineAlias != None: + raise ValueError, u"machineAlias prend un booléen comme argument" + + # renvoie la valeur trouvée dans la base + return bool(self._data.get('machineAlias', [])) + + def netv6(self): + """Retourne le réseau IPv6 Cr@ns associé à la machine""" + classe = { + "crans.org": "fil", + "ferme.crans.org": "fil", + "adm.crans.org": "adm", + "wifi.crans.org": "wifi" + }.get(self.Nom().split('.', 1)[1], "fil") + return netaddr.IPNetwork(config.prefix[classe][0]) + + def ipv6(self): + """Retourne l'adresse IPv6 correspondant à la machine""" + + net = self.netv6() + + if self.machineAlias(): + return netaddr.IPAddress(net.first + int(self.id())) + else: + return ip6tools.mac_to_ipv6(net, netaddr.EUI(self.mac())) + + def nom6(self): + """Retourne le nom "ipv6" de la machine""" + if self.dnsIpv6(): + return self.nom() + else: + s = self.nom().split('.') + s.insert(1, 'v6') + return '.'.join(s) + def __hash__(self): """Retourne un hash de l'objet Machine""" return hash(self.nom())