From: Arran Cudbard-Bell Date: Sun, 9 Dec 2012 18:26:38 +0000 (+0000) Subject: malloc sections at runtime X-Git-Tag: release_3_0_0_beta1~1404 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3cb6771112db0911fafbfbc4dc11fb927b2c9957;p=thirdparty%2Ffreeradius-server.git malloc sections at runtime --- diff --git a/src/modules/rlm_sql/drivers/rlm_sql_null/rlm_sql_null.c b/src/modules/rlm_sql/drivers/rlm_sql_null/rlm_sql_null.c index d2a4239f30c..26673735c7d 100644 --- a/src/modules/rlm_sql/drivers/rlm_sql_null/rlm_sql_null.c +++ b/src/modules/rlm_sql/drivers/rlm_sql_null/rlm_sql_null.c @@ -42,7 +42,7 @@ static const void *fake = "fake"; *************************************************************************/ static int sql_init_socket(SQLSOCK *sqlsocket, UNUSED SQL_CONFIG *config) { - sqlsocket->conn = fake; + memcpy(&sqlsocket->conn, &fake, sizeof(sqlsocket->conn)); return 0; } diff --git a/src/modules/rlm_sql/rlm_sql.c b/src/modules/rlm_sql/rlm_sql.c index c243754adcd..32fbec8d618 100644 --- a/src/modules/rlm_sql/rlm_sql.c +++ b/src/modules/rlm_sql/rlm_sql.c @@ -41,10 +41,10 @@ RCSID("$Id$") 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} }; @@ -758,7 +758,10 @@ static int rlm_sql_detach(void *instance) 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; @@ -766,7 +769,7 @@ static int rlm_sql_detach(void *instance) if (inst->config->xlat_name) { xlat_unregister(inst->config->xlat_name, sql_xlat, instance); - free(inst->config->xlat_name); + cfree(inst->config->xlat_name); } /* @@ -810,7 +813,7 @@ static int rlm_sql_detach(void *instance) 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; @@ -819,21 +822,26 @@ static int parse_sub_section(CONF_SECTION *parent, 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) @@ -841,8 +849,7 @@ 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. @@ -855,8 +862,7 @@ static int rlm_sql_instantiate(CONF_SECTION * conf, void **instance) 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; /* @@ -1125,9 +1131,9 @@ static int rlm_sql_authorize(void *instance, REQUEST * request) */ 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; @@ -1176,7 +1182,7 @@ static int rlm_sql_authorize(void *instance, REQUEST * request) * */ 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; @@ -1311,7 +1317,7 @@ static int rlm_sql_redundant(SQL_INST *inst, REQUEST *request, 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 @@ -1508,7 +1514,7 @@ static int rlm_sql_checksimul(void *instance, REQUEST * request) { 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); } /* diff --git a/src/modules/rlm_sql/rlm_sql.h b/src/modules/rlm_sql/rlm_sql.h index 160d5eb92df..993ad8cd657 100644 --- a/src/modules/rlm_sql/rlm_sql.h +++ b/src/modules/rlm_sql/rlm_sql.h @@ -25,39 +25,44 @@ typedef char** SQL_ROW; * 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 */ /* @@ -66,8 +71,8 @@ typedef struct sql_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 { @@ -130,7 +135,7 @@ int sql_read_naslist(SQLSOCK * sqlsocket); 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); diff --git a/src/modules/rlm_sql/sql.c b/src/modules/rlm_sql/sql.c index f2e1d2b99c1..046dba6b68f 100644 --- a/src/modules/rlm_sql/sql.c +++ b/src/modules/rlm_sql/sql.c @@ -46,8 +46,7 @@ static void *sql_conn_create(void *ctx) SQL_INST *inst = ctx; SQLSOCK *sqlsocket; - sqlsocket = rad_malloc(sizeof(*sqlsocket)); - memset(sqlsocket, 0, sizeof(*sqlsocket)); + sqlsocket = rad_calloc(sizeof(*sqlsocket)); rcode = (inst->module->sql_init_socket)(sqlsocket, inst->config); if (rcode == 0) { @@ -412,7 +411,7 @@ int sql_getvpdata(SQL_INST * inst, SQLSOCK **sqlsocket, VALUE_PAIR **pair, char * Log the query to a file. */ void rlm_sql_query_log(SQL_INST *inst, REQUEST *request, - rlm_sql_config_section_t *section, char *query) + sql_acct_section_t *section, char *query) { int fd; const char *filename = NULL; diff --git a/src/modules/rlm_sqlhpwippool/rlm_sqlhpwippool.c b/src/modules/rlm_sqlhpwippool/rlm_sqlhpwippool.c index 92976c8d6e1..b5fad874b91 100644 --- a/src/modules/rlm_sqlhpwippool/rlm_sqlhpwippool.c +++ b/src/modules/rlm_sqlhpwippool/rlm_sqlhpwippool.c @@ -112,7 +112,7 @@ static int nvp_vquery(unsigned int line, rlm_sqlhpwippool_t *data, if (rlm_sql_query(&sqlsock, data->sqlinst, query)) { nvp_log(__LINE__, data, L_ERR, "nvp_vquery(): query from line %u: %s", - line, (char *)(data->db->sql_error)(sqlsock, data->sqlinst->config)); + line, (const char *)(data->db->sql_error)(sqlsock, data->sqlinst->config)); return 0; }