diff options
| author | Gustavo André dos Santos Lopes <cataphract@php.net> | 2010-10-29 15:29:15 +0000 |
|---|---|---|
| committer | Gustavo André dos Santos Lopes <cataphract@php.net> | 2010-10-29 15:29:15 +0000 |
| commit | 5c09767d4bc4a6b888a3b3ddd7b2b5aeaa939822 (patch) | |
| tree | f9c3d6629bec5d72502def9bacf928649bd32faf | |
| parent | 769a3cf0c373e91f613a0a050021f07b3a4601e1 (diff) | |
| download | php-git-5c09767d4bc4a6b888a3b3ddd7b2b5aeaa939822.tar.gz | |
- Fixed bug #53198 (changing INI setting "from" with ini_set did not have any
effect)
#Made "from" a proper INI setting and bound it to a global variable.
#Previously, it was simply read from the hash table with the parsed ini file
#by using cfg_get_string (I wonder why this mechanism still exists...)
| -rw-r--r-- | ext/standard/file.c | 1 | ||||
| -rw-r--r-- | ext/standard/file.h | 3 | ||||
| -rw-r--r-- | ext/standard/ftp_fopen_wrapper.c | 5 | ||||
| -rw-r--r-- | ext/standard/http_fopen_wrapper.c | 4 | ||||
| -rw-r--r-- | ext/standard/tests/http/bug53198.phpt | 56 |
5 files changed, 63 insertions, 6 deletions
diff --git a/ext/standard/file.c b/ext/standard/file.c index 2d7e581bbc..95106a8af8 100644 --- a/ext/standard/file.c +++ b/ext/standard/file.c @@ -169,6 +169,7 @@ static void file_globals_dtor(php_file_globals *file_globals_p TSRMLS_DC) PHP_INI_BEGIN() STD_PHP_INI_ENTRY("user_agent", NULL, PHP_INI_ALL, OnUpdateString, user_agent, php_file_globals, file_globals) + STD_PHP_INI_ENTRY("from", NULL, PHP_INI_ALL, OnUpdateString, from_address, php_file_globals, file_globals) STD_PHP_INI_ENTRY("default_socket_timeout", "60", PHP_INI_ALL, OnUpdateLong, default_socket_timeout, php_file_globals, file_globals) STD_PHP_INI_ENTRY("auto_detect_line_endings", "0", PHP_INI_ALL, OnUpdateLong, auto_detect_line_endings, php_file_globals, file_globals) PHP_INI_END() diff --git a/ext/standard/file.h b/ext/standard/file.h index cdf356f352..2284a28b96 100644 --- a/ext/standard/file.h +++ b/ext/standard/file.h @@ -118,7 +118,8 @@ typedef struct { size_t def_chunk_size; long auto_detect_line_endings; long default_socket_timeout; - char *user_agent; + char *user_agent; /* for the http wrapper */ + char *from_address; /* for the ftp and http wrappers */ char *user_stream_current_filename; /* for simple recursion protection */ php_stream_context *default_context; HashTable *stream_wrappers; /* per-request copy of url_stream_wrappers_hash */ diff --git a/ext/standard/ftp_fopen_wrapper.c b/ext/standard/ftp_fopen_wrapper.c index d4a4896aa1..6b858b6aed 100644 --- a/ext/standard/ftp_fopen_wrapper.c +++ b/ext/standard/ftp_fopen_wrapper.c @@ -116,7 +116,6 @@ static php_stream *php_ftp_fopen_connect(php_stream_wrapper *wrapper, char *path php_stream *stream = NULL, *reuseid = NULL; php_url *resource = NULL; int result, use_ssl, use_ssl_on_data = 0, tmp_len; - char *scratch; char tmp_line[512]; char *transport; int transport_len; @@ -250,8 +249,8 @@ static php_stream *php_ftp_fopen_connect(php_stream_wrapper *wrapper, char *path } else { /* if the user has configured who they are, send that as the password */ - if (cfg_get_string("from", &scratch) == SUCCESS) { - php_stream_printf(stream TSRMLS_CC, "PASS %s\r\n", scratch); + if (FG(from_address)) { + php_stream_printf(stream TSRMLS_CC, "PASS %s\r\n", FG(from_address)); } else { php_stream_write_string(stream, "PASS anonymous\r\n"); } diff --git a/ext/standard/http_fopen_wrapper.c b/ext/standard/http_fopen_wrapper.c index 7d238d65ac..301a3e1fcf 100644 --- a/ext/standard/http_fopen_wrapper.c +++ b/ext/standard/http_fopen_wrapper.c @@ -443,8 +443,8 @@ php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper, char *path, } /* if the user has configured who they are, send a From: line */ - if (((have_header & HTTP_HEADER_FROM) == 0) && cfg_get_string("from", &tmp) == SUCCESS) { - if (snprintf(scratch, scratch_len, "From: %s\r\n", tmp) > 0) + if (((have_header & HTTP_HEADER_FROM) == 0) && FG(from_address)) { + if (snprintf(scratch, scratch_len, "From: %s\r\n", FG(from_address)) > 0) php_stream_write(stream, scratch, strlen(scratch)); } diff --git a/ext/standard/tests/http/bug53198.phpt b/ext/standard/tests/http/bug53198.phpt new file mode 100644 index 0000000000..fe26bc9523 --- /dev/null +++ b/ext/standard/tests/http/bug53198.phpt @@ -0,0 +1,56 @@ +--TEST--
+Bug #53198 (From: header cannot be changed with ini_set)
+--SKIPIF--
+<?php require 'server.inc'; http_server_skipif('tcp://127.0.0.1:12342'); ?>
+--INI--
+from=teste@teste.pt
+--FILE--
+<?php
+require 'server.inc';
+
+function do_test() {
+
+ $responses = array(
+ "data://text/plain,HTTP/1.0 200 OK\r\n\r\n",
+ );
+
+ $pid = http_server("tcp://127.0.0.1:12342", $responses, $output);
+
+ foreach($responses as $r) {
+
+ $fd = fopen('http://127.0.0.1:12342/', 'rb', false);
+
+ fseek($output, 0, SEEK_SET);
+ var_dump(stream_get_contents($output));
+ fseek($output, 0, SEEK_SET);
+ }
+
+ http_server_kill($pid);
+
+}
+
+echo "-- Test: leave default --\n";
+
+do_test();
+
+echo "-- Test: after ini_set --\n";
+
+ini_set('from', 'junk@junk.com');
+
+do_test();
+
+?>
+--EXPECT--
+-- Test: leave default --
+string(63) "GET / HTTP/1.0
+From: teste@teste.pt
+Host: 127.0.0.1:12342
+
+"
+-- Test: after ini_set --
+string(62) "GET / HTTP/1.0
+From: junk@junk.com
+Host: 127.0.0.1:12342
+
+"
+
|
