]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
malloc sections at runtime
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Sun, 9 Dec 2012 18:26:38 +0000 (18:26 +0000)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Sun, 9 Dec 2012 18:26:38 +0000 (18:26 +0000)
src/modules/rlm_sql/drivers/rlm_sql_null/rlm_sql_null.c
src/modules/rlm_sql/rlm_sql.c
src/modules/rlm_sql/rlm_sql.h
src/modules/rlm_sql/sql.c
src/modules/rlm_sqlhpwippool/rlm_sqlhpwippool.c

index d2a4239f30ceabb8e4cde05f539c84878845b4f2..26673735c7d8b2842d4da2c1c8fc642aea6a3c39 100644 (file)
@@ -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;
 }
 
index c243754adcdcdf7d23d0fd938a9e0cc47d18a044..32fbec8d618e97a5ff1c5a5d0a8fb43ad02087de 100644 (file)
@@ -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); 
 }
 
 /*
index 160d5eb92df42ca60d22c6a8c83074577e1e14a4..993ad8cd6571aa3f1e3c9e9a38a74fbc59df93ef 100644 (file)
@@ -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);
index f2e1d2b99c1c256de1c2d8852814b9523f2de7db..046dba6b68f68796d6a0879875cdfcb0d6eb4d30 100644 (file)
@@ -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;
index 92976c8d6e1be8efbd4127594d95d9d6c7f706b2..b5fad874b910c53b7ccb919da1c76a0a1fd2e39b 100644 (file)
@@ -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;
        }