diff --git a/config.c b/config.c
index e585cb13eeced8ca3dd456c0ab0d1631dc4a90a3..f279b1640a9068dd237cddc936b2d53f82541dc4 100755
--- a/config.c
+++ b/config.c
@@ -30,6 +30,7 @@
 #include <string.h>
 #include <errno.h>
 #include <time.h>
+#include <sys/stat.h>
 #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<globbuf.gl_pathc; i++) {
 				ast_copy_string(fn, globbuf.gl_pathv[i], sizeof(fn));
 #endif
-	if ((option_verbose > 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]);
 	}