[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
|
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())
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue