Fix checking for CONFIG_STATUS_FILEINVALID so that modules don't crash upon trying to parse an invalid config

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@157818 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.6.2
Terry Wilson 17 years ago
parent 3d8fb2d878
commit d66a8cd264

@ -97,7 +97,7 @@ static int load_config(void)
struct ast_flags config_flags = { 0 }; /* Part of our config comes from the database */ struct ast_flags config_flags = { 0 }; /* Part of our config comes from the database */
cfg = ast_config_load(CONFIG, config_flags); cfg = ast_config_load(CONFIG, config_flags);
if (!cfg) { if (!cfg || cfg == CONFIG_STATUS_FILEINVALID) {
ast_log(LOG_WARNING, "Unable to load " CONFIG ". No adaptive ODBC CDRs.\n"); ast_log(LOG_WARNING, "Unable to load " CONFIG ". No adaptive ODBC CDRs.\n");
return -1; return -1;
} }

@ -100,7 +100,7 @@ static int load_config(int reload)
loguniqueid = 0; loguniqueid = 0;
loguserfield = 0; loguserfield = 0;
if (!(cfg = ast_config_load(config, config_flags))) { if (!(cfg = ast_config_load(config, config_flags)) || cfg == CONFIG_STATUS_FILEINVALID) {
ast_log(LOG_WARNING, "unable to load config: %s\n", config); ast_log(LOG_WARNING, "unable to load config: %s\n", config);
return 0; return 0;
} else if (cfg == CONFIG_STATUS_FILEUNCHANGED) } else if (cfg == CONFIG_STATUS_FILEUNCHANGED)

@ -67,6 +67,11 @@ static int load_config(int reload)
if ((cfg = ast_config_load("cdr_custom.conf", config_flags)) == CONFIG_STATUS_FILEUNCHANGED) if ((cfg = ast_config_load("cdr_custom.conf", config_flags)) == CONFIG_STATUS_FILEUNCHANGED)
return 0; return 0;
if (cfg == CONFIG_STATUS_FILEINVALID) {
ast_log(LOG_ERROR, "Invalid config file\n");
return 1;
}
strcpy(format, ""); strcpy(format, "");
strcpy(master, ""); strcpy(master, "");
ast_mutex_lock(&lock); ast_mutex_lock(&lock);

@ -62,6 +62,11 @@ static int load_config(int reload)
if (cfg == CONFIG_STATUS_FILEUNCHANGED) if (cfg == CONFIG_STATUS_FILEUNCHANGED)
return 0; return 0;
if (cfg == CONFIG_STATUS_FILEINVALID) {
ast_log(LOG_ERROR, "Config file '%s' could not be parsed\n", CONF_FILE);
return 1;
}
if (reload && customfields) { if (reload && customfields) {
ast_free(customfields); ast_free(customfields);
} }

@ -161,7 +161,7 @@ static int odbc_load_module(int reload)
do { do {
cfg = ast_config_load(config_file, config_flags); cfg = ast_config_load(config_file, config_flags);
if (!cfg) { if (!cfg || cfg == CONFIG_STATUS_FILEINVALID) {
ast_log(LOG_WARNING, "cdr_odbc: Unable to load config for ODBC CDR's: %s\n", config_file); ast_log(LOG_WARNING, "cdr_odbc: Unable to load config for ODBC CDR's: %s\n", config_file);
res = AST_MODULE_LOAD_DECLINE; res = AST_MODULE_LOAD_DECLINE;
break; break;
@ -228,7 +228,7 @@ static int odbc_load_module(int reload)
} }
} while (0); } while (0);
if (cfg && cfg != CONFIG_STATUS_FILEUNCHANGED) if (cfg && cfg != CONFIG_STATUS_FILEUNCHANGED && cfg != CONFIG_STATUS_FILEINVALID)
ast_config_destroy(cfg); ast_config_destroy(cfg);
return res; return res;
} }

