[PATCH 1/10] rlm_python: 01---sanitize-rlm-python-t.patch
Michael Griego
mgriego at utdallas.edu
Mon Jan 30 23:31:59 CET 2006
Please post patches to bugs.freeradius.org.
--Mike
Paul P Komkoff Jr wrote:
> - Sanitize rlm_python_t
> - Remove typedef
> - Introduce global PyObject radiusd_module
> (anyway we have only one interpreter)
>
> ---
> commit 20b0202331f6bc26c46d3c91caf3c209a5958e01
> tree 11c4bc223c448c60c4adce48e3fa56840be53e6d
> parent fef24dfbd7872636bc466bb28637578b1f8604ca
> author <stingray at boxster64.stingr.net> Sun, 29 Jan 2006 14:44:46 +0300
> committer <stingray at boxster64.stingr.net> Sun, 29 Jan 2006 14:44:46 +0300
>
> src/modules/rlm_python/rlm_python.c | 128 ++++++++++++++++-------------------
> 1 files changed, 60 insertions(+), 68 deletions(-)
>
> diff --git a/src/modules/rlm_python/rlm_python.c b/src/modules/rlm_python/rlm_python.c
> --- a/src/modules/rlm_python/rlm_python.c
> +++ b/src/modules/rlm_python/rlm_python.c
> @@ -42,55 +42,43 @@ static const char rcsid[] = "$Id: rlm_py
> * a lot cleaner to do so, and a pointer to the structure can
> * be used as the instance handle.
> */
> -typedef struct rlm_python_t {
> - /* Config section */
>
> - /* Names of modules */
> - char
> - *mod_instantiate,
> - *mod_authorize,
> - *mod_authenticate,
> - *mod_preacct,
> - *mod_accounting,
> - *mod_checksimul,
> - *mod_detach,
> -
> - /* Names of functions */
> - *func_instantiate,
> - *func_authorize,
> - *func_authenticate,
> - *func_preacct,
> - *func_accounting,
> - *func_checksimul,
> - *func_detach;
> -
> -
> - /* End Config section */
> -
> -
> - /* Python objects for modules */
> - PyObject
> - *pModule_builtin,
> - *pModule_instantiate,
> - *pModule_authorize,
> - *pModule_authenticate,
> - *pModule_preacct,
> - *pModule_accounting,
> - *pModule_checksimul,
> - *pModule_detach,
> -
> -
> - /* Functions */
> -
> - *pFunc_instantiate,
> - *pFunc_authorize,
> - *pFunc_authenticate,
> - *pFunc_preacct,
> - *pFunc_accounting,
> - *pFunc_checksimul,
> - *pFunc_detach;
> +struct rlm_python_t {
> + char *mod_instantiate;
> + char *mod_authorize;
> + char *mod_authenticate;
> + char *mod_preacct;
> + char *mod_accounting;
> + char *mod_checksimul;
> + char *mod_detach;
> +
> + /* Names of functions */
> + char *func_instantiate;
> + char *func_authorize;
> + char *func_authenticate;
> + char *func_preacct;
> + char *func_accounting;
> + char *func_checksimul;
> + char *func_detach;
> +
> + PyObject *pModule_instantiate;
> + PyObject *pModule_authorize;
> + PyObject *pModule_authenticate;
> + PyObject *pModule_preacct;
> + PyObject *pModule_accounting;
> + PyObject *pModule_checksimul;
> + PyObject *pModule_detach;
> +
> + /* Functions */
> + PyObject *pFunc_instantiate;
> + PyObject *pFunc_authorize;
> + PyObject *pFunc_authenticate;
> + PyObject *pFunc_preacct;
> + PyObject *pFunc_accounting;
> + PyObject *pFunc_checksimul;
> + PyObject *pFunc_detach;
> +};
>
> -} rlm_python_t;
>
> /*
> * A mapping of configuration file names to internal variables.
> @@ -103,44 +91,49 @@ typedef struct rlm_python_t {
> */
> static CONF_PARSER module_config[] = {
> { "mod_instantiate", PW_TYPE_STRING_PTR,
> - offsetof(rlm_python_t, mod_instantiate), NULL, NULL},
> + offsetof(struct rlm_python_t, mod_instantiate), NULL, NULL},
> { "func_instantiate", PW_TYPE_STRING_PTR,
> - offsetof(rlm_python_t, func_instantiate), NULL, NULL},
> + offsetof(struct rlm_python_t, func_instantiate), NULL, NULL},
>
> { "mod_authorize", PW_TYPE_STRING_PTR,
> - offsetof(rlm_python_t, mod_authorize), NULL, NULL},
> + offsetof(struct rlm_python_t, mod_authorize), NULL, NULL},
> { "func_authorize", PW_TYPE_STRING_PTR,
> - offsetof(rlm_python_t, func_authorize), NULL, NULL},
> + offsetof(struct rlm_python_t, func_authorize), NULL, NULL},
>
> { "mod_authenticate", PW_TYPE_STRING_PTR,
> - offsetof(rlm_python_t, mod_authenticate), NULL, NULL},
> + offsetof(struct rlm_python_t, mod_authenticate), NULL, NULL},
> { "func_authenticate", PW_TYPE_STRING_PTR,
> - offsetof(rlm_python_t, func_authenticate), NULL, NULL},
> + offsetof(struct rlm_python_t, func_authenticate), NULL, NULL},
>
> { "mod_preacct", PW_TYPE_STRING_PTR,
> - offsetof(rlm_python_t, mod_preacct), NULL, NULL},
> + offsetof(struct rlm_python_t, mod_preacct), NULL, NULL},
> { "func_preacct", PW_TYPE_STRING_PTR,
> - offsetof(rlm_python_t, func_preacct), NULL, NULL},
> + offsetof(struct rlm_python_t, func_preacct), NULL, NULL},
>
> { "mod_accounting", PW_TYPE_STRING_PTR,
> - offsetof(rlm_python_t, mod_accounting), NULL, NULL},
> + offsetof(struct rlm_python_t, mod_accounting), NULL, NULL},
> { "func_accounting", PW_TYPE_STRING_PTR,
> - offsetof(rlm_python_t, func_accounting), NULL, NULL},
> + offsetof(struct rlm_python_t, func_accounting), NULL, NULL},
>
> { "mod_checksimul", PW_TYPE_STRING_PTR,
> - offsetof(rlm_python_t, mod_checksimul), NULL, NULL},
> + offsetof(struct rlm_python_t, mod_checksimul), NULL, NULL},
> { "func_checksimul", PW_TYPE_STRING_PTR,
> - offsetof(rlm_python_t, func_checksimul), NULL, NULL},
> + offsetof(struct rlm_python_t, func_checksimul), NULL, NULL},
>
> { "mod_detach", PW_TYPE_STRING_PTR,
> - offsetof(rlm_python_t, mod_detach), NULL, NULL},
> + offsetof(struct rlm_python_t, mod_detach), NULL, NULL},
> { "func_detach", PW_TYPE_STRING_PTR,
> - offsetof(rlm_python_t, func_detach), NULL, NULL},
> + offsetof(struct rlm_python_t, func_detach), NULL, NULL},
>
>
> { NULL, -1, 0, NULL, NULL } /* end the list */
> };
>
> +
> +/* Let assume that radiusd module is only one since we have only one intepreter */
> +
> +static PyObject *radiusd_module = NULL;
> +
> /*
> * radiusd Python functions
> */
> @@ -570,8 +563,7 @@ static int load_python_function(const ch
> */
> static int python_instantiate(CONF_SECTION *conf, void **instance)
> {
> - rlm_python_t *data;
> - PyObject *module;
> + struct rlm_python_t *data;
> int idx;
>
> /*
> @@ -598,7 +590,7 @@ static int python_instantiate(CONF_SECTI
> */
>
> /* Code */
> - if ((module = data->pModule_builtin =
> + if ((radiusd_module =
> Py_InitModule3("radiusd", radiusd_methods,
> "FreeRADIUS Module.")) == NULL) {
>
> @@ -611,7 +603,7 @@ static int python_instantiate(CONF_SECTI
> * Load constants into module
> */
> for (idx=0; constants[idx].name; idx++)
> - if ((PyModule_AddIntConstant(module, constants[idx].name, constants[idx].value)) == -1) {
> + if ((PyModule_AddIntConstant(radiusd_module, constants[idx].name, constants[idx].value)) == -1) {
>
> radlog(L_ERR, "Python AddIntConstant failed");
> }
> @@ -717,15 +709,15 @@ static int python_detach(void *instance)
> /* Default return value is failure */
> return_value = -1;
>
> - if (((rlm_python_t *)instance)->pFunc_detach &&
> - PyCallable_Check(((rlm_python_t *)instance)->pFunc_detach)) {
> + if (((struct rlm_python_t *)instance)->pFunc_detach &&
> + PyCallable_Check(((struct rlm_python_t *)instance)->pFunc_detach)) {
>
> PyObject *pArgs, *pValue;
>
> /* call the function with an empty tuple */
>
> pArgs = PyTuple_New(0);
> - pValue = PyObject_CallObject(((rlm_python_t *)instance)->pFunc_detach,
> + pValue = PyObject_CallObject(((struct rlm_python_t *)instance)->pFunc_detach,
> pArgs);
>
> if (pValue == NULL) {
>
More information about the Freeradius-Devel
mailing list