static const CONF_PARSER section_config[] = {
{"reference", PW_TYPE_STRING_PTR,
- offsetof(rlm_sql_config_section_t, reference), NULL, ".query"},
+ offsetof(sql_acct_section_t, reference), NULL, ".query"},
{"logfile", PW_TYPE_STRING_PTR,
- offsetof(rlm_sql_config_section_t, logfile), NULL, NULL},
+ offsetof(sql_acct_section_t, logfile), NULL, NULL},
{NULL, -1, 0, NULL, NULL}
};
SQL_INST *inst = instance;
paircompare_unregister(PW_SQL_GROUP, sql_groupcmp);
-
+
+ if (inst->config->postauth) free(inst->config->postauth);
+ if (inst->config->accounting) free(inst->config->accounting);
+
if (inst->config) {
int i;
if (inst->config->xlat_name) {
xlat_unregister(inst->config->xlat_name, sql_xlat, instance);
- free(inst->config->xlat_name);
+ cfree(inst->config->xlat_name);
}
/*
static int parse_sub_section(CONF_SECTION *parent,
UNUSED SQL_INST *instance,
- rlm_sql_config_section_t *config,
+ sql_acct_section_t **config,
rlm_components_t comp)
{
CONF_SECTION *cs;
cs = cf_section_sub_find(parent, name);
if (!cs) {
- radlog(L_INFO, "Couldn't find configuration for %s. Will return NOOP for calls from this section.", name);
+ radlog(L_INFO, "Couldn't find configuration for %s. "
+ "Will return NOOP for calls from this section.", name);
- return 1;
+ return 0;
}
- if (cf_section_parse(cs, config, section_config) < 0) {
+ *config = rad_calloc(sizeof(**config));
+ if (cf_section_parse(cs, *config, section_config) < 0) {
radlog(L_ERR, "Failed parsing configuration for section %s",
name);
+ free(*config);
+ *config = NULL;
+
return -1;
}
- config->cs = cs;
+ (*config)->cs = cs;
- return 1;
+ return 0;
}
static int rlm_sql_instantiate(CONF_SECTION * conf, void **instance)
SQL_INST *inst;
const char *xlat_name;
- inst = rad_malloc(sizeof(SQL_INST));
- memset(inst, 0, sizeof(SQL_INST));
+ inst = rad_calloc(sizeof(SQL_INST));
/*
* Export these methods, too. This avoids RTDL_GLOBAL.
inst->sql_select_query = rlm_sql_select_query;
inst->sql_fetch_row = rlm_sql_fetch_row;
- inst->config = rad_malloc(sizeof(SQL_CONFIG));
- memset(inst->config, 0, sizeof(SQL_CONFIG));
+ inst->config = rad_calloc(sizeof(SQL_CONFIG));
inst->cs = conf;
/*
*/
user_profile = pairfind(request->config_items, PW_USER_PROFILE, 0);
- char *profile = user_profile ?
- user_profile->vp_strvalue :
- inst->config->default_profile;
+ const char *profile = user_profile ?
+ user_profile->vp_strvalue :
+ inst->config->default_profile;
if (!profile || !*profile)
goto release;
*
*/
static int rlm_sql_redundant(SQL_INST *inst, REQUEST *request,
- rlm_sql_config_section_t *section)
+ sql_acct_section_t *section)
{
int ret = RLM_MODULE_OK;
static int rlm_sql_accounting(void *instance, REQUEST * request) {
SQL_INST *inst = instance;
- return rlm_sql_redundant(inst, request, &inst->config->accounting);
+ return rlm_sql_redundant(inst, request, inst->config->accounting);
}
#endif
static int rlm_sql_postauth(void *instance, REQUEST * request) {
SQL_INST *inst = instance;
- return rlm_sql_redundant(inst, request, &inst->config->postauth);
+ return rlm_sql_redundant(inst, request, inst->config->postauth);
}
/*
* Sections where we dynamically resolve the config entry to use,
* by xlating reference.
*/
-typedef struct rlm_sql_config_section {
+typedef struct sql_acct_section {
CONF_SECTION *cs;
- char *reference;
+ const char *reference;
- char *logfile;
-} rlm_sql_config_section_t;
+ const char *logfile;
+} sql_acct_section_t;
typedef struct sql_config {
- char *sql_driver;
- char *sql_server;
- char *sql_port;
- char *sql_login;
- char *sql_password;
- char *sql_db;
- char *sql_file; /* for sqlite */
- char *query_user;
- char *default_profile;
- char *nas_query;
- char *authorize_check_query;
- char *authorize_reply_query;
- char *authorize_group_check_query;
- char *authorize_group_reply_query;
- char *simul_count_query;
- char *simul_verify_query;
- char *groupmemb_query;
- int do_clients;
- int read_groups;
- char *logfile;
- char *xlat_name;
- int deletestalesessions;
- char *allowed_chars;
- int query_timeout;
+ const char *xlat_name;
+
+ const char *sql_driver;
+ const char *sql_server;
+ const char *sql_port;
+ const char *sql_login;
+ const char *sql_password;
+ const char *sql_db;
+ const char *sql_file; /* for sqlite */
+
+ const char *query_user;
+ const char *default_profile;
+
+ const char *nas_query;
+ const char *authorize_check_query;
+ const char *authorize_reply_query;
+ const char *authorize_group_check_query;
+ const char *authorize_group_reply_query;
+ const char *simul_count_query;
+ const char *simul_verify_query;
+ const char *groupmemb_query;
+
+ int const do_clients;
+ int const read_groups;
+ const char *logfile;
+
+ int const deletestalesessions;
+ const char *allowed_chars;
+ int const query_timeout;
void *localcfg; /* individual driver config */
/*
*/
/* Section configurations */
- rlm_sql_config_section_t postauth;
- rlm_sql_config_section_t accounting;
+ sql_acct_section_t *postauth;
+ sql_acct_section_t *accounting;
} SQL_CONFIG;
typedef struct sql_socket {
int sql_read_clients(SQLSOCK * sqlsocket);
int sql_dict_init(SQLSOCK * sqlsocket);
void rlm_sql_query_log(SQL_INST *inst, REQUEST *request,
- rlm_sql_config_section_t *section, char *querystr);
+ sql_acct_section_t *section, char *querystr);
int rlm_sql_select_query(SQLSOCK **sqlsocket, SQL_INST *inst, char *query);
int rlm_sql_query(SQLSOCK **sqlsocket, SQL_INST *inst, char *query);
int rlm_sql_fetch_row(SQLSOCK **sqlsocket, SQL_INST *inst);