On utilise uniquement wifi-ng
darcs-hash:20051230134508-d1718-b6ad9ce623fa3d991349800af32ef0646099867c.gz
This commit is contained in:
parent
681d8af2ee
commit
e80c353378
1 changed files with 0 additions and 252 deletions
|
@ -1,252 +0,0 @@
|
|||
#! /usr/bin/env python
|
||||
# -*- coding: iso-8859-15 -*-
|
||||
|
||||
import time, commands
|
||||
from gen_confs import gen_config, ERREUR, OK, anim
|
||||
|
||||
import sys, os
|
||||
sys.path.append('/usr/scripts/gestion')
|
||||
from ldap_crans import crans_ldap, invite
|
||||
|
||||
class conf_wifi(gen_config) :
|
||||
""" Génération de la configuration de isakmpd dans ISAKMPD_CONF
|
||||
Le fichier est constitué en 5 parties :
|
||||
1) Configuration générale insérée telle quelle
|
||||
2) Phase 1 : une ligne par host suivant template
|
||||
3) Phase 2 : une entrée par machine
|
||||
4) Bloc par machine suivant template
|
||||
5) Ajout de net_crans
|
||||
|
||||
Génération également de la fonction get_clients en shell
|
||||
dans /etc/wifi/wifi-update/shared/config/get_clients qui permet
|
||||
d'avoir l' ensemble des clients wifi.
|
||||
"""
|
||||
######################################PARTIE DE CONFIGURATION
|
||||
|
||||
# Fichiers à écrire
|
||||
# Répertoire d'écriture des fichiers de zone
|
||||
ISAKMPD_CONF='/etc/isakmpd/isakmpd.conf'
|
||||
GET_CLIENTS='/etc/wifi/wifi-update/shared/config/get_clients'
|
||||
|
||||
# Config générale
|
||||
general="""
|
||||
[General]
|
||||
Listen-on= 138.231.148.1
|
||||
Retransmits= 5
|
||||
Exchange-max-time= 40
|
||||
Logverbose= 1
|
||||
Loglevel= A=90
|
||||
Check-interval= 60
|
||||
Default-phase-1-lifetime= 1200,90:86400
|
||||
Default-phase-2-lifetime= 1800,120:86400
|
||||
|
||||
[Default-main-mode]
|
||||
DOI= IPSEC
|
||||
EXCHANGE_TYPE= ID_PROT
|
||||
Transforms= 3DES-SHA,3DES-MD5
|
||||
|
||||
[Default-quick-mode]
|
||||
DOI= IPSEC
|
||||
EXCHANGE_TYPE= QUICK_MODE
|
||||
Suites= QM-ESP-AES-SHA-SUITE, QM-ESP-AES-MD5-SUITE, \\
|
||||
QM-ESP-BLF-SHA-SUITE, QM-ESP-BLF-MD5-SUITE, \\
|
||||
QM-ESP-3DES-SHA-SUITE, QM-ESP-3DES-MD5-SUITE, \\
|
||||
QM-ESP-AES-SHA-PFS-SUITE, QM-ESP-AES-MD5-PFS-SUITE, \\
|
||||
QM-ESP-BLF-SHA-PFS-SUITE, QM-ESP-BLF-MD5-PFS-SUITE, \\
|
||||
QM-ESP-3DES-SHA-PFS-SUITE, QM-ESP-3DES-MD5-PFS-SUITE
|
||||
|
||||
"""
|
||||
|
||||
# Phase 1
|
||||
phase1_debut="[Phase 1]\n"
|
||||
phase1_template="%(IP)s= ISAKMP-peer-%(HOST)s\n"
|
||||
|
||||
# Phase 2
|
||||
phase2_debut="[Phase 2]\nPassive-connections= "
|
||||
phase2_template="IPsec-%(HOST)s"
|
||||
phase2_sep=', \\\n '
|
||||
|
||||
#Lignes necessaires pour chaque machine
|
||||
host_template="""
|
||||
[ISAKMP-peer-%(HOST)s]
|
||||
Phase= 1
|
||||
Transport= udp
|
||||
Address= %(IP)s
|
||||
Configuration= Default-main-mode
|
||||
Authentication=%(KEY)s
|
||||
|
||||
[IPsec-%(HOST)s]
|
||||
Phase= 2
|
||||
ISAKMP-peer= ISAKMP-peer-%(HOST)s
|
||||
Configuration= Default-quick-mode
|
||||
Local-ID= Net-crans
|
||||
Remote-ID= Net-%(HOST)s
|
||||
|
||||
[Net-%(HOST)s]
|
||||
ID-type= IPV4_ADDR
|
||||
Address= %(IP)s
|
||||
"""
|
||||
# Dernière partie du fichier
|
||||
net_crans="""
|
||||
[Net-crans]
|
||||
ID-type= IPV4_ADDR_SUBNET
|
||||
Network= 0.0.0.0
|
||||
Netmask= 0.0.0.0
|
||||
"""
|
||||
restart_cmd = 'kill -HUP $(cat /var/run/isakmpd.pid 2>/dev/null )'
|
||||
|
||||
######################################FIN PARTIE DE CONFIGURATION
|
||||
|
||||
def __init__(self) :
|
||||
self.db = crans_ldap()
|
||||
|
||||
def lockname(self):
|
||||
# On change le nom du lock pour avoir un nom unique pour tout ce qui
|
||||
# concerne le wifi
|
||||
# return ".".join(str(self.__class__).split(".")[0:-1])
|
||||
return "gen_confs.wifi"
|
||||
|
||||
def __str__(self) :
|
||||
return 'wifi'
|
||||
|
||||
def _gen(self):
|
||||
# Pour isakmpd.conf
|
||||
phase1 = self.phase1_debut
|
||||
phase2 = self.phase2_debut
|
||||
blocs=''
|
||||
# Pour get_clients
|
||||
clients = ''
|
||||
|
||||
for machine in self.db.search('host=*.wifi.crans.org&paiement=ok')['machine'] + invite().machines() :
|
||||
self.anim.cycle()
|
||||
if 'bloq' in machine.blacklist_actif() : continue
|
||||
data = { 'HOST' : machine.nom().split('.')[0] ,
|
||||
'IP' : machine.ip() ,
|
||||
'KEY' : machine.ipsec() ,
|
||||
'MAC' : machine.mac().lower() }
|
||||
|
||||
# Pour isakmpd.conf
|
||||
# Phase 1
|
||||
phase1 += self.phase1_template % data
|
||||
|
||||
# Phase 2
|
||||
if blocs != '' :
|
||||
# Ce n'est pas la première machine, il faut insérer un séparateur
|
||||
phase2 += self.phase2_sep
|
||||
phase2 += self.phase2_template % data
|
||||
|
||||
# Blocs machine
|
||||
blocs += self.host_template % data
|
||||
|
||||
# Pour get_clients
|
||||
clients += "echo %(HOST)s %(IP)s %(MAC)s\n" % data
|
||||
|
||||
|
||||
# Dans les clients, on rajoute les bornes
|
||||
bornes = self.db.search('host=*.wifi.crans.org&ipsec!=*')['machine']
|
||||
for machine in bornes:
|
||||
self.anim.cycle()
|
||||
data = { 'HOST' : machine.nom().split('.')[0] ,
|
||||
'IP' : machine.ip() ,
|
||||
'MAC' : machine.mac().lower() }
|
||||
clients += "echo %(HOST)s %(IP)s %(MAC)s\n" % data
|
||||
|
||||
# Ecriture du fichier isakmpd.conf
|
||||
fd = self._open_conf(self.ISAKMPD_CONF,'#')
|
||||
fd.write(self.general)
|
||||
fd.write(phase1)
|
||||
fd.write('\n')
|
||||
fd.write(phase2)
|
||||
fd.write('\n')
|
||||
fd.write(blocs)
|
||||
fd.write(self.net_crans)
|
||||
fd.close()
|
||||
|
||||
# Ecriture du fichier get_clients
|
||||
fd = self._open_conf(self.GET_CLIENTS, '#')
|
||||
fd.write("get_clients () {\n\n")
|
||||
fd.write(clients)
|
||||
fd.write("\n}\n")
|
||||
fd.close()
|
||||
|
||||
class bornes_wifi(gen_config) :
|
||||
""" Reconfiguration bornes wifi
|
||||
Si noms de borne fourni à l'initialisation restart uniquement celle-ci
|
||||
"""
|
||||
|
||||
# Fichier
|
||||
WIFI_UPDATE='/etc/wifi/wifi-update'
|
||||
GET_CONFIG='%s/shared/config/get_config' % WIFI_UPDATE
|
||||
|
||||
def __str__(self) :
|
||||
return 'bornes wifi'
|
||||
|
||||
def lockname(self):
|
||||
# On change le nom du lock pour avoir un nom unique pour tout ce qui
|
||||
# concerne le wifi
|
||||
# return ".".join(str(self.__class__).split(".")[0:-1])
|
||||
return "gen_confs.wifi"
|
||||
|
||||
def __init__(self,bornes=[]) :
|
||||
self.db = crans_ldap()
|
||||
self.bornes = bornes
|
||||
|
||||
def _gen(self) :
|
||||
bornes = self.db.search('host=*.wifi.crans.org&puissance=*')['machine']
|
||||
if not self.bornes:
|
||||
# Si on n'a pas spécifié de bornes, on va les redémarrer toute !
|
||||
self.bornes = [b.nom() for b in bornes]
|
||||
# Liste des bornes
|
||||
BORNES = u'## Liste des bornes -- source : base LDAP\n'
|
||||
BORNES += u'## MAC - IP - Canal - Puissance - Nom - Radio on/off\n'
|
||||
for b in bornes :
|
||||
self.anim.cycle()
|
||||
BORNES += u'%s %s %s %d %s' % ( b.mac(), b.ip(), b.canal(raw=True),
|
||||
abs(int(b.puissance())),
|
||||
b.nom().split(".")[0] )
|
||||
# Doit-on activer la partie radio ?
|
||||
if int(b.puissance()) < 0:
|
||||
BORNES += u' off\n'
|
||||
else:
|
||||
BORNES += u' on\n'
|
||||
|
||||
BORNES += u'## Fin liste des bornes'
|
||||
|
||||
# Nouveau systeme
|
||||
fd = self._open_conf(self.GET_CONFIG, '#')
|
||||
fd.write("""
|
||||
get_config () {
|
||||
|
||||
grep -i $(nvram get et0macaddr) <<EOF | awk '{print "mac="$1 " ip="$2 " canal="$3 " puissance="$4 " nom="$5 " radio="$6}'
|
||||
""")
|
||||
fd.write(BORNES)
|
||||
fd.write("\nEOF\n}\n")
|
||||
fd.close()
|
||||
|
||||
|
||||
def restart(self) :
|
||||
self.lock()
|
||||
for borne in self.bornes :
|
||||
# Juste pour être sûr
|
||||
if not '.' in borne: borne = borne + ".wifi.crans.org"
|
||||
anim('\treconfiguration de %s' % borne)
|
||||
# Déjà, cette borne a-t-elle un répertoire de configuration ?
|
||||
target = '%s/%s' % (self.WIFI_UPDATE, borne)
|
||||
if not os.path.isdir(target):
|
||||
# On créé le répertoire à l'image du répertoire default
|
||||
os.system("cp -R %s/default %s" % (self.WIFI_UPDATE, target))
|
||||
# Maintenant, on doit refaire quelques liens symboliques
|
||||
os.system("ln -sf ../shared/constants %s/100constants" % target)
|
||||
os.system("ln -sf ../shared/config/get_config %s/101getconfig" % target)
|
||||
os.system("ln -sf ../shared/config/get_clients %s/102getclients" % target)
|
||||
os.system("ln -sf ../shared/config/update-config %s/103update-config" % target)
|
||||
os.system("ln -sf ../shared/firewall/arp-forwarder %s/201firewall-arp" % target)
|
||||
os.system("ln -sf ../shared/firewall/auth-mac %s/201auth-mac" % target)
|
||||
os.system("ln -sf ../shared/firewall/macip %s/202firewall-macip" % target)
|
||||
os.system("ln -sf ../shared/firewall/ebtables %s/203firewall-ebtables" % target)
|
||||
os.system("ln -sf ../shared/utils/toggle-radio %s/301toggle-radio" % target)
|
||||
print OK
|
||||
time.sleep(1)
|
||||
|
||||
self.unlock()
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue