And another global gone...
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Sun, 23 Mar 2014 20:43:23 +0000 (20:43 +0000)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Sun, 23 Mar 2014 20:43:30 +0000 (20:43 +0000)
src/include/radiusd.h
src/main/mainconfig.c
src/main/radiusd.c
src/main/unittest.c
src/modules/rlm_sql/drivers/rlm_sql_sqlite/rlm_sql_sqlite.c

index d3c6f29..90a3948 100644 (file)
@@ -507,7 +507,6 @@ extern log_debug_t  debug_flag;
 extern char const      *radacct_dir;
 extern char const      *radlog_dir;
 extern char const      *radlib_dir;
-extern char const      *radius_dir;
 extern char const      *radius_libdir;
 extern uint32_t                expiration_seconds;
 extern bool            log_stripped_names;
@@ -697,6 +696,8 @@ extern              void thread_pool_queue_stats(int array[RAD_LISTEN_MAX], int pps[2]);
 /* Define a global config structure */
 extern struct main_config_t mainconfig;
 
+void set_radius_dir(char const *path);
+char const *get_radius_dir(void);
 int read_mainconfig(int reload);
 int free_mainconfig(void);
 void hup_mainconfig(void);
index fc8163a..d7a229f 100644 (file)
@@ -97,6 +97,8 @@ static char const     *run_dir = NULL;
 static char            *syslog_facility = NULL;
 static bool            do_colourise = false;
 
+static char const      *radius_dir = NULL;     //!< Path to raddb directory
+
 
 /*
  *  Security configuration for the server.
@@ -726,6 +728,30 @@ static int switch_users(CONF_SECTION *cs)
 }
 #endif /* HAVE_SETUID */
 
+/** Set the global radius config directory.
+ *
+ * @param path to config dir root e.g. /usr/local/etc/raddb
+ */
+void set_radius_dir(char const *path)
+{
+       if (radius_dir) {
+               char *p;
+
+               memcpy(&p, &radius_dir, sizeof(*p));
+               talloc_free(p);
+               radius_dir = NULL;
+       }
+       if (path) radius_dir = talloc_strdup(talloc_autofree_context(), path);
+}
+
+/** Get the global radius config directory.
+ *
+ * @return the global radius config directory.
+ */
+char const *get_radius_dir(void)
+{
+       return radius_dir;
+}
 
 /*
  *     Read config files.
index 764c97d..3eb3c52 100644 (file)
@@ -136,7 +136,7 @@ int main(int argc, char *argv[])
 #endif
 
        debug_flag = 0;
-       radius_dir = talloc_strdup(NULL, RADIUS_DIR);
+       set_radius_dir(RADIUS_DIR);
 
        /*
         *      Ensure that the configuration is initialized.
@@ -165,10 +165,7 @@ int main(int argc, char *argv[])
                                break;
 
                        case 'd':
-                               if (radius_dir) {
-                                       rad_const_free(radius_dir);
-                               }
-                               radius_dir = talloc_strdup(NULL, optarg);
+                               set_radius_dir(optarg);
                                break;
 
                        case 'D':
@@ -597,8 +594,6 @@ cleanup:
         */
        free_mainconfig();
 
-       rad_const_free(radius_dir);
-
 #ifdef WIN32
        WSACleanup();
 #endif
index fa8091e..63150df 100644 (file)
@@ -407,7 +407,7 @@ int main(int argc, char *argv[])
                progname++;
 
        debug_flag = 0;
-       radius_dir = talloc_strdup(NULL, RADIUS_DIR);
+       set_radius_dir(RADIUS_DIR);
 
        /*
         *      Ensure that the configuration is initialized.
@@ -434,10 +434,7 @@ int main(int argc, char *argv[])
 
                switch(argval) {
                        case 'd':
-                               if (radius_dir) {
-                                       rad_const_free(radius_dir);
-                               }
-                               radius_dir = talloc_strdup(NULL, optarg);
+                               set_radius_dir(optarg);
                                break;
 
                        case 'D':
@@ -639,8 +636,6 @@ int main(int argc, char *argv[])
         */
        free_mainconfig();
 
-       rad_const_free(radius_dir);
-
        if (memory_report) {
                INFO("Allocated memory at time of report:");
                log_talloc_report(NULL);
index e9aaa37..603032a 100644 (file)
@@ -241,7 +241,7 @@ static int mod_instantiate(CONF_SECTION *conf, rlm_sql_config_t *config)
 
        INFO("rlm_sql_sqlite: SQLite library version: %s", sqlite3_libversion());
        if (!driver->filename) {
-               MEM(driver->filename = talloc_asprintf(driver, "%s/%s", radius_dir, config->sql_db));
+               MEM(driver->filename = talloc_asprintf(driver, "%s/%s", get_radius_dir(), config->sql_db));
        }
 
        exists = rad_file_exists(driver->filename);