- changed ini file directives [PATH=](on Win32) and [HOST=](on all) to be case insensitive (garretts)

This commit is contained in:
Garrett Serack 2009-10-09 19:43:00 +00:00
parent 8a22597b65
commit 8e5a00e546
3 changed files with 45 additions and 2 deletions

2
NEWS
View File

@ -1,6 +1,8 @@
PHP NEWS
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
?? ??? 20??, PHP 5.3.2
- changed ini file directives [PATH=](on Win32) and [HOST=](on all) to be case
insensitive (garretts)
- Added ReflectionMethod::setAccessible() for invoking non-public methods
through the Reflection API. (Sebastian)

View File

@ -41,6 +41,20 @@
#define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG)
#endif
#ifdef PHP_WIN32
#define TRANSLATE_SLASHES(path) \
{ \
char *tmp = path; \
while (*tmp) { \
if (*tmp == '\\') *tmp = '/'; \
tmp++; \
} \
}
#else
#define TRANSLATE_SLASHES(path)
#endif
typedef struct _php_extension_lists {
zend_llist engine;
zend_llist functions;
@ -273,6 +287,12 @@ static void php_ini_parser_cb(zval *arg1, zval *arg2, zval *arg3, int callback_t
key_len = Z_STRLEN_P(arg1) - sizeof("PATH") + 1;
is_special_section = 1;
has_per_dir_config = 1;
#ifdef PHP_WIN32
// make the path lowercase on Windows, for case insensitivty.
strlwr(key);
TRANSLATE_SLASHES(key);
#endif
/* HOST sections */
} else if (!strncasecmp(Z_STRVAL_P(arg1), "HOST", sizeof("HOST") - 1)) {
@ -281,6 +301,7 @@ static void php_ini_parser_cb(zval *arg1, zval *arg2, zval *arg3, int callback_t
key_len = Z_STRLEN_P(arg1) - sizeof("HOST") + 1;
is_special_section = 1;
has_per_host_config = 1;
strlwr(key); // host names are case-insensitive.
} else {
is_special_section = 0;

View File

@ -754,7 +754,11 @@ static void php_cgi_ini_activate_user_config(char *path, int path_len, const cha
if it is inside the docroot, we scan the tree up to the docroot
to find more user.ini, if not we only scan the current path.
*/
#ifdef PHP_WIN32
if (strnicmp(s1, s2, s_len) == 0) {
#else
if (strncmp(s1, s2, s_len) == 0) {
#endif
ptr = s2 + start; /* start is the point where doc_root ends! */
while ((ptr = strchr(ptr, DEFAULT_SLASH)) != NULL) {
*ptr = 0;
@ -777,7 +781,7 @@ static void php_cgi_ini_activate_user_config(char *path, int path_len, const cha
static int sapi_cgi_activate(TSRMLS_D)
{
char *path, *doc_root, *server_name;
uint path_len, doc_root_len;
uint path_len, doc_root_len, server_name_len;
/* PATH_TRANSLATED should be defined at this stage but better safe than sorry :) */
if (!SG(request_info).path_translated) {
@ -789,7 +793,11 @@ static int sapi_cgi_activate(TSRMLS_D)
server_name = sapi_cgibin_getenv("SERVER_NAME", sizeof("SERVER_NAME") - 1 TSRMLS_CC);
/* SERVER_NAME should also be defined at this stage..but better check it anyway */
if (server_name) {
php_ini_activate_per_host_config(server_name, strlen(server_name) + 1 TSRMLS_CC);
server_name_len = strlen(server_name);
server_name = estrndup(server_name, strlen(server_name) );
strlwr(server_name);
php_ini_activate_per_host_config(server_name, server_name_len + 1 TSRMLS_CC);
efree(server_name);
}
}
@ -810,6 +818,10 @@ static int sapi_cgi_activate(TSRMLS_D)
path_len = zend_dirname(path, path_len);
}
path[path_len] = 0;
#ifdef PHP_WIN32
// paths on windows should be case-insensitive
strlwr(path);
#endif
/* Activate per-dir-system-configuration defined in php.ini and stored into configuration_hash during startup */
php_ini_activate_per_dir_config(path, path_len TSRMLS_CC); /* Note: for global settings sake we check from root to path */
@ -823,10 +835,18 @@ static int sapi_cgi_activate(TSRMLS_D)
if (IS_SLASH(doc_root[doc_root_len - 1])) {
--doc_root_len;
}
#ifdef PHP_WIN32
// paths on windows should be case-insensitive
doc_root = estrndup(doc_root, doc_root_len);
strlwr(doc_root);
#endif
php_cgi_ini_activate_user_config(path, path_len, doc_root, doc_root_len, doc_root_len - 1 TSRMLS_CC);
}
}
#ifdef PHP_WIN32
efree(doc_root);
#endif
efree(path);
}