@ -370,7 +370,7 @@ static int config_module(int reload)
struct ast_config *cfg; struct ast_config *cfg;
struct ast_flags config_flags = { reload ? CONFIG_FLAG_FILEUNCHANGED : 0 }; struct ast_flags config_flags = { reload ? CONFIG_FLAG_FILEUNCHANGED : 0 };
if ((cfg = ast_config_load(config, config_flags)) == NULL) { if ((cfg = ast_config_load(config, config_flags)) == NULL || cfg == CONFIG_STATUS_FILEINVALID) {
ast_log(LOG_WARNING, "Unable to load config for PostgreSQL CDR's: %s\n", config); ast_log(LOG_WARNING, "Unable to load config for PostgreSQL CDR's: %s\n", config);
return -1; return -1;
} else if (cfg == CONFIG_STATUS_FILEUNCHANGED) } else if (cfg == CONFIG_STATUS_FILEUNCHANGED)

@ -228,7 +228,7 @@ static int load_module(void)
int res; int res;
const char *tmp; const char *tmp;
if ((cfg = ast_config_load(cdr_config, config_flags))) { if ((cfg = ast_config_load(cdr_config, config_flags)) && cfg != CONFIG_STATUS_FILEINVALID) {
ast_set2_flag(&global_flags, ast_true(ast_variable_retrieve(cfg, "radius", "usegmtime")), RADIUS_FLAG_USEGMTIME); ast_set2_flag(&global_flags, ast_true(ast_variable_retrieve(cfg, "radius", "usegmtime")), RADIUS_FLAG_USEGMTIME);
ast_set2_flag(&global_flags, ast_true(ast_variable_retrieve(cfg, "radius", "loguniqueid")), RADIUS_FLAG_LOGUNIQUEID); ast_set2_flag(&global_flags, ast_true(ast_variable_retrieve(cfg, "radius", "loguniqueid")), RADIUS_FLAG_LOGUNIQUEID);
ast_set2_flag(&global_flags, ast_true(ast_variable_retrieve(cfg, "radius", "loguserfield")), RADIUS_FLAG_LOGUSERFIELD); ast_set2_flag(&global_flags, ast_true(ast_variable_retrieve(cfg, "radius", "loguserfield")), RADIUS_FLAG_LOGUSERFIELD);

@ -158,7 +158,7 @@ static int load_config(int reload)
struct ast_variable *mappingvar; struct ast_variable *mappingvar;
const char *tmp; const char *tmp;
if (!(cfg = ast_config_load(config_file, config_flags))) { if (!(cfg = ast_config_load(config_file, config_flags)) || cfg == CONFIG_STATUS_FILEINVALID) {
if (reload) if (reload)
ast_log(LOG_WARNING, "Failed to reload configuration file.\n"); ast_log(LOG_WARNING, "Failed to reload configuration file.\n");
else else

@ -426,7 +426,7 @@ static int tds_load_module(int reload)
struct ast_flags config_flags = { reload ? CONFIG_FLAG_FILEUNCHANGED : 0 }; struct ast_flags config_flags = { reload ? CONFIG_FLAG_FILEUNCHANGED : 0 };
cfg = ast_config_load(config, config_flags); cfg = ast_config_load(config, config_flags);
if (!cfg) { if (!cfg || cfg == CONFIG_STATUS_FILEINVALID) {
ast_log(LOG_NOTICE, "Unable to load TDS config for CDRs: %s\n", config); ast_log(LOG_NOTICE, "Unable to load TDS config for CDRs: %s\n", config);
return 0; return 0;
} else if (cfg == CONFIG_STATUS_FILEUNCHANGED) } else if (cfg == CONFIG_STATUS_FILEUNCHANGED)

@ -6477,7 +6477,7 @@ static struct ast_channel *skinny_request(const char *type, int format, void *da
cfg = ast_config_load(config, config_flags); cfg = ast_config_load(config, config_flags);
/* We *must* have a config file otherwise stop immediately */ /* We *must* have a config file otherwise stop immediately */
if (!cfg) { if (!cfg || cfg == CONFIG_STATUS_FILEINVALID) {
ast_log(LOG_NOTICE, "Unable to load config %s, Skinny disabled.\n", config); ast_log(LOG_NOTICE, "Unable to load config %s, Skinny disabled.\n", config);
return -1; return -1;
} }

@ -3510,7 +3510,7 @@ static struct chan_usbradio_pvt *store_config(struct ast_config *cfg, char *ctg)
o->txctcssadj = 200; o->txctcssadj = 200;
o->rxsquelchadj = 500; o->rxsquelchadj = 500;
o->devstr[0] = 0; o->devstr[0] = 0;
if (cfg1) { if (cfg1 && cfg1 != CONFIG_STATUS_FILEINVALID) {
for (v = ast_variable_browse(cfg1, o->name); v; v = v->next) { for (v = ast_variable_browse(cfg1, o->name); v; v = v->next) {
M_START((char *)v->name, (char *)v->value); M_START((char *)v->name, (char *)v->value);
@ -3942,9 +3942,9 @@ static int load_module(void)
/* load config file */ /* load config file */
#ifdef NEW_ASTERISK #ifdef NEW_ASTERISK
if (!(cfg = ast_config_load(config,zeroflag))) { if (!(cfg = ast_config_load(config,zeroflag)) || cfg == CONFIG_STATUS_FILEINVALID) {
#else #else
if (!(cfg = ast_config_load(config))) { if (!(cfg = ast_config_load(config))) || cfg == CONFIG_STATUS_FILEINVALID {
#endif #endif
ast_log(LOG_NOTICE, "Unable to load config %s\n", config); ast_log(LOG_NOTICE, "Unable to load config %s\n", config);
return AST_MODULE_LOAD_DECLINE; return AST_MODULE_LOAD_DECLINE;

@ -2714,7 +2714,7 @@ static enum ast_module_load_result load_module()
cfg = ast_config_load(config, config_flags); cfg = ast_config_load(config, config_flags);
/* We *must* have a config file otherwise stop immediately */ /* We *must* have a config file otherwise stop immediately */
if (!cfg) { if (!cfg || cfg == CONFIG_STATUS_FILEINVALID) {
ast_log(LOG_ERROR, "Unable to load config %s\n", config); ast_log(LOG_ERROR, "Unable to load config %s\n", config);
return AST_MODULE_LOAD_DECLINE; return AST_MODULE_LOAD_DECLINE;
} }

@ -493,7 +493,7 @@ int iax_provision_reload(int reload)
iax_provision_init(); iax_provision_init();
cfg = ast_config_load2("iaxprov.conf", "chan_iax2", config_flags); cfg = ast_config_load2("iaxprov.conf", "chan_iax2", config_flags);
if (cfg != NULL && cfg != CONFIG_STATUS_FILEUNCHANGED) { if (cfg != NULL && cfg != CONFIG_STATUS_FILEUNCHANGED && cfg != CONFIG_STATUS_FILEINVALID) {
/* Mark all as dead. No need for locking */ /* Mark all as dead. No need for locking */
cur = templates; cur = templates;
while(cur) { while(cur) {

@ -1101,8 +1101,8 @@ int misdn_cfg_init(int this_max_ports, int reload)
struct ast_variable *v; struct ast_variable *v;
struct ast_flags config_flags = { reload ? CONFIG_FLAG_FILEUNCHANGED : 0 }; struct ast_flags config_flags = { reload ? CONFIG_FLAG_FILEUNCHANGED : 0 };
if (!(cfg = ast_config_load2(config, "chan_misdn", config_flags))) { if (!(cfg = ast_config_load2(config, "chan_misdn", config_flags)) || cfg == CONFIG_STATUS_FILEINVALID) {
ast_log(LOG_WARNING, "missing file: misdn.conf\n"); ast_log(LOG_WARNING, "missing or invalid file: misdn.conf\n");
return -1; return -1;
} else if (cfg == CONFIG_STATUS_FILEUNCHANGED) } else if (cfg == CONFIG_STATUS_FILEUNCHANGED)
return 0; return 0;

@ -326,7 +326,7 @@ static void init_logger_chain(int locked)
const char *s; const char *s;
struct ast_flags config_flags = { 0 }; struct ast_flags config_flags = { 0 };
if (!(cfg = ast_config_load2("logger.conf", "logger", config_flags))) if (!(cfg = ast_config_load2("logger.conf", "logger", config_flags)) || cfg == CONFIG_STATUS_FILEINVALID)
return; return;
/* delete our list of log channels */ /* delete our list of log channels */

@ -1721,7 +1721,7 @@ int ast_xmldoc_load_documentation(void)
/* setup default XML documentation language */ /* setup default XML documentation language */
snprintf(documentation_language, sizeof(documentation_language), default_documentation_language); snprintf(documentation_language, sizeof(documentation_language), default_documentation_language);
if ((cfg = ast_config_load2("asterisk.conf", "" /* core can't reload */, cnfflags))) { if ((cfg = ast_config_load2("asterisk.conf", "" /* core can't reload */, cnfflags)) && cfg != CONFIG_STATUS_FILEINVALID) {
for (var = ast_variable_browse(cfg, "options"); var; var = var->next) { for (var = ast_variable_browse(cfg, "options"); var; var = var->next) {
if (!strcasecmp(var->name, "documentation_language")) { if (!strcasecmp(var->name, "documentation_language")) {
if (!ast_strlen_zero(var->value)) { if (!ast_strlen_zero(var->value)) {

@ -4558,7 +4558,7 @@ static int set_config(char *config_file, struct sockaddr_in* sin, int reload)
int globalpcmodel = 0; int globalpcmodel = 0;
dundi_eid testeid; dundi_eid testeid;
if (!(cfg = ast_config_load(config_file, config_flags))) { if (!(cfg = ast_config_load(config_file, config_flags)) || cfg == CONFIG_STATUS_FILEINVALID) {
ast_log(LOG_ERROR, "Unable to load config %s\n", config_file); ast_log(LOG_ERROR, "Unable to load config %s\n", config_file);
return -1; return -1;
} else if (cfg == CONFIG_STATUS_FILEUNCHANGED) } else if (cfg == CONFIG_STATUS_FILEUNCHANGED)

@ -475,7 +475,7 @@ static void load_config(void)
const char *cat = NULL; const char *cat = NULL;
struct ast_flags config_flags = { 0 }; struct ast_flags config_flags = { 0 };
if (!(cfg = ast_config_load(filename, config_flags))) if (!(cfg = ast_config_load(filename, config_flags)) || cfg == CONFIG_STATUS_FILEINVALID)
return; return;
while ((cat = ast_category_browse(cfg, cat))) { while ((cat = ast_category_browse(cfg, cat))) {

@ -190,7 +190,7 @@ static void load_config(int reload)
struct cli_alias *alias; struct cli_alias *alias;
struct ast_variable *v, *v1; struct ast_variable *v, *v1;
if (!(cfg = ast_config_load(config_file, config_flags))) { if (!(cfg = ast_config_load(config_file, config_flags)) || cfg == CONFIG_STATUS_FILEINVALID) {
ast_log(LOG_ERROR, "res_clialiases configuration file '%s' not found\n", config_file); ast_log(LOG_ERROR, "res_clialiases configuration file '%s' not found\n", config_file);
return; return;
} else if (cfg == CONFIG_STATUS_FILEUNCHANGED) { } else if (cfg == CONFIG_STATUS_FILEUNCHANGED) {

Loading…
Cancel
Save