From: Alan T. DeKok Date: Mon, 28 Nov 2011 12:44:46 +0000 (+0100) Subject: Better fix for previous debian bug X-Git-Tag: release_3_0_0_beta0~467 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=430a4ae32bd95f72de745a725be820204ecb869f;p=thirdparty%2Ffreeradius-server.git Better fix for previous debian bug --- diff --git a/src/main/conffile.c b/src/main/conffile.c index 29ad97be8ab..531ea9f8c48 100644 --- a/src/main/conffile.c +++ b/src/main/conffile.c @@ -1084,6 +1084,46 @@ int cf_item_parse(CONF_SECTION *cs, const char *name, static const char *parse_spaces = " "; +/* + * A copy of cf_section_parse that initializes pointers before + * parsing them. + */ +static void cf_section_parse_init(CONF_SECTION *cs, void *base, + const CONF_PARSER *variables) +{ + int i; + void *data; + + for (i = 0; variables[i].name != NULL; i++) { + if (variables[i].type == PW_TYPE_SUBSECTION) { + CONF_SECTION *subcs; + subcs = cf_section_sub_find(cs, variables[i].name); + if (!subcs) continue; + + if (!variables[i].dflt) continue; + + cf_section_parse_init(subcs, base, + (const CONF_PARSER *) variables[i].dflt); + continue; + } + + if ((variables[i].type != PW_TYPE_STRING_PTR) && + (variables[i].type != PW_TYPE_FILENAME)) { + continue; + } + + if (variables[i].data) { + data = variables[i].data; /* prefer this. */ + } else if (base) { + data = ((char *)base) + variables[i].offset; + } else { + continue; + } + + *(char **) data = NULL; + } /* for all variables in the configuration section */ +} + /* * Parse a configuration section into user-supplied variables. */ @@ -1103,6 +1143,8 @@ int cf_section_parse(CONF_SECTION *cs, void *base, cs->name1, cs->name2); } + cf_section_parse_init(cs, base, variables); + /* * Handle the known configuration parameters. */ @@ -1144,11 +1186,6 @@ int cf_section_parse(CONF_SECTION *cs, void *base, goto error; } - if ((variables[i].type == PW_TYPE_STRING_PTR) || - (variables[i].type == PW_TYPE_FILENAME)) { - *(char **) data = NULL; - } - /* * Parse the pair we found, or a default value. */