mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
Fix for HTTP_PROXY issue.
The following changes are made: - _SERVER/_ENV only has HTTP_PROXY if the local environment has it, and only one from the environment. - getenv('HTTP_PROXY') only returns one from the local environment - getenv has optional second parameter, telling it to only consider local environment
This commit is contained in:
parent
b63d41e1e5
commit
98b9dfaec9
4 changed files with 76 additions and 48 deletions
|
@ -194,6 +194,9 @@ PHP 5.5 UPGRADE NOTES
|
||||||
- Since 5.5.4, fputcsv() has fifth parameter escape_char, allowing to
|
- Since 5.5.4, fputcsv() has fifth parameter escape_char, allowing to
|
||||||
specify escape char.
|
specify escape char.
|
||||||
|
|
||||||
|
- Since 5.5.38, getenv() has optional second parameter, making it only
|
||||||
|
consider local environment and not SAPI environment if true.
|
||||||
|
|
||||||
4a. unserialize() change
|
4a. unserialize() change
|
||||||
------------------------
|
------------------------
|
||||||
|
|
||||||
|
|
|
@ -4013,21 +4013,24 @@ PHP_FUNCTION(long2ip)
|
||||||
* System Functions *
|
* System Functions *
|
||||||
********************/
|
********************/
|
||||||
|
|
||||||
/* {{{ proto string getenv(string varname)
|
/* {{{ proto string getenv(string varname[, bool local_only])
|
||||||
Get the value of an environment variable */
|
Get the value of an environment variable */
|
||||||
PHP_FUNCTION(getenv)
|
PHP_FUNCTION(getenv)
|
||||||
{
|
{
|
||||||
char *ptr, *str;
|
char *ptr, *str;
|
||||||
int str_len;
|
int str_len;
|
||||||
|
zend_bool local_only = 0;
|
||||||
|
|
||||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) == FAILURE) {
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|b", &str, &str_len, &local_only) == FAILURE) {
|
||||||
RETURN_FALSE;
|
RETURN_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SAPI method returns an emalloc()'d string */
|
if (!local_only) {
|
||||||
ptr = sapi_getenv(str, str_len TSRMLS_CC);
|
/* SAPI method returns an emalloc()'d string */
|
||||||
if (ptr) {
|
ptr = sapi_getenv(str, str_len TSRMLS_CC);
|
||||||
RETURN_STRING(ptr, 0);
|
if (ptr) {
|
||||||
|
RETURN_STRING(ptr, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#ifdef PHP_WIN32
|
#ifdef PHP_WIN32
|
||||||
{
|
{
|
||||||
|
|
|
@ -1011,6 +1011,10 @@ SAPI_API struct stat *sapi_get_stat(TSRMLS_D)
|
||||||
|
|
||||||
SAPI_API char *sapi_getenv(char *name, size_t name_len TSRMLS_DC)
|
SAPI_API char *sapi_getenv(char *name, size_t name_len TSRMLS_DC)
|
||||||
{
|
{
|
||||||
|
if (!strncasecmp(name, "HTTP_PROXY", name_len)) {
|
||||||
|
/* Ugly fix for HTTP_PROXY issue */
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
if (sapi_module.getenv) {
|
if (sapi_module.getenv) {
|
||||||
char *value, *tmp = sapi_module.getenv(name, name_len TSRMLS_CC);
|
char *value, *tmp = sapi_module.getenv(name, name_len TSRMLS_CC);
|
||||||
if (tmp) {
|
if (tmp) {
|
||||||
|
|
|
@ -722,6 +722,22 @@ static zend_bool php_auto_globals_create_files(const char *name, uint name_len T
|
||||||
return 0; /* don't rearm */
|
return 0; /* don't rearm */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Upgly hack to fix HTTP_PROXY issue */
|
||||||
|
static void check_http_proxy(HashTable *var_table) {
|
||||||
|
if (zend_hash_exists(var_table, "HTTP_PROXY", sizeof("HTTP_PROXY"))) {
|
||||||
|
char *local_proxy = getenv("HTTP_PROXY");
|
||||||
|
|
||||||
|
if (!local_proxy) {
|
||||||
|
zend_hash_del(var_table, "HTTP_PROXY", sizeof("HTTP_PROXY"));
|
||||||
|
} else {
|
||||||
|
zval *local_zval;
|
||||||
|
ALLOC_INIT_ZVAL(local_zval);
|
||||||
|
ZVAL_STRING(local_zval, local_proxy, 1);
|
||||||
|
zend_hash_update(var_table, "HTTP_PROXY", sizeof("HTTP_PROXY"), &local_zval, sizeof(zval **), NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static zend_bool php_auto_globals_create_server(const char *name, uint name_len TSRMLS_DC)
|
static zend_bool php_auto_globals_create_server(const char *name, uint name_len TSRMLS_DC)
|
||||||
{
|
{
|
||||||
if (PG(variables_order) && (strchr(PG(variables_order),'S') || strchr(PG(variables_order),'s'))) {
|
if (PG(variables_order) && (strchr(PG(variables_order),'S') || strchr(PG(variables_order),'s'))) {
|
||||||
|
@ -754,6 +770,7 @@ static zend_bool php_auto_globals_create_server(const char *name, uint name_len
|
||||||
PG(http_globals)[TRACK_VARS_SERVER] = server_vars;
|
PG(http_globals)[TRACK_VARS_SERVER] = server_vars;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
check_http_proxy(Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_SERVER]));
|
||||||
zend_hash_update(&EG(symbol_table), name, name_len + 1, &PG(http_globals)[TRACK_VARS_SERVER], sizeof(zval *), NULL);
|
zend_hash_update(&EG(symbol_table), name, name_len + 1, &PG(http_globals)[TRACK_VARS_SERVER], sizeof(zval *), NULL);
|
||||||
Z_ADDREF_P(PG(http_globals)[TRACK_VARS_SERVER]);
|
Z_ADDREF_P(PG(http_globals)[TRACK_VARS_SERVER]);
|
||||||
|
|
||||||
|
@ -775,6 +792,7 @@ static zend_bool php_auto_globals_create_env(const char *name, uint name_len TSR
|
||||||
php_import_environment_variables(PG(http_globals)[TRACK_VARS_ENV] TSRMLS_CC);
|
php_import_environment_variables(PG(http_globals)[TRACK_VARS_ENV] TSRMLS_CC);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
check_http_proxy(Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_ENV]));
|
||||||
zend_hash_update(&EG(symbol_table), name, name_len + 1, &PG(http_globals)[TRACK_VARS_ENV], sizeof(zval *), NULL);
|
zend_hash_update(&EG(symbol_table), name, name_len + 1, &PG(http_globals)[TRACK_VARS_ENV], sizeof(zval *), NULL);
|
||||||
Z_ADDREF_P(PG(http_globals)[TRACK_VARS_ENV]);
|
Z_ADDREF_P(PG(http_globals)[TRACK_VARS_ENV]);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue