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()
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 */
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;
} 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");
}
}
/* 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));
}
--- /dev/null
+--TEST--\r
+Bug #53198 (From: header cannot be changed with ini_set)\r
+--SKIPIF--\r
+<?php require 'server.inc'; http_server_skipif('tcp://127.0.0.1:12342'); ?>\r
+--INI--\r
+from=teste@teste.pt\r
+--FILE--\r
+<?php\r
+require 'server.inc';\r
+\r
+function do_test() {\r
+\r
+ $responses = array(\r
+ "data://text/plain,HTTP/1.0 200 OK\r\n\r\n",\r
+ );\r
+\r
+ $pid = http_server("tcp://127.0.0.1:12342", $responses, $output);\r
+\r
+ foreach($responses as $r) {\r
+\r
+ $fd = fopen('http://127.0.0.1:12342/', 'rb', false);\r
+\r
+ fseek($output, 0, SEEK_SET);\r
+ var_dump(stream_get_contents($output));\r
+ fseek($output, 0, SEEK_SET);\r
+ }\r
+\r
+ http_server_kill($pid);\r
+\r
+}\r
+\r
+echo "-- Test: leave default --\n";\r
+\r
+do_test();\r
+\r
+echo "-- Test: after ini_set --\n";\r
+\r
+ini_set('from', 'junk@junk.com');\r
+\r
+do_test();\r
+\r
+?>\r
+--EXPECT--\r
+-- Test: leave default --\r
+string(63) "GET / HTTP/1.0\r
+From: teste@teste.pt\r
+Host: 127.0.0.1:12342\r
+\r
+"\r
+-- Test: after ini_set --\r
+string(62) "GET / HTTP/1.0\r
+From: junk@junk.com\r
+Host: 127.0.0.1:12342\r
+\r
+"\r
+\r