freeradius: draft de réécriture
Parce que je préfère autant tester avec les fichiers dans le bon path.
This commit is contained in:
parent
52a78bac72
commit
0a22e604af
3 changed files with 157 additions and 0 deletions
0
freeradius/__init__.py
Normal file
0
freeradius/__init__.py
Normal file
58
freeradius/radiusd.py
Normal file
58
freeradius/radiusd.py
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
#! /usr/bin/env python
|
||||||
|
#
|
||||||
|
# Definitions for RADIUS programs
|
||||||
|
#
|
||||||
|
# Copyright 2002 Miguel A.L. Paraz <mparaz@mparaz.com>
|
||||||
|
#
|
||||||
|
# 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
|
||||||
|
|
||||||
|
|
99
freeradius/radiusd_test.py
Normal file
99
freeradius/radiusd_test.py
Normal file
|
@ -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
|
Loading…
Add table
Add a link
Reference in a new issue