From 0d7b64a56c440de6988a63717d4770f08bd408a1 Mon Sep 17 00:00:00 2001 From: Daniel STAN Date: Mon, 17 Nov 2014 12:27:25 +0100 Subject: [PATCH] freeradius: DBG_FREERADIUS=1 pour les tests --- freeradius/auth.py | 38 +++++++++++++++++++++++++++----------- testing.sh | 3 +++ 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/freeradius/auth.py b/freeradius/auth.py index 8b22e2f9..1590a743 100644 --- a/freeradius/auth.py +++ b/freeradius/auth.py @@ -1,4 +1,3 @@ -#!/bin/bash /usr/scripts/python.sh # ⁻*- coding: utf-8 -*- # # Ce fichier contient la définition de plusieurs fonctions d'interface à freeradius @@ -7,10 +6,10 @@ # import logging -import traceback import netaddr import radiusd # Module magique freeradius (radiusd.py is dummy) import ldap +import os import lc_ldap.shortcuts from lc_ldap.crans_utils import escape as escape_ldap @@ -20,12 +19,7 @@ from gestion.config.config import vlans from gestion.gen_confs.trigger import trigger_generate_cochon as trigger_generate import annuaires_pg -# Voilà, pour faire marcher le V6Only, il faut se retirer l'ipv4 de sa machine -# ou en enregistrer une nouvelle (sans ipv4) avec une autre mac. Moi j'ai la -# flemme donc je hardcode les MAC qui doivent toujours être placées sur le vlan v6only -test_v6 = [ - u'00:26:c7:a6:9e:16', # cerveaulent (machine de b2moo) -] +TEST_SERVER = bool(os.getenv('DBG_FREERADIUS', False)) USERNAME_SUFFIX_WIFI = '.wifi.crans.org' USERNAME_SUFFIX_FIL = '.crans.org' @@ -218,7 +212,9 @@ def register_mac(data, machine, conn): def instantiate(p, *conns): """Utile pour initialiser les connexions ldap une première fois (otherwise, do nothing)""" - pass + logger.info('Instantiation') + if TEST_SERVER: + logger.info('DBG_FREERADIUS is enabled') @radius_event def authorize_wifi(data): @@ -295,6 +291,16 @@ def post_auth_wifi(data): # WiFi : Pour l'instant, on ne met pas d'infos de vlans dans la réponse # les bornes wifi ont du mal avec cela + if TEST_SERVER: + return (radiusd.RLM_MODULE_UPDATED, + ( + ("Tunnel-Type", "VLAN"), + ("Tunnel-Medium-Type", "IEEE-802"), + ("Tunnel-Private-Group-Id", '%d' % vlan_id), + ), + () + ) + return radiusd.RLM_MODULE_OK @radius_event @@ -364,8 +370,6 @@ def decide_vlan(data, is_wifi, conn): if not machine['ipHostNumber']: decision = 'v6only', u'No IPv4' - elif unicode(machine['macAddress'][0]) in test_v6: - decision = 'v6only', u'Test machine v6' # TODO: condition plus générique: # netaddr.all_matching_cidr(machine['ipHostNumber'][0].value, # config.NETs_primaires['personnel-ens']) @@ -412,6 +416,18 @@ def decide_vlan(data, is_wifi, conn): if force_ma: decision = decision[0], decision[1] + u' (force MA)' + # Debug: si la machine a un commentaire de la forme "force_vlan: ..." + if TEST_SERVER: + for info in machine.get('info', []): + txt = info.value + if txt.startswith(u'force_vlan:'): + txt = txt[len(u'force_vlan:'):] + vlan, reason = txt.split(',') + vlan = vlan.encode('ascii', errors='ignore').strip() + reason = u"%s (was %r)" % (reason.strip(), decision) + + decision = (vlan, reason) + return (port,) + decision @radius_event diff --git a/testing.sh b/testing.sh index 0237fc94..02a33528 100644 --- a/testing.sh +++ b/testing.sh @@ -14,3 +14,6 @@ export DBG_ANNUAIRE=1 # NB: noter que pour le moment, cela ne marche pas avec tous les scripts. # Attention à ne pas envoyer de mails aux adhérents par erreurs ! export DBG_MAIL=`whoami`+test@crans.org + +# Serveur freeradius de test ? +export DBG_FREERADIUS=1