[ldap_crans] Support de l'ipv6 pour les objets Machine

Ignore-this: d5afb3764b61df716f4cabde716c709

darcs-hash:20110507145240-ffbb2-99daa2eb37fd6aa8aef9e895372fb8c469cbd815.gz
This commit is contained in:
Nicolas Dandrimont 2011-05-07 16:52:40 +02:00
parent f91f63c086
commit a4d70511f5

View file

@ -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())