From: Kevin P. Fleming Date: Mon, 31 Oct 2005 21:08:55 +0000 (+0000) Subject: ignore non-regular files during config parsing (issue #5510, different fix) X-Git-Tag: 1.2.0-beta2~22 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f9c8bb8087782dd5afc82121f5539fc65d017cc8;p=thirdparty%2Fasterisk.git ignore non-regular files during config parsing (issue #5510, different fix) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@6902 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/config.c b/config.c index e585cb13ee..f279b1640a 100755 --- a/config.c +++ b/config.c @@ -30,6 +30,7 @@ #include #include #include +#include #define AST_INCLUDE_GLOB 1 #ifdef AST_INCLUDE_GLOB #ifdef __Darwin__ @@ -538,6 +539,7 @@ static struct ast_config *config_text_file_load(const char *database, const char int comment = 0, nest[MAX_NESTED_COMMENTS]; struct ast_category *cat = NULL; int count = 0; + struct stat statbuf; cat = ast_config_get_current_category(cfg); @@ -569,11 +571,26 @@ static struct ast_config *config_text_file_load(const char *database, const char for (i=0; i 1) && !option_debug) { - ast_verbose( VERBOSE_PREFIX_2 "Parsing '%s': ", fn); - fflush(stdout); - } - if ((f = fopen(fn, "r"))) { + do { + if (stat(fn, &statbuf)) { + ast_log(LOG_WARNING, "Cannot stat() '%s', ignoring\n", fn); + continue; + } + if (!S_ISREG(statbuf.st_mode)) { + ast_log(LOG_WARNING, "'%s' is not a regular file, ignoring\n", fn); + continue; + } + if ((option_verbose > 1) && !option_debug) { + ast_verbose(VERBOSE_PREFIX_2 "Parsing '%s': ", fn); + fflush(stdout); + } + if (!(f = fopen(fn, "r"))) { + if (option_debug) + ast_log(LOG_DEBUG, "No file to parse: %s\n", fn); + else if (option_verbose > 1) + ast_verbose( "Not found (%s)\n", strerror(errno)); + continue; + } count++; if (option_debug) ast_log(LOG_DEBUG, "Parsing %s\n", fn); @@ -641,12 +658,7 @@ static struct ast_config *config_text_file_load(const char *database, const char } } fclose(f); - } else { /* can't open file */ - if (option_debug) - ast_log(LOG_DEBUG, "No file to parse: %s\n", fn); - else if (option_verbose > 1) - ast_verbose( "Not found (%s)\n", strerror(errno)); - } + } while(0); if (comment) { ast_log(LOG_WARNING,"Unterminated comment detected beginning on line %d\n", nest[comment]); }