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);
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");
/*
* 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';
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;
}
/* 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;
}
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;
}
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);
}
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);
}