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;
/* 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);
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.
}
#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.
#endif
debug_flag = 0;
- radius_dir = talloc_strdup(NULL, RADIUS_DIR);
+ set_radius_dir(RADIUS_DIR);
/*
* Ensure that the configuration is initialized.
break;
case 'd':
- if (radius_dir) {
- rad_const_free(radius_dir);
- }
- radius_dir = talloc_strdup(NULL, optarg);
+ set_radius_dir(optarg);
break;
case 'D':
*/
free_mainconfig();
- rad_const_free(radius_dir);
-
#ifdef WIN32
WSACleanup();
#endif
progname++;
debug_flag = 0;
- radius_dir = talloc_strdup(NULL, RADIUS_DIR);
+ set_radius_dir(RADIUS_DIR);
/*
* Ensure that the configuration is initialized.
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':
*/
free_mainconfig();
- rad_const_free(radius_dir);
-
if (memory_report) {
INFO("Allocated memory at time of report:");
log_talloc_report(NULL);
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);