From: Alan T. DeKok Date: Sat, 9 Jul 2011 14:18:32 +0000 (+0200) Subject: Allow config sections "name2" to be expanded at load time X-Git-Tag: release_3_0_0_beta0~708 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e116d39924e2ab0fd54ce86c415f24e032117307;p=thirdparty%2Ffreeradius-server.git Allow config sections "name2" to be expanded at load time --- diff --git a/src/main/conffile.c b/src/main/conffile.c index 20b0467d41b..c3e30278dbc 100644 --- a/src/main/conffile.c +++ b/src/main/conffile.c @@ -99,6 +99,9 @@ static int cf_data_add_internal(CONF_SECTION *cs, const char *name, int flag); static void *cf_data_find_internal(CONF_SECTION *cs, const char *name, int flag); +static const char *cf_expand_variables(const char *cf, int *lineno, + CONF_SECTION *outercs, + char *output, const char *input); int cf_log_config = 1; int cf_log_modules = 1; @@ -408,11 +411,25 @@ static CONF_SECTION *cf_section_alloc(const char *name1, const char *name2, size_t name1_len, name2_len = 0; char *p; CONF_SECTION *cs; + char buffer[256]; if (!name1) return NULL; name1_len = strlen(name1) + 1; - if (name2) name2_len = strlen(name2) + 1; + if (name2) { + if (strchr(name2, '$')) { + p = cf_expand_variables(parent->item.filename, + &parent->item.lineno, + parent, + buffer, name2); + if (!p) { + radlog(L_ERR, "Failed expanding section name"); + return NULL; + } + name2 = p; + } + name2_len = strlen(name2) + 1; + } p = rad_malloc(sizeof(*cs) + name1_len + name2_len);