]> TLD Linux GIT Repositories - packages/php.git/blob - php-config-file-scan-dir.patch
- updated to 5.4.45
[packages/php.git] / php-config-file-scan-dir.patch
1 --- php-5.4.0RC3/main/php_ini.c~        2011-12-10 03:26:15.000000000 +0200
2 +++ php-5.4.0RC3/main/php_ini.c 2011-12-10 03:26:54.901295707 +0200
3 @@ -376,6 +376,7 @@
4         char *open_basedir;
5         int free_ini_search_path = 0;
6         zend_file_handle fh;
7 +       static const char paths_separator[] = { ZEND_PATHS_SEPARATOR, 0 };
8  
9         if (zend_hash_init(&configuration_hash, 0, NULL, (dtor_func_t) config_zval_dtor, 1) == FAILURE) {
10                 return FAILURE;
11 @@ -398,7 +399,6 @@
12                 int search_path_size;
13                 char *default_location;
14                 char *env_location;
15 -               static const char paths_separator[] = { ZEND_PATHS_SEPARATOR, 0 };
16  #ifdef PHP_WIN32
17                 char *reg_location;
18                 char phprc_path[MAXPATHLEN];
19 @@ -608,72 +608,86 @@
20  
21         /* Scan and parse any .ini files found in scan path if path not empty. */
22         if (!sapi_module.php_ini_ignore && php_ini_scanned_path_len) {
23 -               struct dirent **namelist;
24                 int ndir, i;
25                 struct stat sb;
26                 char ini_file[MAXPATHLEN];
27 -               char *p;
28 +               char *p, *last, *path_copy, *ini_path = NULL;
29                 zend_file_handle fh2;
30                 zend_llist scanned_ini_list;
31                 zend_llist_element *element;
32                 int l, total_l = 0;
33  
34 -               if ((ndir = php_scandir(php_ini_scanned_path, &namelist, 0, php_alphasort)) > 0) {
35 -                       zend_llist_init(&scanned_ini_list, sizeof(char *), (llist_dtor_func_t) free_estring, 1);
36 -                       memset(&fh2, 0, sizeof(fh2));
37 -
38 -                       for (i = 0; i < ndir; i++) {
39 -
40 -                               /* check for any file with .ini extension */
41 -                               if (!(p = strrchr(namelist[i]->d_name, '.')) || (p && strcmp(p, ".ini"))) {
42 -                                       free(namelist[i]);
43 -                                       continue;
44 -                               }
45 -                               /* Reset active ini section */
46 -                               RESET_ACTIVE_INI_HASH();
47 -
48 -                               if (IS_SLASH(php_ini_scanned_path[php_ini_scanned_path_len - 1])) {
49 -                                       snprintf(ini_file, MAXPATHLEN, "%s%s", php_ini_scanned_path, namelist[i]->d_name);
50 -                               } else {
51 -                                       snprintf(ini_file, MAXPATHLEN, "%s%c%s", php_ini_scanned_path, DEFAULT_SLASH, namelist[i]->d_name);
52 -                               }
53 -                               if (VCWD_STAT(ini_file, &sb) == 0) {
54 -                                       if (S_ISREG(sb.st_mode)) {
55 -                                               if ((fh2.handle.fp = VCWD_FOPEN(ini_file, "r"))) {
56 -                                                       fh2.filename = ini_file;
57 -                                                       fh2.type = ZEND_HANDLE_FP;
58 -
59 -                                                       if (zend_parse_ini_file(&fh2, 1, ZEND_INI_SCANNER_NORMAL, (zend_ini_parser_cb_t) php_ini_parser_cb, &configuration_hash TSRMLS_CC) == SUCCESS) {
60 -                                                               /* Here, add it to the list of ini files read */
61 -                                                               l = strlen(ini_file);
62 -                                                               total_l += l + 2;
63 -                                                               p = estrndup(ini_file, l);
64 -                                                               zend_llist_add_element(&scanned_ini_list, &p);
65 +               /* List of found ini files */
66 +               zend_llist_init(&scanned_ini_list, sizeof(char *), (llist_dtor_func_t) free_estring, 1);
67 +
68 +               /* Split by paths_separator and load ini-files from all paths */
69 +               path_copy = estrdup(php_ini_scanned_path);
70 +               ini_path  = php_strtok_r(path_copy, paths_separator, &last);
71 +
72 +               while (ini_path != NULL) {
73 +                       struct dirent **namelist;
74 +                       int ini_path_len = strlen(ini_path);
75 +
76 +                       if ((ndir = php_scandir(ini_path, &namelist, 0, php_alphasort)) > 0) {
77 +                               memset(&fh2, 0, sizeof(fh2));
78 +
79 +                               for (i = 0; i < ndir; i++) {
80 +                                       /* check for any file with .ini extension */
81 +                                       if (!(p = strrchr(namelist[i]->d_name, '.')) || (p && strcmp(p, ".ini"))) {
82 +                                               free(namelist[i]);
83 +                                               continue;
84 +                                       }
85 +                                       /* Reset active ini section */
86 +                                       RESET_ACTIVE_INI_HASH();
87 +
88 +                                       if (IS_SLASH(ini_path[ini_path_len - 1])) {
89 +                                               snprintf(ini_file, MAXPATHLEN, "%s%s", ini_path, namelist[i]->d_name);
90 +                                       } else {
91 +                                               snprintf(ini_file, MAXPATHLEN, "%s%c%s", ini_path, DEFAULT_SLASH, namelist[i]->d_name);
92 +                                       }
93 +                                       if (VCWD_STAT(ini_file, &sb) == 0) {
94 +                                               if (S_ISREG(sb.st_mode)) {
95 +                                                       if ((fh2.handle.fp = VCWD_FOPEN(ini_file, "r"))) {
96 +                                                               fh2.filename = ini_file;
97 +                                                               fh2.type = ZEND_HANDLE_FP;
98 +
99 +                                                               /* Reset active ini section */
100 +                                                               RESET_ACTIVE_INI_HASH();
101 +
102 +                                                               if (zend_parse_ini_file(&fh2, 1, ZEND_INI_SCANNER_NORMAL, (zend_ini_parser_cb_t) php_ini_parser_cb, &configuration_hash TSRMLS_CC) == SUCCESS) {
103 +                                                                       /* Here, add it to the list of ini files read */
104 +                                                                       l = strlen(ini_file);
105 +                                                                       total_l += l + 2;
106 +                                                                       p = estrndup(ini_file, l);
107 +                                                                       zend_llist_add_element(&scanned_ini_list, &p);
108 +                                                               }
109                                                         }
110                                                 }
111                                         }
112 +                                       free(namelist[i]);
113                                 }
114 -                               free(namelist[i]);
115 +                               free(namelist);
116                         }
117 -                       free(namelist);
118 -
119 -                       if (total_l) {
120 -                               int php_ini_scanned_files_len = (php_ini_scanned_files) ? strlen(php_ini_scanned_files) + 1 : 0;
121 -                               php_ini_scanned_files = (char *) realloc(php_ini_scanned_files, php_ini_scanned_files_len + total_l + 1);
122 -                               if (!php_ini_scanned_files_len) {
123 -                                       *php_ini_scanned_files = '\0';
124 -                               }
125 -                               total_l += php_ini_scanned_files_len;
126 -                               for (element = scanned_ini_list.head; element; element = element->next) {
127 -                                       if (php_ini_scanned_files_len) {
128 -                                               strlcat(php_ini_scanned_files, ",\n", total_l);
129 -                                       }
130 -                                       strlcat(php_ini_scanned_files, *(char **)element->data, total_l);
131 -                                       strlcat(php_ini_scanned_files, element->next ? ",\n" : "\n", total_l);
132 +                       ini_path = php_strtok_r(NULL, paths_separator, &last);
133 +               }
134 +
135 +               if (total_l) {
136 +                       int php_ini_scanned_files_len = (php_ini_scanned_files) ? strlen(php_ini_scanned_files) + 1 : 0;
137 +                       php_ini_scanned_files = (char *) realloc(php_ini_scanned_files, php_ini_scanned_files_len + total_l + 1);
138 +                       if (!php_ini_scanned_files_len) {
139 +                               *php_ini_scanned_files = '\0';
140 +                       }
141 +                       total_l += php_ini_scanned_files_len;
142 +                       for (element = scanned_ini_list.head; element; element = element->next) {
143 +                               if (php_ini_scanned_files_len) {
144 +                                       strlcat(php_ini_scanned_files, ",\n", total_l);
145                                 }
146 +                               strlcat(php_ini_scanned_files, *(char **)element->data, total_l);
147 +                               strlcat(php_ini_scanned_files, element->next ? ",\n" : "\n", total_l);
148                         }
149 -                       zend_llist_destroy(&scanned_ini_list);
150                 }
151 +               efree(path_copy);
152 +               zend_llist_destroy(&scanned_ini_list);
153         } else {
154                 /* Make sure an empty php_ini_scanned_path ends up as NULL */
155                 php_ini_scanned_path = NULL;