]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Allow config sections "name2" to be expanded at load time
authorAlan T. DeKok <aland@freeradius.org>
Sat, 9 Jul 2011 14:18:32 +0000 (16:18 +0200)
committerAlan T. DeKok <aland@freeradius.org>
Sat, 9 Jul 2011 14:18:32 +0000 (16:18 +0200)
src/main/conffile.c

index 20b0467d41b40fd51d47b0d23a5421c5c8859368..c3e30278dbc273bd4bc85aa84bb02facc61ff56f 100644 (file)
@@ -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);