]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
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 f59e74708dd31db7f4577abaae1df436dbaedbbd..ee49445aff687a7ca4312ef64d5e15a11e2f7437 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 e4981e29f41f80f3b3cd18387fdd0cd5ad52266a..feb9513c777e27684f40739fe85172c52b462215 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 4fc28ea5f01e640542a580ab38f9facfa0410253..a7cddd970c4149bfb9a89f5137652dbff5f5a10e 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 bd0239ae69c1cef7ac4888a91063d6f4e97a74ef..08a1eb889e701b0016368cc933526eedc9023e86 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 ae66db1b6a3bd087be4ff90f083fd88ef6b1f759..8deb9db8f8083acf2257a9ca2051ac8c8acbc9b7 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 e4a3f7fca78db43f21b13654bb4d8f6f16ed0961..302a404e6040e90325ac6100a87f3aebcbc37910 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);
        }