diff --git a/admin/confmail/conf_mail.py b/admin/confmail/conf_mail.py
deleted file mode 100755
index 478e1540..00000000
--- a/admin/confmail/conf_mail.py
+++ /dev/null
@@ -1,80 +0,0 @@
-# -*- coding: utf-8 -*-
-""" Confirmation des adresses electroniques.
- Par Alexandre Bos
- Encore en test
- Licence GPL v2 """
-
-""" ATTENTION : CE SCRIPT EST ENCORE EN TEST !"""
-
-
-
-import sha, sys, re
-from time import time
-
-sys.path.append('/usr/scripts/gestion')
-from email_tools import send_email
-from ldap_crans import crans_ldap
-
-
-sys.path.append('/usr/scripts/gestion/secrets')
-from secrets import secretConfirmMail
-
-modele = """Content-Type: text/html
-
-
Page de confirmation de mail
-
-
-Page de confirmation d'email du crans.
-%s
-
-
-"""
-
-
-
-re_aid = re.compile ('^\d{1,5}$')
-""" Expression rationnelle pour tester les numeros de 0 a 99999 """
-
-re_date = re.compile ('^\d{8,12}$')
-""" Expression rationnelle pour tester un entier represantant une date
- C'est le resultat d'un time() tronque"""
-
-base_lien = 'http://mailconf.crans.org/confirm.py?'
-
-
-def gen_code(aid, date_limite):
- """ Donne le code de connfirmation en fonction
- de l'aid et de la date limite du lien de confirmation"""
- chaine = aid + date_limite + secretConfirmMail
- hash = sha.new(chaine)
- # Ok, on ruine les qualites cryptographiques de sha. Et apres ?
- return (hash.hexdigest())[1:15];
-
-
-def confirmer(aid, date_limite, code):
- """ Verifie que les donnes du lien de confirmation sont
- correctes et, si tout est bon, marque l'adresse
- comme valide"""
- code2 = gen_code(aid, date_limite)
- if (code <> code2) or (not re_aid.match(aid)) or (not re_date.match(date_limite)):
- print modele % ("Lien de confirmation mal formate.")
- elif int(date_limite) < time():
- print modele % "Lien de confirmation expire."
- else:
- db = crans_ldap()
- db.services_to_restart('mail_valide',str(aid))
- print modele % "L'adresse a ete marquee valide. Merci !"
-
-def envoyer_mail(aid, validite=1209600):
- """ Envoie un mail de confirmation de l'adresse valable par defaut
- deux semaines """
- date_limite = str(int(time() + validite))
- code = gen_code(str(aid),date_limite)
- db = crans_ldap()
- adh = db.search('aid='+str(aid))['adherent'][0]
- lien = base_lien + 'aid=' + str(aid) + '&date=' + str(date_limite) + '&conf=' + str(code)
- corps = """Bonjour,\n Ce mail t'est envoye afin de confirmer ton adresse electronique. Pour ce faire, clique sur le lien ci-dessous.\n\n%s\n\nMerci !\n\n--\n\nL'equipe technique du Crans""" % lien
- send_email('disconnect@crans.org', str(adh._data['mail'][0])+'@crans.org', 'Mail de confirmation d\'adresse electronique', corps, actual_sender='bulk+mailConf@crans.org')
-
-
-# e finita la comedia
diff --git a/gestion/gen_confs/dhcpd.py b/gestion/gen_confs/dhcpd.py
deleted file mode 100644
index 468bc829..00000000
--- a/gestion/gen_confs/dhcpd.py
+++ /dev/null
@@ -1,208 +0,0 @@
-#! /usr/bin/env python
-# -*- coding: utf-8 -*-
-
-""" Génération de la configuration pour le dhcp
-
-Copyright (C) Frédéric Pauget
-Licence : GPLv2
-"""
-
-from iptools import AddrInNet, param
-from gen_confs import gen_config
-from ldap_crans import hostname
-
-class dhcp(gen_config) :
- """ Génération du fichier de configuration pour dhcpd (DHCPD_CONF)
- Le fichier comporte une partie par réseau servi, chaque réseau
- servi doit être une clef du dictionnaire reseaux, la valeur correspondante
- est une chaine décrivant les options spécifiques à ce réseau.
- Les options communes sont celles de base_dhcp.
-
- Chaque machines possède ensuite une entrée de la forme de host_template
- """
- ######################################PARTIE DE CONFIGURATION
- # Fichier à écire
- if hostname == 'ragnarok' :
- DHCPD_CONF='/etc/dhcpd.conf'
- else :
- DHCPD_CONF = '/etc/dhcp3/dhcpd.conf'
-
-# Hotspot ENS plus utilisé...
-# elif hostname == 'ragnarok' :
- # On rajoute les IP dynamiques
-# base_conf = """
-# subnet 10.231.144.0 netmask 255.255.248.0 {
-# default-lease-time 900;
-# max-lease-time 900;
-# option subnet-mask 255.255.248.0;
-# option broadcast-address 10.231.151.255;
-# option routers 10.231.148.1;
-# option domain-name-servers 10.231.148.1;
-# option domain-name "ens-cachan.fr";
-# option option-119 "ens-cachan.fr";
-# option netbios-node-type 2;
-#
-# range dynamic-bootp 10.231.149.1 10.231.149.254;
-# }
-#"""
-
- elif hostname == 'sable':
- # Options communes à toutes les réseaux servis
- base_conf="""
-# VLan accueil
-subnet 10.51.0.0 netmask 255.255.0.0 {
- range 10.51.0.10 10.51.255.200;
- # On n'a besoin que du dns ici (pour le portail captif)
- option domain-name-servers 10.51.0.1;
-}
-
-# VLan isolement
-subnet 10.52.0.0 netmask 255.255.0.0 {
- range 10.52.0.10 10.52.255.200;
- option domain-name-servers 10.52.0.1;
- option routers 10.52.0.1;
-}
-
-"""
-
- else :
- base_conf = ''
-
- # Réseaux servis avec leurs options spécifiques
-# if hostname == 'zamok':
-# reseaux = { '138.231.136.0/21' :
-#"""option routers 138.231.136.4;
-# option domain-name-servers 138.231.136.3, 138.231.136.9, 138.231.136.98;
-# option domain-name "crans.org";
-# option option-119 "crans.org wifi.crans.org";""" }
- if hostname == 'ragnarok':
- reseaux = { '138.231.144.0/21' :
-"""option routers 138.231.148.1;
- option domain-name-servers 138.231.148.1;
- option domain-name "crans.org";
- option option-119 "crans.org wifi.crans.org";
- option time-servers 138.231.136.3;
- option ntp-servers 138.231.136.3;
- option smtp-server 138.231.136.3;"""}
-
- elif hostname == 'rouge':
- reseaux = { '138.231.136.0/21' :
-"""authoritative;
- option routers 138.231.136.4;
- option domain-name-servers 138.231.136.9, 138.231.136.98, 138.231.136.3;
- option domain-name "crans.org";
- option option-119 "crans.org wifi.crans.org";
- filename "pxelinux.0";
- option time-servers 138.231.136.3;
- option ntp-servers 138.231.136.3;
- option smtp-server 138.231.136.3;""" }
-
- elif hostname == 'titanic':
- reseaux = {'10.2.9.0/24' :
-"""authoritative;
- option routers 10.2.9.1;
- option domain-name-servers 10.2.9.1;""" }
-
- elif hostname == 'sable':
- # le vlan gratuit
- reseaux = {'10.42.0.0/16' :
-"""authoritative;
- option routers 10.42.0.1;
- option domain-name-servers 10.42.0.1;""" }
-
- # Options communes à toutes les réseaux servis
- base_dhcp="""
-subnet %(network)s netmask %(netmask)s {
- default-lease-time 86400;
- option subnet-mask %(netmask)s;
- option broadcast-address %(broadcast)s;
- %(OPTIONS_RESEAU)s
- option ip-forwarding off;
- deny unknown-clients;
- %(HOSTs)s
-}
-"""
-
- host_template="""
- host %(nom)s {
- hardware ethernet %(mac)s;
- fixed-address %(ip)s;
- option host-name "%(nom)s";
- }
-"""
-
- host_template_ltsp_i386="""
- host %(nom)s {
- hardware ethernet %(mac)s;
- fixed-address %(ip)s;
- option host-name "%(nom)s";
- next-server 138.231.136.19;
- filename "/ltsp/pxelinux.0";
- option root-path "/opt/ltsp/i386";
-}
-"""
-
- host_template_ltsp_powerpc="""
- host %(nom)s {
- hardware ethernet %(mac)s;
- fixed-address %(ip)s;
- option host-name "%(nom)s";
- next-server 138.231.136.98;
- filename "yaboot";
- option root-path "/opt/ltsp/powerpc";
- }
-"""
-
- ### Verbosité
- # Si =1 ralera (chaine warnings) si machines hors zone trouvée
- # Si =0 ralera seulement si réseau vide
- verbose = 1
-
-# if hostname == 'zamok':
-# restart_cmd = '/etc/init.d/dhcp restart'
- if hostname == 'ragnarok':
- restart_cmd = 'pkill dhcpd ; sleep 1 ; dhcpd'
- elif hostname in ['rouge', 'titanic', 'sable'] :
- restart_cmd = '/etc/init.d/dhcp3-server restart'
- else:
- restart_cmd = 'true'
-
- ######################################FIN PARTIE DE CONFIGURATION
- def __str__(self) :
- return 'dhcp'
-
- def _gen(self) :
- warnings =''
-
- ### Construction de la partie du fichier contenant les machines
- hosts={}
-
- self.anim.iter=len(self.machines)
- for machine in self.machines :
- self.anim.cycle()
- t = 0
- for net in self.reseaux.keys() :
- if AddrInNet(machine.ip(),net) :
- host_template = self.host_template
- # variable pour remplir le template
- d = { 'nom' : machine.nom().split('.')[0] , 'mac' : machine.mac() , 'ip' : machine.ip() }
- try : hosts[net] += host_template % d
- except : hosts[net] = host_template % d
- t = 1
-
- ### Ecriture du fichier
- fd = self._open_conf(self.DHCPD_CONF,'#')
- fd.write(self.base_conf)
- for net, options in self.reseaux.items() :
- if not hosts.has_key(net) :
- warnings += u'Réseau %s ignoré : aucune machine à servir\n' % net
- continue
- d = param(net)
- d['OPTIONS_RESEAU'] = options
- d['HOSTs'] = hosts[net]
-
- fd.write(self.base_dhcp % d)
-
- fd.close()
-
- return warnings
diff --git a/gestion/gen_confs/dhcpd.py b/gestion/gen_confs/dhcpd.py
new file mode 120000
index 00000000..ce25c978
--- /dev/null
+++ b/gestion/gen_confs/dhcpd.py
@@ -0,0 +1 @@
+dhcpd_new.py
\ No newline at end of file
diff --git a/gestion/gen_confs/dhcpd_new.py b/gestion/gen_confs/dhcpd_new.py
index 3ce6db1d..60100862 100644
--- a/gestion/gen_confs/dhcpd_new.py
+++ b/gestion/gen_confs/dhcpd_new.py
@@ -1,4 +1,3 @@
-#! /usr/bin/env python
# -*- coding: utf-8 -*-
""" Génération de la configuration pour le dhcp
@@ -7,24 +6,28 @@ Copyright (C) Frédéric Pauget
Licence : GPLv2
"""
import os
-from iptools import AddrInNet
-from gen_confs import gen_config
+import sys
from socket import gethostname
-from config import NETs
+import struct
+if '/usr/scripts' not in sys.path:
+ sys.path.append('/usr/scripts')
+
+from gestion.iptools import AddrInNet
+from gestion.gen_confs import gen_config
+from gestion.config import NETs
+from gestion import secrets_new as secrets
+
+# Relative imports
from pypureomapi import pack_ip, pack_mac, OMAPI_OP_UPDATE
from pypureomapi import Omapi, OmapiMessage, OmapiError, OmapiErrorNotFound
-import struct
hostname = gethostname().split(".")[0]
class dydhcp:
def __init__(self, server):
- import sys
- sys.path.append('/usr/scripts/gestion/secrets')
- from secrets import dhcp_omapi_keyname,dhcp_omapi_keys
- self.dhcp_omapi_keyname = dhcp_omapi_keyname
- self.dhcp_omapi_key = dhcp_omapi_keys[server]
+ self.dhcp_omapi_keyname = secrets.get('dhcp_omapi_keyname')
+ self.dhcp_omapi_key = secrets.get('dhcp_omapi_keys')[server]
self.server = server.lower()
def add_host(self, ip, mac,name=None):
diff --git a/gestion/gen_confs/populate_sshFingerprint.py b/gestion/gen_confs/populate_sshFingerprint.py
index aa808e8c..8d64e484 100755
--- a/gestion/gen_confs/populate_sshFingerprint.py
+++ b/gestion/gen_confs/populate_sshFingerprint.py
@@ -1,4 +1,4 @@
-#! /usr/bin/env python
+#!/bin/bash /usr/scripts/python.sh
# -*- coding: utf-8 -*-
import subprocess
import sys
@@ -9,12 +9,8 @@ import hashlib
from socket import gethostname
from netifaces import interfaces, ifaddresses, AF_INET
-sys.path.append('/usr/scripts/')
-sys.path.append('/usr/scripts/gestion')
-sys.path.append('/etc/crans/secrets/')
-
import lc_ldap.shortcuts
-import config
+from gestion import config
conn = lc_ldap.shortcuts.lc_ldap_admin(user=u'sshfingerprint')
diff --git a/gestion/gen_confs/switchs.py b/gestion/gen_confs/switchs.py
deleted file mode 100755
index ebda5715..00000000
--- a/gestion/gen_confs/switchs.py
+++ /dev/null
@@ -1,548 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-""" met à jour les propriétés des prises des switchs du bat :
- mac autorisée(s), état (activé ou non) et nom de la prise
- argument : nom du switch
-
- procédure de configuration initiale :
- * mot de passe admin (password manager user-name )
- * activation du ssh (crypto key generate ssh)
- * copie fichier de conf
- pour les reconfiguration copier le fichier de conf
-
- Dans tous les cas FAIRE LE SNMP A LA MAIN (script hptools)
-"""
-
-import sys, os, commands, smtplib, tempfile, getopt
-os.umask(0117)
-
-sys.path.append('/usr/scripts/')
-sys.path.append('/usr/scripts/gestion')
-from hptools import hpswitch, sw_chbre
-from ldap_crans import crans_ldap, BorneWifi
-from annuaires_pg import uplink_prises, reverse, bat_manuels, all_switchs, bat_switchs
-from random import shuffle
-from gen_confs import *
-import datetime
-import config
-import re
-from cranslib.deprecated import deprecated
-
-capture_model = re.compile(r'\((.*)\)')
-headers_by_model = {
-'HP 2626': '; J4900C Configuration Editor; Created on release #H.10.83',
-'HP 2650': '; J4899B Configuration Editor; Created on release #H.10.83',
-'HP 2810-24G':'; J9021A Configuration Editor; Created on release #N.11.25',
-'HP 2610-24':'; J9085A Configuration Editor; Created on release #R.11.54',
-'HP 2610-48':'; J9088A Configuration Editor; Created on release #R.11.54',
-'HP 2910al-24G':'; J9145A Configuration Editor; Created on release #W.14.38'}
-
-gigabit_models = ['J9021A', 'J9145A']
-
-class switch(gen_config) :
- """Classe de configuration d'un switch"""
- # Répertoire ou écire les fichiers de conf
- CONF_REP='/tmp/' # avec un / derrière
-
- config = """%(switch_config_header)s
-
-hostname "%(switch)s"
-; Generated %(date_gen)s by switchs.py
-%(module-type)s
-;-------------------------------------------------------- Snmp
-snmp-server contact "root@crans.org"
-snmp-server location "Batiment %(bat)s"
-;A faire à la main
-snmpv3 enable
-snmpv3 restricted-access
-;snmpv3 user "initial"
-snmpv3 user "crans"
-snmpv3 group ManagerPriv user "crans" sec-model ver3
-snmp-server community "public" Operator
-;-------------------------------------------------------- Heure/date
-time timezone 60
-time daylight-time-rule Western-Europe
-sntp server 10.231.136.98
-timesync sntp
-sntp unicast
-;-------------------------------------------------------- Misc
-console inactivity-timer 30
-;-------------------------------------------------------- Logs
-logging 10.231.136.38
-;-------------------------------------------------------- IP du switch
-ip default-gateway 10.231.136.4
-vlan %(vlan_adherent)s
- name "DEFAULT_VLAN"
- untagged %(prises_default)s
- no ip address
- ip igmp
- no ip igmp querier
- exit
-vlan %(vlan_adm)s
- name "Adm"
- %(prises_adm)s
- ip address %(ip)s 255.255.255.0
- exit
-vlan %(vlan_wifi)s
- name "Wifi"
- %(prises_wifi)s
- no ip address
- exit
-vlan %(vlan_hotspot)s
- name "Hotspot"
- %(prises_hotspot)s
- no ip address
- exit
-vlan %(vlan_gratuit)s
- name "Gratuit"
- tagged %(prises_default)s
- no ip address
- exit
-vlan %(vlan_accueil)s
- name "Accueil"
- tagged %(prises_default)s
- no ip address
- exit
-vlan %(vlan_isolement)s
- name "Isolement"
- tagged %(prises_default)s
- no ip address
- exit
-vlan %(vlan_appts)s
- name "Appt ENS"
- %(prises_appts)s
- no ip address
- exit
-;-------------------------------------------------------- Logs
-%(INTERFACES_CONF)s
-;------------------------------------------------------- Accès d'administration
-no telnet-server
-no web-management
-aaa authentication ssh login public-key none
-aaa authentication ssh enable public-key none
-ip ssh
-ip authorized-managers 10.231.136.0 255.255.255.0
-ip ssh filetransfer
-;------------------------------------------------------- Protection contre les boucles
-loop-protect disable-timer 30
-loop-protect transmit-interval 3
-loop-protect %(non_uplinks)s
-;------------------------------------------------------- Serveurs radius
-radius-server dead-time 2
-radius-server key %(radius_key)s
-%(radius-serveurs)s
-;------------------------------------------------------- Filtrage mac
-aaa port-access mac-based addr-format multi-colon
-;------------------------------------------------------- Bricoles
-no cdp run
-no stack
-"""
-
- # Serveur DHCP des différent vlans
- dhcp_servers = {
- '1':'138.231.136.34',
- '3':'138.231.148.34',
- '6':'10.42.0.34',
- '7':'10.51.0.34',
- '9':'10.52.0.34',
- '21':'10.2.9.34'
- }
-
- dhcp_snooping_template = """;------------------------------------------------------- DHCP Snooping
-dhcp-snooping vlan"""
- for vlan in dhcp_servers.keys():
- dhcp_snooping_template +=""" %s""" % vlan
- dhcp_snooping_template +="""
-dhcp-snooping trust %(uplinks)s
-no dhcp-snooping trust %(non_uplinks)s
-"""
- for vlan in dhcp_servers.keys():
- dhcp_snooping_template +="""dhcp-snooping authorized-server %%(dhcp-%s)s
-""" % vlan
- dhcp_snooping_template +="""; Activation
-dhcp-snooping"""
-
- interface_template = """interface %(prise)i
- enable
- name "%(nom)s"
- %(no_flowcontrol)s flow-control
- %(speed)s
- no lacp
-exit
-"""
- # Serveurs radius
- rad_servs = [ '10.231.136.72', '10.231.136.9' ]
- rad_template = "radius-server host %s\n"
-
-
- def __init__(self,truc):
- """ truc est soit :
- * une _liste_ de chambres => reconfig de ces chambres
- * un _tulpe_ de noms de switch => reconfig de ces swiths"""
- self.db = crans_ldap() # connexion LDAP
- if type(truc) == list :
- # On enlève les chambres "CRA", "????" et EXT qui n'ont pas besion de config
- self.chbres = [ch for ch in truc if (ch not in [ "CRA", "????", "EXT" ]) ]
- self.switch = None
- else :
- self.chbres = None
- self.switch = truc
-
- def __str__(self) :
- return 'switchs'
-
- def restart(self) :
- if self.chbre :
- # Tout est déja fait
- return
- ####### Vu qu'il n'y a pas de serveur tftp ici
- # on excécute pas le truc en dessous
- #for switch in self.switch :
- # self.aff = anim('\treboot de %s' % switch)
- # sw = hptools.switch(switch)
- # sw.update()
-
- def gen_conf(self) :
- if self.chbres :
- self.chbres.sort()
- for chbre in self.chbres :
- self.configure_chbre(chbre)
- elif self.switch :
- for switch in self.switch :
- self.configure_switch(switch)
-
- @deprecated("Tous les switchs possèdent une authentification radius.")
- def configure_chbre(self,chbre) :
- """ Recontigure la chambre fournie chambre.
- Déprécié. Tous les switchs possèdent une authentification radius."""
- return False
-
- def configure_switch(self,switch) :
- self.aff = anim('\tconfiguration de %s' % switch)
- try:
- warn = self.__configure_switch(switch)
- self.aff.reinit()
- if warn :
- print WARNING
- if self.debug :
- sys.stderr.write(warn)
- else :
- print OK
- except :
- self.aff.reinit()
- print ERREUR
- self._restore()
- return 1
-
- def __configure_switch(self,switch) :
- """ Génère le fichier de conf du switch donné """
- ### Récupération données du switch
- # Batiment et numéro du switch
- bat = switch[3].lower()
- sw_num = int(switch[5])
- dhcp_servers = self.dhcp_servers
- # Conf radius
- sys.path.append('/usr/scripts/gestion/secrets')
- from secrets import radius_key
-
- self.aff.cycle()
-
- ## On veut par défaut tout confier au serveur radius principal
- #shuffle(self.rad_servs)
- rad = self.rad_template * len(self.rad_servs)
-
-
- params = { 'switch' : switch, 'bat' : bat.upper() ,
- 'date_gen': str(datetime.datetime.now()),
- 'radius_key' : radius_key ,
- 'radius-serveurs' : rad[:-1] % tuple(self.rad_servs),
- }
- for i in dhcp_servers.keys():
- params['dhcp-%s' % i]=dhcp_servers[i]
-
- self.aff.cycle()
-
- options = [ opt for opt,arg in opts]
-
- # IP
- machine = self.db.search(switch)['machine'][0]
- params['ip'] = str(machine.ip())
-
- if '-g' in options or '--get-conf' in options:
- old_config = NamedTemporaryFile()
- res, msg = commands.getstatusoutput("scp bat%s-%i:cfg/startup-config %s" % (bat, sw_num, old_config.name))
-
- if res != 0:
- raise RuntimeError(u"Erreur : impossible de récupérer l'ancienne configuration du switch")
-
- params['switch_config_header'] = old_config.readline()
- old_config.close()
-
- self.aff.cycle()
- elif '--header' in options:
- for opt, arg in opts:
- if opt == '--header':
- params['switch_config_header'] = arg
- break
- else:
- try:
- match = capture_model.search(machine.info()[0])
- model = match.group(1)
- sys.stderr.write(model)
- params['switch_config_header']=headers_by_model[model]
- except:
- sys.stderr.write('Impossible de déterminer le header à utiliser (switch %s)' % switch)
- params['switch_config_header']= '; J4899A Configuration Editor; Created on release #H.10.50'
-
- model = params['switch_config_header'].split(' ', 2)[1]
- if model == "J9145A":
- params['module-type'] = 'module 1 type J9145A'
- else:
- params['module-type'] = ''
-
- self.aff.cycle()
-
- # Nombre de prises et modèle
- nb_prises = machine.nombrePrises()
- if nb_prises < 0 :
- raise RuntimeError("Erreur : impossible de déterminer les caractéristiques du switch.")
-
- has_dhcp_snooping = "2810" not in " ".join(machine.info())
-
- ### Configuration prises
- params['INTERFACES_CONF'] = ''
-
- # Dictionnaire prise -> chambre
- prise_chbres = reverse(bat)
-
- # Prises occupées par des machines du Cr@ns
- crans_prises={}
- for m in self.db.search('prise=%s%i*' % (bat.upper(), sw_num))['machine'] :
- try: crans_prises[m.prise()].append(m)
- except: crans_prises[m.prise()] = [ m ]
-
- self.aff.iter = nb_prises+1
-
- # Paramètres à affecter
- for key in ( 'uplinks', 'non_uplinks' ) :
- params[key] = []
-
- vlans = { 'wifi_tagged' : [] , 'wifi_untagged' : [] ,
- 'hotspot_tagged' : [], 'hotspot_untagged' : [],
- 'adm_tagged' : [] , 'adm_untagged' : [] ,
- 'appts_tagged' : [], 'appts_untagged' : [],
-
- # VLans pour le reste: le vlan des adhérents, des
- # inconnus et de ceux qui ne paie pas
- 'default' : [] }
-
- personnels_loges = self.db.search('etudes=Personnel ENS')['adherent']
- prises_appartements= [ p.chbre() for p in personnels_loges ]
-
- # Génération de la conf de chaque prise
- for prise in range(1,nb_prises+1):
- self.aff.cycle()
-
- # Conf par défaut : activée, autonégociation
- prise_params = { 'prise' : prise , 'speed' : '',
- 'etat' : '', 'no_flowcontrol': '' }
- annu_prise = '%i%02i' % (sw_num, prise) # prise telle que notée dans l'annuaire
-
- if uplink_prises[bat].has_key(int(annu_prise)) :
- ### Prise d'uplink
- prise_params['nom'] = uplink_prises[bat][int(annu_prise)]
- prise_params['no_flowcontrol'] = 'no '
- params['uplinks'].append(prise)
- vlans['default'].append(prise)
- vlans['adm_tagged'].append(prise)
- vlans['wifi_tagged'].append(prise)
- vlans['hotspot_tagged'].append(prise)
- vlans['appts_tagged'].append(prise)
- params['INTERFACES_CONF'] += self.interface_template % prise_params
- continue
-
- params['non_uplinks'].append(prise)
-
- if crans_prises.has_key("%s%s" % (bat.upper(), annu_prise)) :
- ### Prise réservée à l'association
- wifi=0
- adm=0
- autres=0
- for m in crans_prises["%s%s" % (bat.upper(), annu_prise)] :
- if isinstance(m, BorneWifi): wifi += 1
- elif m.Nom().find('.adm.crans.org')!=-1 : adm+=1
- else : autres+=1
- if autres==0 and adm==0 :
- # Vlan wifi required
- vlans['hotspot_tagged'].append(prise)
- vlans['wifi_tagged'].append(prise)
- if wifi == 1 :
- prise_params['nom'] = "Wifi_%s" % m.nom().split(".")[0]
- else :
- prise_params['nom'] = "Wifi"
- # Certaines bornes sont dans des chambres, est-ce le cas ?
- if prise_chbres.has_key(annu_prise):
- vlans['default'].append(prise)
- chbres = prise_chbres[annu_prise]
- prise_params['nom'] += '+Chambre'
- if len(chbres) > 1 : prise_params['nom'] += 's'
- for chbre in chbres :
- prise_params['nom'] += '_%s%s' % (bat.upper(), chbre)
- elif wifi==0 and autres==0 :
- # Vlan adm uniquement
- if adm == 1 :
- prise_params['nom'] = m.nom().split(".")[0]
- else :
- prise_params['nom'] = "Uplink_adm"
- vlans['adm_untagged'].append(prise)
- else :
- # Tous les vlans
- prise_params['nom'] = "Prise_crans"
- vlans['default'].append(prise)
- vlans['adm_tagged'].append(prise)
- vlans['wifi_tagged'].append(prise)
- vlans['hotspot_tagged'].append(prise)
-
- params['INTERFACES_CONF'] += self.interface_template % prise_params
- continue
-
- # Quelle(s) chambre(s) est/sont sur la prise. A cause du
- # cas PDJ il peux y avoir des prises avec plusieurs
- # chambres.
- chbres = prise_chbres.get(annu_prise, [])
-
- # Pour les switchs gigabit, on bloque le gigabit par défaut, sauf
- # pour les membres actifs et les clubs (cf plus bas)
- if model in gigabit_models:
- prise_params['speed'] = 'speed-duplex auto-10-100'
-
- # Combien de machines sont succeptibles d'etre sur la prise
- nombre_de_machines = 0
- # Pour chaque chambre sur cette prise
- for chb in chbres:
- # On selectionne les eventuels adherents y residant
- residents = self.db.search("chbre=%s%s" % (bat, chb))
- for adherent in residents['adherent']:
- if adherent.droits(): #Seuls les membres actifs ont le droit à plus
- prise_params['speed'] = ''
- # On selectionne les machines fixes de l'adherent, et on ajoute le nombre au quota
- nombre_de_machines += len(adherent.machines_fixes())
- if residents['club']:
- prise_params['speed'] = ''
-
- # Authentification RADIUS, pas pour les clubs...
- if not any("cl" in chbre.lower() for chbre in chbres):
- # "unauth-vid" est le vlan sur lequel sont envoyés les machines
- # quand l'authentification RADIUS échoue. On met le VLAN 1 pour
- # éviter les problèmes quand LDAP se ch@#! dessus.
- params['INTERFACES_CONF'] += """aaa port-access mac-based %(prise)s
-aaa port-access mac-based %(prise)s addr-limit %(nbmac)s
-aaa port-access mac-based %(prise)s logoff-period 3600
-aaa port-access mac-based %(prise)s unauth-vid 1
-""" % { 'nbmac': 2 + nombre_de_machines, 'prise': prise }
-# On regle le nombre de machines connectables a la prise au nombre de machines
-# sur cette prise dans l'annuaire plus 2
- else: # ... et pour les clubs, vlans par défaut
- vlans['default'].append(prise)
-
- # On donne à la prise un nom qui dépend des chambres
- # connectés dessus
- if chbres :
- prise_params['nom'] = 'Chambre'
- if len(chbres) > 1 : prise_params['nom'] += 's'
- for chbre in chbres :
- prise_params['nom'] += '_%s%s' % (bat.upper(), chbre)
- else :
- prise_params['nom'] = 'Inconnu'
-
- # Si c'est une chambre d'un personnel de l'ENS, on lui donne
- # le VLAN 21 en untagged
- if chbres:
- if chbres[0] in prises_appartements: # il faudrait faire
- # un truc moins sale
- vlans['appts_untagged'].append(prise)
- prise_params['nom'] += "(appartement ENS)"
-
- params['INTERFACES_CONF'] += self.interface_template % prise_params
-
- # Petite verif
- if not params['uplinks'] or not params['non_uplinks'] :
- raise RuntimeError('Switch sans uplink ou sans prise adhérent.')
-
- def mk_list(liste_prise) :
- """
- transforme une liste de prises en une chaine pour le switch
- exemple : 1, 3, 4, 5, 6, 7, 9, 10, 11, 12 => 1,3-7,9-12
- """
- if not liste_prise : return ''
- liste_prise.sort()
-
- # initialisation
- i = liste_prise.pop(0)
- groupe = [ i, i ]
- result = []
-
- liste_prise.append(9999) # apparaitra jamais dans la liste
-
- while liste_prise :
- nouveau = liste_prise.pop(0)
- if nouveau == groupe[1] + 1 :
- groupe[1] += 1
- else :
- # Ajout du groupe au résultat
- if groupe[0] == groupe[1] :
- result.append(str(groupe[0]))
- else :
- result.append('-'.join(map(str,groupe)))
- # Réinit de groupe
- groupe = [ nouveau, nouveau ]
-
- return ','.join(result)
-
- # Saut de ligne parasite
- params['INTERFACES_CONF'] = params['INTERFACES_CONF'][:-1].encode('utf-8')
-
- # Conversion des listes
- for key in [ 'uplinks', 'non_uplinks' ] :
- params[key] = mk_list(params[key])
- for key, prises in vlans.items() :
- vlans[key]=mk_list(prises)
-
- # Config des vlans spéciaux (adm, wifi et appartements)
- for v in ('adm', 'wifi', 'hotspot', 'appts') :
- params['prises_%s' % v] = ''
- for t in ('tagged' , 'untagged') :
- if vlans['%s_%s' % (v,t)] :
- params['prises_%s' % v] += '\n %s %s' % (t, vlans['%s_%s' % (v,t)])
- # Saut de ligne parasite
- params['prises_%s' % v] = params['prises_%s' % v][4:]
-
- params['prises_default'] = vlans['default']
-
- for name, number in config.vlans.items():
- params["vlan_%s" % name] = number
-
- # Ecriture
- fd = self._open_conf(self.CONF_REP + switch + '.conf')
- my_config = self.config
- if has_dhcp_snooping:
- my_config += self.dhcp_snooping_template
- fd.write(my_config % params)
- fd.close()
- os.chown(self.CONF_REP + switch + '.conf',-1,4)
-
-if __name__ == '__main__' :
- opts, args = getopt.getopt(sys.argv[1:], 'hga', ['get-conf', 'help', 'all', 'header=' ])
- if '-h' in sys.argv or '--help' in sys.argv or len(sys.argv) == 1 :
- print "%s [-g|--get-conf] " % sys.argv[0].split('/')[-1].split('.')[0]
- print "Génération du fichier de configuration des switchs donnés."
- sys.exit(255)
-
- if args[0] == 'all' or 'a' in opts or '--all' in opts :
- switchs = tuple(all_switchs())
- else :
- switchs = tuple(args)
- sw = switch(switchs)
- sw.debug = 1
- sw.reconfigure()
diff --git a/gestion/secret.py b/gestion/secret.py
new file mode 120000
index 00000000..76815799
--- /dev/null
+++ b/gestion/secret.py
@@ -0,0 +1 @@
+secrets_new.py
\ No newline at end of file
diff --git a/gestion/secrets b/gestion/secrets
deleted file mode 120000
index 7e101029..00000000
--- a/gestion/secrets
+++ /dev/null
@@ -1 +0,0 @@
-/etc/crans/secrets/
\ No newline at end of file
diff --git a/gestion/set_droits.sh b/gestion/set_droits.sh
deleted file mode 100755
index a4d1f9ad..00000000
--- a/gestion/set_droits.sh
+++ /dev/null
@@ -1,35 +0,0 @@
-#! /bin/sh
-
-BASE=/usr/scripts/gestion
-
-# On vire les truc de sauvegarde qui peuvent avoir des droits bizarres
-# et ca fait plus propre
-find $BASE -name '*~' -type f -exec rm -f '{}' ';'
-
-chown -R respbats:adm $BASE
-
-set_dr () {
- if [[ $1 = "$BASE/secrets" ]] ; then
- chmod 750 $1
- elif [[ -x $1 ]] ; then
- chmod 775 $1
- elif [[ $1 = "$BASE/clef-wifi" ]]; then
- chmod 600 $1
- elif [[ $1 = "$BASE/clef-encap" ]]; then
- chmod 600 $1
- elif [[ $1 = "$BASE/secrets/secrets.py" ]] || [[ $1 = "$BASE/secrets/secrets.pyc" ]]; then
- chmod 640 $1
- else
- chmod 664 $1
- fi
-}
-
-for i in $(ls $BASE)
-do
- set_dr $BASE/$i
-done
-
-for i in $(ls $BASE/gen_confs)
-do
- set_dr $BASE/gen_confs/$i
-done
diff --git a/sip/sip_multidial.py b/sip/sip_multidial.py
index 98111001..6bab0e78 100755
--- a/sip/sip_multidial.py
+++ b/sip/sip_multidial.py
@@ -2,11 +2,10 @@
# -*- coding: utf-8 -*-
import sys,os,hashlib
+# The fuck is happening here ?
sys.path.append('/usr/scripts/gestion')
sys.path.append('/usr/scripts/')
-sys.path.append('/etc/crans/secrets/')
-import secrets
import lc_ldap.shortcuts
from asterisk_reload_conf import reload_config
diff --git a/sip/sms_queuing b/sip/sms_queuing
index db64b0a4..2d8f5c26 100755
--- a/sip/sms_queuing
+++ b/sip/sms_queuing
@@ -1,10 +1,10 @@
-#!/usr/bin/env python
+#!/bin/bash /usr/scripts/python.sh
# -*- coding: utf-8 -*-
+
from asterisk import Sms
import sys
-sys.path.insert(0, '/usr/scripts/gestion/secrets')
-from secrets import asterisk_sms_passwd
+from gestion import secrets_new as secrets
if __name__ == '__main__' :
sms=Sms("dbname='django' user='crans' host='pgsql.adm.crans.org'", "voip_sms")
- sms.sms_daemon('localhost', 5038, 'sms', asterisk_sms_passwd)
+ sms.sms_daemon('localhost', 5038, 'sms', secrets.get('asterisk_sms_passwd'))
diff --git a/sip/sms_queuing.init b/sip/sms_queuing.init
index 030ef6d1..e288b875 100755
--- a/sip/sms_queuing.init
+++ b/sip/sms_queuing.init
@@ -8,8 +8,8 @@
# Short-Description: Asterisk sms delivery
### END INIT INFO
-DAEMON="/usr/bin/python"
-ARGS="/usr/scripts/sip/sms_queuing"
+DAEMON="/usr/scripts/sip/sms_queuing"
+ARGS=""
PIDFILE="/var/run/sms_queuing.pid"
USER="asterisk"