freeradius: DBG_FREERADIUS=1 pour les tests

This commit is contained in:
Daniel STAN 2014-11-17 12:27:25 +01:00
parent 5bc5794af9
commit 0d7b64a56c
2 changed files with 30 additions and 11 deletions

View file

@ -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

View file

@ -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