#ifndef RADIUS_MODULES_H
#define RADIUS_MODULES_H
#include <freeradius-devel/ident.h>
RCSIDH(modules_h, "$Id$")
#include <freeradius-devel/conffile.h>
typedef int (*packetmethod)(void *instance, REQUEST *request);
enum {
RLM_COMPONENT_AUTH = 0,
RLM_COMPONENT_AUTZ,
RLM_COMPONENT_PREACCT,
RLM_COMPONENT_ACCT,
RLM_COMPONENT_SESS,
RLM_COMPONENT_PRE_PROXY,
RLM_COMPONENT_POST_PROXY,
RLM_COMPONENT_POST_AUTH,
#ifdef WITH_COA
RLM_COMPONENT_RECV_COA,
RLM_COMPONENT_SEND_COA,
#endif
RLM_COMPONENT_COUNT
};
#define RLM_TYPE_THREAD_SAFE (0 << 0)
#define RLM_TYPE_THREAD_UNSAFE (1 << 0)
#define RLM_TYPE_CHECK_CONFIG_SAFE (1 << 1)
#define RLM_TYPE_HUP_SAFE (1 << 2)
#define RLM_MODULE_MAGIC_NUMBER ((uint32_t) (0xf4ee4ad2))
#define RLM_MODULE_INIT RLM_MODULE_MAGIC_NUMBER
typedef struct module_t {
uint32_t magic;
const char *name;
int type;
int (*instantiate)(CONF_SECTION *mod_cs, void **instance);
int (*detach)(void *instance);
packetmethod methods[RLM_COMPONENT_COUNT];
} module_t;
enum {
RLM_MODULE_REJECT,
RLM_MODULE_FAIL,
RLM_MODULE_OK,
RLM_MODULE_HANDLED,
RLM_MODULE_INVALID,
RLM_MODULE_USERLOCK,
RLM_MODULE_NOTFOUND,
RLM_MODULE_NOOP,
RLM_MODULE_UPDATED,
RLM_MODULE_NUMCODES
};
int setup_modules(int, CONF_SECTION *);
int detach_modules(void);
int module_hup(CONF_SECTION *modules);
int module_authorize(int type, REQUEST *request);
int module_authenticate(int type, REQUEST *request);
int module_preacct(REQUEST *request);
int module_accounting(int type, REQUEST *request);
int module_checksimul(int type, REQUEST *request, int maxsimul);
int module_pre_proxy(int type, REQUEST *request);
int module_post_proxy(int type, REQUEST *request);
int module_post_auth(int type, REQUEST *request);
#ifdef WITH_COA
int module_recv_coa(int type, REQUEST *request);
int module_send_coa(int type, REQUEST *request);
#define MODULE_NULL_COA_FUNCS ,NULL,NULL
#else
#define MODULE_NULL_COA_FUNCS
#endif
int indexed_modcall(int comp, int idx, REQUEST *request);
int virtual_servers_load(CONF_SECTION *config);
void virtual_servers_free(time_t when);
#endif