[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 from socket import gethostname
import smtplib, re, os, random, string, time, sys, pwd import smtplib, re, os, random, string, time, sys, pwd
import ldap, ldap.modlist, ldap_passwd import ldap, ldap.modlist, ldap_passwd
import netaddr
import annuaires_pg as annuaires import annuaires_pg as annuaires
import config, iptools, cPickle, config_mail import config, iptools, ip6tools, cPickle, config_mail
from chgpass import chgpass from chgpass import chgpass
from affich_tools import coul, prompt, cprint from affich_tools import coul, prompt, cprint
from email_tools import send_email 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) # Champs de recherche pour la recherche manuelle (en plus de la recherche auto)
non_auto_search_machines_champs = \ non_auto_search_machines_champs = \
['mid', 'historique', 'blacklist', 'info', 'exempt', 'mblacklist', ['mid', 'historique', 'blacklist', 'info', 'exempt', 'mblacklist',
'portTCPin', 'portTCPout', 'portUDPin', 'portUDPout'] 'portTCPin', 'portTCPout', 'portUDPin', 'portUDPout', 'dnsIpv6', 'machineAlias']
non_auto_search_champs = { \ non_auto_search_champs = { \
'adherent': \ 'adherent': \
@ -1140,7 +1141,7 @@ class BaseClasseCrans(CransLdap):
'rewriteMailHeaders', 'contourneGreylist', 'rewriteMailHeaders', 'contourneGreylist',
'puissance', 'canal', 'prise', 'responsable', 'puissance', 'canal', 'prise', 'responsable',
'macAddress', 'ipHostNumber', 'host', 'positionBorne', 'macAddress', 'ipHostNumber', 'host', 'positionBorne',
'derniereConnexion', 'hotspot']: 'derniereConnexion', 'hotspot', 'dnsIpv6', 'machineAlias']:
if champ in self.modifs: if champ in self.modifs:
if champ not in self._init_data.keys(): if champ not in self._init_data.keys():
valeur_initiale = 'N/A' valeur_initiale = 'N/A'
@ -1291,7 +1292,7 @@ class BaseClasseCrans(CransLdap):
self.conn.rename_s(self.dn, "%s=%d" % (self.idn, mid)) 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.dn = "%s=%d,%s" % (self.idn, mid, self.dn.split(',', 1)[1])
self._data[self.idn] = [ '%d' % mid ] self._data[self.idn] = [ '%d' % mid ]
### Génération de la liste de services à redémarrer ### Génération de la liste de services à redémarrer
# Quasiement tout est traité dans les classes filles. # Quasiement tout est traité dans les classes filles.
@ -1855,7 +1856,7 @@ class BaseProprietaire(BaseClasseCrans):
chgpass(self.dn) chgpass(self.dn)
else: else:
ret += coul(u' Il faudra penser à attribuer un mot de passe\n', 'jaune') ret += coul(u' Il faudra penser à attribuer un mot de passe\n', 'jaune')
r = prompt(u"Redirection mail ? [O/N]") r = prompt(u"Redirection mail ? [O/N]")
mail1 = mail2 = None mail1 = mail2 = None
if r.lower().startswith('o'): if r.lower().startswith('o'):
@ -3166,6 +3167,59 @@ Contactez nounou si la MAC est bien celle d'une carte.""", 3)
ports.sort() ports.sort()
self._set(champ, map(lambda x: ':'.join(map(str, x)), ports)) 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): def __hash__(self):
"""Retourne un hash de l'objet Machine""" """Retourne un hash de l'objet Machine"""
return hash(self.nom()) return hash(self.nom())