diff --git a/main/named_acl.c b/main/named_acl.c index 6f712f7..c5ce468 100644 --- a/main/named_acl.c +++ b/main/named_acl.c @@ -577,7 +577,21 @@ int ast_named_acl_init() aco_option_register(&cfg_info, "permit", ACO_EXACT, named_acl_types, NULL, OPT_ACL_T, 1, FLDSET(struct named_acl, ha)); aco_option_register(&cfg_info, "deny", ACO_EXACT, named_acl_types, NULL, OPT_ACL_T, 0, FLDSET(struct named_acl, ha)); - aco_process_config(&cfg_info, 0); + if (aco_process_config(&cfg_info, 0) == ACO_PROCESS_ERROR) { + struct ast_config *cfg; + struct ast_flags cfg_flags = { CONFIG_FLAG_FILEUNCHANGED }; + + cfg = ast_config_load(named_acl_conf.filename, cfg_flags); + if (cfg == CONFIG_STATUS_FILEMISSING) { + /* Assume named acl's are not wanted if the config file doesn't exist. */ + return 0; + } + if (cfg != CONFIG_STATUS_FILEUNCHANGED && cfg != CONFIG_STATUS_FILEINVALID) { + ast_config_destroy(cfg); + } + /* acl.conf exists but is invalid. We need to assume it is unsafe to continue. */ + return -1; + } return 0; }