iliaa Sat Jan 25 16:13:01 2003 EDT Modified files: /php4/main php_ini.c Log: Fixed bug #21625 (When scanning a directory for ini files, do so in alphabetical order. This gives a user a way to control the order in which the ini files are loaded). Fixed a bug that would make the code try to read files without an extension as ini files. Index: php4/main/php_ini.c diff -u php4/main/php_ini.c:1.109 php4/main/php_ini.c:1.110 --- php4/main/php_ini.c:1.109 Sun Jan 19 07:17:38 2003 +++ php4/main/php_ini.c Sat Jan 25 16:13:00 2003 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_ini.c,v 1.109 2003/01/19 12:17:38 phanto Exp $ */ +/* $Id: php_ini.c,v 1.110 2003/01/25 21:13:00 iliaa Exp $ */ /* Check CWD for php.ini */ #define INI_CHECK_CWD @@ -31,6 +31,8 @@ #include "SAPI.h" #include "php_main.h" +#include "dirent.h" + #ifndef S_ISREG #define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG) #endif @@ -258,8 +260,6 @@ char *open_basedir; int free_ini_search_path=0; zend_file_handle fh; - DIR *dirp = NULL; - struct dirent *dir_entry; struct stat sb; char ini_file[MAXPATHLEN]; char *p; @@ -425,15 +425,17 @@ /* If the config_file_scan_dir is set at compile-time, go and scan this directory and * parse any .ini files found in this directory. */ if (strlen(PHP_CONFIG_FILE_SCAN_DIR)) { - dirp = VCWD_OPENDIR(PHP_CONFIG_FILE_SCAN_DIR); - if (dirp) { - fh.type = ZEND_HANDLE_FP; - while ((dir_entry = readdir(dirp)) != NULL) { + struct dirent **namelist; + int ndir, i; + + if ((ndir = scandir(PHP_CONFIG_FILE_SCAN_DIR, &namelist, 0, +alphasort)) > 0) { + for (i = 0; i < ndir; i++) { /* check for a .ini extension */ - if ((p = strrchr(dir_entry->d_name,'.')) && strcmp(p,".ini")) { + if (!(p = strrchr(namelist[i]->d_name, '.')) || (p && +strcmp(p, ".ini"))) { + free(namelist[i]); continue; } - snprintf(ini_file, MAXPATHLEN, "%s%c%s", PHP_CONFIG_FILE_SCAN_DIR, DEFAULT_SLASH, dir_entry->d_name); + snprintf(ini_file, MAXPATHLEN, "%s%c%s", +PHP_CONFIG_FILE_SCAN_DIR, DEFAULT_SLASH, namelist[i]->d_name); if (VCWD_STAT(ini_file, &sb) == 0) { if (S_ISREG(sb.st_mode)) { if ((fh.handle.fp = VCWD_FOPEN(ini_file, "r"))) { @@ -447,8 +449,10 @@ } } } + free(namelist[i]); } - closedir(dirp); + free(namelist); + /* * Don't need an extra byte for the \0 in this malloc as the last * element will not get a trailing , which gives us the byte for the \0
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php