[ldap_crans] Support de l'ipv6 pour les objets Machine
Ignore-this: d5afb3764b61df716f4cabde716c709 darcs-hash:20110507145240-ffbb2-99daa2eb37fd6aa8aef9e895372fb8c469cbd815.gz
This commit is contained in:
parent
f91f63c086
commit
a4d70511f5
1 changed files with 59 additions and 5 deletions
|
@ -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())
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue