Alloc main config section before reading config file in case there are any sections...
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Mon, 5 Jan 2015 01:19:25 +0000 (20:19 -0500)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Mon, 5 Jan 2015 01:50:31 +0000 (20:50 -0500)
src/include/conffile.h
src/main/client.c
src/main/conffile.c
src/main/mainconfig.c
src/main/radmin.c
src/main/radwho.c

index f59e747..ee49445 100644 (file)
@@ -167,7 +167,7 @@ int         cf_item_parse(CONF_SECTION *cs, char const *name, int type, void *data, cha
 int            cf_section_parse(CONF_SECTION *, void *base, CONF_PARSER const *variables);
 int            cf_section_parse_pass2(CONF_SECTION *, void *base, CONF_PARSER const *variables);
 const CONF_PARSER *cf_section_parse_table(CONF_SECTION *cs);
-CONF_SECTION   *cf_file_read(char const *file);
+int            cf_file_read(CONF_SECTION *cs, char const *file);
 void           cf_file_free(CONF_SECTION *cs);
 int            cf_file_include(CONF_SECTION *cs, char const *file);
 
index e4981e2..feb9513 100644 (file)
@@ -1313,9 +1313,14 @@ RADCLIENT *client_read(char const *filename, int in_server, int flag)
 
        if (!filename) return NULL;
 
-       cs = cf_file_read(filename);
+       cs = cf_section_alloc(NULL, "main", NULL);
        if (!cs) return NULL;
 
+       if (cf_file_read(cs, filename) < 0) {
+               talloc_free(cs);
+               return NULL;
+       }
+
        cs = cf_section_sub_find(cs, "client");
        if (!cs) {
                ERROR("No \"client\" section found in client file");
index 4fc28ea..a7cddd9 100644 (file)
@@ -2498,17 +2498,13 @@ int cf_file_include(CONF_SECTION *cs, char const *filename)
 /*
  *     Bootstrap a config file.
  */
-CONF_SECTION *cf_file_read(char const *filename)
+int cf_file_read(CONF_SECTION *cs, char const *filename)
 {
        char *p;
        CONF_PAIR *cp;
-       CONF_SECTION *cs;
-
-       cs = cf_section_alloc(NULL, "main", NULL);
-       if (!cs) return NULL;
 
        cp = cf_pair_alloc(cs, "confdir", filename, T_OP_SET, T_BARE_WORD, T_SINGLE_QUOTED_STRING);
-       if (!cp) return NULL;
+       if (!cp) return -1;
 
        p = strrchr(cp->value, FR_DIR_SEP);
        if (p) *p = '\0';
@@ -2517,12 +2513,9 @@ CONF_SECTION *cf_file_read(char const *filename)
        cp->item.lineno = -1;
        cf_item_add(cs, &(cp->item));
 
-       if (cf_file_include(cs, filename) < 0) {
-               talloc_free(cs);
-               return NULL;
-       }
+       if (cf_file_include(cs, filename) < 0) return -1;
 
-       return cs;
+       return 0;
 }
 
 
index bd0239a..08a1eb8 100644 (file)
@@ -785,8 +785,10 @@ do {\
        /* Read the configuration file */
        snprintf(buffer, sizeof(buffer), "%.200s/%.50s.conf",
                 radius_dir, main_config.name);
-       if ((cs = cf_file_read(buffer)) == NULL) {
+       if (cf_file_read(cs, buffer) < 0) {
                ERROR("Errors reading or parsing %s", buffer);
+               talloc_free(cs);
+
                return -1;
        }
 
@@ -1035,11 +1037,15 @@ void main_config_hup(void)
 
        INFO("HUP - Re-reading configuration files");
 
+       cs = cf_section_alloc(NULL, "main", NULL);
+       if (!cs) return;
+
        /* Read the configuration file */
        snprintf(buffer, sizeof(buffer), "%.200s/%.50s.conf",
                 radius_dir, main_config.name);
-       if ((cs = cf_file_read(buffer)) == NULL) {
+       if (cf_file_read(cs, buffer) < 0) {
                ERROR("Failed to re-read or parse %s", buffer);
+               talloc_free(cs);
                return;
        }
 
index ae66db1..8deb9db 100644 (file)
@@ -585,8 +585,10 @@ int main(int argc, char **argv)
                        exit(64);
                }
 
-               cs = cf_file_read(buffer);
-               if (!cs) {
+               cs = cf_section_alloc(NULL, "main", NULL);
+               if (!cs) exit(1);
+
+               if (cf_file_read(cs, buffer) < 0) {
                        fprintf(stderr, "%s: Errors reading or parsing %s\n", progname, buffer);
                        usage(1);
                }
index e4a3f7f..302a404 100644 (file)
@@ -326,9 +326,11 @@ int main(int argc, char **argv)
        memset(&main_config, 0, sizeof(main_config));
 
        /* Read radiusd.conf */
+       maincs = cf_section_alloc(NULL, "main", NULL);
+       if (!maincs) exit(1);
+
        snprintf(buffer, sizeof(buffer), "%.200s/radiusd.conf", raddb_dir);
-       maincs = cf_file_read(buffer);
-       if (!maincs) {
+       if (cf_file_read(maincs, buffer) < 0) {
                fprintf(stderr, "%s: Error reading or parsing radiusd.conf\n", argv[0]);
                exit(1);
        }