Hello everybody, here are my Steps how i created an C++ Module for FreeRadius. - *Adaptions in the radiusd.conf* Create an new Module Section like: modules { cpp { … } } - Creating an new Directory in the modules Directory I created an new Directory named "*rlm_cpp*" where I putted an Makefile and my *rlm_cpp.cpp* File *Makefile:* *TARGET = rlm_cpp* *SRCS = rlm_cpp.cpp * *HEADERS = RLM_CFLAGS = -I/usr/include RLM_LIBS = -lc RLM_INSTALL = install-example ## this uses the RLM_CFLAGS and RLM_LIBS and SRCS defs to make TARGET. include ../rules.mak $(LT_OBJS): $(HEADERS) ## the rule that RLM_INSTALL tells the parent rules.mak to use. install-example: touch .* My outgoing rlm_cpp.cpp File was the *.c File I took. Then I need to change every function of this file like this: * extern "C"* { static int cpp_authorize(void *instance, REQUEST *request) { ... } } Then I added two DEFINES at the TOP of my rlm_cpp.cpp File, because the two words are reserved names in in C. * #define operator op3578000 #define template tem34123* At the end I needed to change the the struct. First I changed the struct in radiusd.conf struct auth_req { ... home_server*_t * *home_server ... } typedef struct radclient { ... home_server*_t * *coa_server; ... } RADCLIENT; Also change the Typedef to: typedef struct home_server { ... }home_server*_t;* Every struct in the Source of FreeRadius need to be changed to * home_server_t*! now you should made finallay the main make and see the all should be fine compiled! at the end run "make install " and implement the new C++ Module in an Section in the radiusd.conf and it will run! My class looks so: #define operator op3578000 #define template tem34123 extern "C" { #include <freeradius-devel/ident.h> #include <stdio.h> #include <stdlib.h> #include <string.h> RCSID("$Id$") #include <freeradius-devel/radiusd.h> #include <freeradius-devel/modules.h> typedef struct rlm_cpp_t { int boolean; int value; char *string; uint32_t ipaddr; } rlm_cpp_t; extern "C" const CONF_PARSER module_config[] = { { "integer", PW_TYPE_INTEGER, offsetof(rlm_cpp_t,value), NULL, "1" }, { "boolean", PW_TYPE_BOOLEAN, offsetof(rlm_cpp_t,boolean), NULL, "no"}, { "string", PW_TYPE_STRING_PTR, offsetof(rlm_cpp_t,string), NULL, NULL}, { "ipaddr", PW_TYPE_IPADDR, offsetof(rlm_cpp_t,ipaddr), NULL, "*"}, { NULL, -1, 0, NULL, NULL } /* end the list */ }; extern "C" { static int cpp_instantiate(CONF_SECTION *conf, void **instance) { ... return RLM_MODULE_OK; } } extern "C" { static int cpp_post_auth(void *instance, REQUEST *request) { VALUE_PAIR *reply; VALUE_PAIR *state; ... return RLM_MODULE_OK; } } extern "C" { static int cpp_preacct(void *instance, REQUEST *request) { /* quiet the compiler */ instance = instance; request = request; ... return RLM_MODULE_OK; } } extern "C" { static int cpp_authorize(void *instance, REQUEST *request) { /* quiet the compiler */ instance = instance; request = request; ... return RLM_MODULE_OK; } } extern "C" { module_t rlm_cpp = { RLM_MODULE_INIT, "cpp", RLM_TYPE_THREAD_SAFE, /* type */ cpp_instantiate, /* instantiation */ NULL, /* detach */ { NULL, /* authentication */ cpp_authorize, /* authorization */ cpp_preacct, /* preaccounting */ NULL, /* accounting */ NULL, /* checksimul */ NULL, /* pre-proxy */ NULL, /* post-proxy */ cpp_post_auth /* post-auth */ }, }; } Greetz Patrick