diff --git a/freeradius/__init__.py b/freeradius/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/freeradius/radiusd.py b/freeradius/radiusd.py new file mode 100644 index 00000000..87c9b64d --- /dev/null +++ b/freeradius/radiusd.py @@ -0,0 +1,58 @@ +#! /usr/bin/env python +# +# Definitions for RADIUS programs +# +# Copyright 2002 Miguel A.L. Paraz +# +# This should only be used when testing modules. +# Inside freeradius, the 'radiusd' Python module is created by the C module +# and the definitions are automatically created. +# +# $Id$ + +# from modules.h + +RLM_MODULE_REJECT = 0 +RLM_MODULE_FAIL = 1 +RLM_MODULE_OK = 2 +RLM_MODULE_HANDLED = 3 +RLM_MODULE_INVALID = 4 +RLM_MODULE_USERLOCK = 5 +RLM_MODULE_NOTFOUND = 6 +RLM_MODULE_NOOP = 7 +RLM_MODULE_UPDATED = 8 +RLM_MODULE_NUMCODES = 9 + + +# from radiusd.h +L_DBG = 1 +L_AUTH = 2 +L_INFO = 3 +L_ERR = 4 +L_PROXY = 5 +L_CONS = 128 + +OP={ '{':2, '}':3, '(':4, ')':5, ',':6, ';':7, '+=':8, '-=':9, ':=':10, + '=':11, '!=':12, '>=':13, '>':14, '<=':15, '<':16, '=~':17, '!~':18, '=*':19, '!*':20, + '==':21 , '#':22 } + +OP_TRY = (':=', '+=', '-=', '=' ) + +def resolve(*lines): + tuples = [] + for line in lines: + for op in OP_TRY: + arr = line.rsplit(op) + if len(arr)==2: + tuples.append((str(arr[0].strip()),OP[op],str(arr[1].strip()))) + break + return tuple(tuples) + +# log function +def radlog(level, msg): + import sys + sys.stdout.write(msg + '\n') + + level = level + + diff --git a/freeradius/radiusd_test.py b/freeradius/radiusd_test.py new file mode 100644 index 00000000..d43391ff --- /dev/null +++ b/freeradius/radiusd_test.py @@ -0,0 +1,99 @@ +#! /usr/bin/env python +# ⁻*- coding: utf-8 -*- +# +# Draft de fichier d'authentification +# +# Ce fichier contient la définition de plusieurs fonctions d'interface à freeradius +# qui peuvent être appelées (suivant les configurations) à certains moment de +# l'éxécution. +# +# Une telle fonction prend un uniquement argument, qui est une liste de tuples +# (clé, valeur) +# et renvoie un triplet dont les composantes sont : +# * le code de retour (voir radiusd.RLM_MODULE_* ) +# * un tuple de couples (clé, valeur) pour les valeurs de réponse +# (access ok et autres trucs du genre) +# * un tuple de couples (clé, valeur) pour les valeurs internes à mettre à jour +# (mot de passe par exemple) +# +# Voir des exemples plus complets ici: +# https://github.com/FreeRADIUS/freeradius-server/blob/master/src/modules/rlm_python/ + +import radiusd + +def instantiate(p): + """Appelé lors de l'instantiation du module""" + print "*** instantiate ***" + print p + +def authorize(p): + """Section authorize + Éxécuté avant l'authentification proprement dite. On peut ainsi remplir les + champs login et mot de passe qui serviront ensuite à l'authentification + (MschapV2/PEAP ou MschapV2/TTLS)""" + print "*** authorize ***" + radiusd.radlog(radiusd.L_INFO, '*** radlog call in authorize ***') + print p + # À des fins de test, mon mot de passe est bidon + mdp = 'prout' + return (radiusd.RLM_MODULE_UPDATED, + (), + (("Cleartext-Password", mdp),), + #(('Session-Timeout', str(sessionTimeout)),), + #(('Auth-Type', 'python'),), + ) + return radiusd.RLM_MODULE_OK + +def preacct(p): + print "*** preacct ***" + print p + return radiusd.RLM_MODULE_OK + +def accounting(p): + print "*** accounting ***" + radiusd.radlog(radiusd.L_INFO, '*** radlog call in accounting (0) ***') + print + print p + return radiusd.RLM_MODULE_OK + +def pre_proxy(p): + print "*** pre_proxy ***" + print p + return radiusd.RLM_MODULE_OK + +def post_proxy(p): + print "*** post_proxy ***" + print p + return radiusd.RLM_MODULE_OK + +def post_auth(p): + """Appelé une fois que l'authentification est ok. + On peut rajouter quelques éléments dans la réponse radius ici. + Comme par exemple le vlan sur lequel placer le client""" + + print "*** post_auth ***" + print p + # Utiliser RLM_MODULE_OK ? + return (radiusd.RLM_MODULE_UPDATED, + ( + ("Tunnel-Type", "VLAN"), + ("Tunnel-Medium-Type", "IEEE-802"), + ("Tunnel-Private-Group-Id", 42), + ), + ) + +def recv_coa(p): + print "*** recv_coa ***" + print p + return radiusd.RLM_MODULE_OK + +def send_coa(p): + print "*** send_coa ***" + print p + return radiusd.RLM_MODULE_OK + + +def detach(): + """Appelé lors du déchargement du module (enfin, normalement)""" + print "*** goodbye from example.py ***" + return radiusd.RLM_MODULE_OK