From dc60f7fa9cfd6eb7c013e52ed7734cfd1e412858 Mon Sep 17 00:00:00 2001 From: vhuk Date: Thu, 21 Jul 2016 12:20:06 +0300 Subject: [PATCH 1/6] Fix for bug #54431 --- ext/standard/ftp_fopen_wrapper.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ext/standard/ftp_fopen_wrapper.c b/ext/standard/ftp_fopen_wrapper.c index 41bed54658f78..c07d9443594ae 100644 --- a/ext/standard/ftp_fopen_wrapper.c +++ b/ext/standard/ftp_fopen_wrapper.c @@ -737,9 +737,9 @@ php_stream * php_stream_ftp_opendir(php_stream_wrapper *wrapper, const char *pat php_stream_context_set(datastream, context); - if (use_ssl_on_data && (php_stream_xport_crypto_setup(stream, + if (use_ssl_on_data && (php_stream_xport_crypto_setup(datastream, STREAM_CRYPTO_METHOD_SSLv23_CLIENT, NULL) < 0 || - php_stream_xport_crypto_enable(stream, 1) < 0)) { + php_stream_xport_crypto_enable(datastream, 1) < 0)) { php_stream_wrapper_log_error(wrapper, options, "Unable to activate SSL mode"); php_stream_close(datastream); From 6b9dee2ca5b3c70ec10cfd22f7ae622437eb00ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Hukkam=C3=A4ki?= Date: Mon, 25 Jul 2016 13:18:04 +0300 Subject: [PATCH 2/6] Fix #72667. Test cases included. --- ext/ftp/tests/server.inc | 23 ++++++++++++++------- ext/standard/ftp_fopen_wrapper.c | 11 +++++----- ext/standard/tests/streams/opendir-001.phpt | 19 +++++++++++++++++ ext/standard/tests/streams/opendir-002.phpt | 17 +++++++++++++++ 4 files changed, 56 insertions(+), 14 deletions(-) create mode 100644 ext/standard/tests/streams/opendir-001.phpt create mode 100644 ext/standard/tests/streams/opendir-002.phpt diff --git a/ext/ftp/tests/server.inc b/ext/ftp/tests/server.inc index bb0c1ff10bec9..621ddf9252937 100644 --- a/ext/ftp/tests/server.inc +++ b/ext/ftp/tests/server.inc @@ -265,7 +265,7 @@ if ($pid) { } elseif (preg_match("~^NLST(?: ([A-Za-z./]+))?\r\n$~", $buf, $m)) { - if (isset($m[1]) && $m[1] === 'bogusdir') { + if (isset($m[1]) && (($m[1] === 'bogusdir') || ($m[1] === '/bogusdir'))) { fputs($s, "250 $m[1]: No such file or directory\r\n"); continue; } @@ -276,11 +276,17 @@ if ($pid) { continue; } + if (empty($pasv)) { + if (!$fs = stream_socket_client("tcp://$host:$port")) { + fputs($s, "425 Can't open data connection\r\n"); + continue; + } + } else { + $soc = stream_socket_server("tcp://127.0.0.1:$pasv_port"); + } fputs($s, "150 File status okay; about to open data connection\r\n"); - - if (!$fs = stream_socket_client("tcp://$host:$port")) { - fputs($s, "425 Can't open data connection\r\n"); - continue; + if (!empty($pasv)) { + $fs = stream_socket_accept($soc, 5); } if (empty($m[1]) || $m[1] !== 'emptydir') { @@ -368,7 +374,7 @@ if ($pid) { } fputs($s, "226 Closing data Connection.\r\n"); break; - case "mediumfile": + case "mediumfile": fputs($s, "150 File status okay; about to open data connection.\r\n"); for($i = 0; $i < 150; $i++){ fputs($fs, "This is line $i of the test data.\n"); @@ -384,13 +390,14 @@ if ($pid) { }elseif (preg_match('/^PASV/', $buf, $matches)) { + $pasv=true; $port = $pasv_port; $p2 = $port % ((int) 1 << 8); $p1 = ($port-$p2)/((int) 1 << 8); $host = "127.0.0.1"; fputs($s, "227 Entering Passive Mode. (127,0,0,1,{$p1},{$p2})\r\n"); - - + }elseif (preg_match('/^EPSV/', $buf, $matches)) { + fputs($s, "550 Extended passsive mode not supported.\r\n"); } elseif (preg_match('/^SITE EXEC/', $buf, $matches)) { fputs($s, "200 OK\r\n"); diff --git a/ext/standard/ftp_fopen_wrapper.c b/ext/standard/ftp_fopen_wrapper.c index c07d9443594ae..ff0f9421f7dcc 100644 --- a/ext/standard/ftp_fopen_wrapper.c +++ b/ext/standard/ftp_fopen_wrapper.c @@ -720,18 +720,17 @@ php_stream * php_stream_ftp_opendir(php_stream_wrapper *wrapper, const char *pat if (hoststart == NULL) { hoststart = resource->host; } - datastream = php_stream_sock_open_host(hoststart, portno, SOCK_STREAM, 0, 0); - if (datastream == NULL) { - goto opendir_errexit; - } result = GET_FTP_RESULT(stream); if (result != 150 && result != 125) { /* Could not retrieve or send the file * this data will only be sent to us after connection on the data port was initiated. */ - php_stream_close(datastream); - datastream = NULL; + goto opendir_errexit; + } + + datastream = php_stream_sock_open_host(hoststart, portno, SOCK_STREAM, 0, 0); + if (datastream == NULL) { goto opendir_errexit; } diff --git a/ext/standard/tests/streams/opendir-001.phpt b/ext/standard/tests/streams/opendir-001.phpt new file mode 100644 index 0000000000000..9faf89a901850 --- /dev/null +++ b/ext/standard/tests/streams/opendir-001.phpt @@ -0,0 +1,19 @@ +--TEST-- +opendir() with 'ftp://' stream. +--SKIPIF-- + +--FILE-- + +==DONE== +--EXPECTF-- +Warning: opendir(ftp://localhost:%d/bogusdir): failed to open dir: FTP server reports 250 /bogusdir: No such file or directory + in %s on line %d +bool(false) +==DONE== diff --git a/ext/standard/tests/streams/opendir-002.phpt b/ext/standard/tests/streams/opendir-002.phpt new file mode 100644 index 0000000000000..a1f7826ebad1c --- /dev/null +++ b/ext/standard/tests/streams/opendir-002.phpt @@ -0,0 +1,17 @@ +--TEST-- +opendir() with 'ftp://' stream. +--SKIPIF-- + +--FILE-- + +==DONE== +--EXPECTF-- +resource(%d) of type (stream) +==DONE== From cd26f72662185dd251095203e0738c4ddaf7c459 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Hukkam=C3=A4ki?= Date: Mon, 25 Jul 2016 13:18:04 +0300 Subject: [PATCH 3/6] Fix #72667. Test cases included. --- ext/ftp/tests/server.inc | 23 +++++++++------ ext/standard/ftp_fopen_wrapper.c | 11 ++++---- ext/standard/tests/streams/opendir-001.phpt | 19 +++++++++++++ ext/standard/tests/streams/opendir-002.phpt | 31 +++++++++++++++++++++ 4 files changed, 70 insertions(+), 14 deletions(-) create mode 100644 ext/standard/tests/streams/opendir-001.phpt create mode 100644 ext/standard/tests/streams/opendir-002.phpt diff --git a/ext/ftp/tests/server.inc b/ext/ftp/tests/server.inc index bb0c1ff10bec9..621ddf9252937 100644 --- a/ext/ftp/tests/server.inc +++ b/ext/ftp/tests/server.inc @@ -265,7 +265,7 @@ if ($pid) { } elseif (preg_match("~^NLST(?: ([A-Za-z./]+))?\r\n$~", $buf, $m)) { - if (isset($m[1]) && $m[1] === 'bogusdir') { + if (isset($m[1]) && (($m[1] === 'bogusdir') || ($m[1] === '/bogusdir'))) { fputs($s, "250 $m[1]: No such file or directory\r\n"); continue; } @@ -276,11 +276,17 @@ if ($pid) { continue; } + if (empty($pasv)) { + if (!$fs = stream_socket_client("tcp://$host:$port")) { + fputs($s, "425 Can't open data connection\r\n"); + continue; + } + } else { + $soc = stream_socket_server("tcp://127.0.0.1:$pasv_port"); + } fputs($s, "150 File status okay; about to open data connection\r\n"); - - if (!$fs = stream_socket_client("tcp://$host:$port")) { - fputs($s, "425 Can't open data connection\r\n"); - continue; + if (!empty($pasv)) { + $fs = stream_socket_accept($soc, 5); } if (empty($m[1]) || $m[1] !== 'emptydir') { @@ -368,7 +374,7 @@ if ($pid) { } fputs($s, "226 Closing data Connection.\r\n"); break; - case "mediumfile": + case "mediumfile": fputs($s, "150 File status okay; about to open data connection.\r\n"); for($i = 0; $i < 150; $i++){ fputs($fs, "This is line $i of the test data.\n"); @@ -384,13 +390,14 @@ if ($pid) { }elseif (preg_match('/^PASV/', $buf, $matches)) { + $pasv=true; $port = $pasv_port; $p2 = $port % ((int) 1 << 8); $p1 = ($port-$p2)/((int) 1 << 8); $host = "127.0.0.1"; fputs($s, "227 Entering Passive Mode. (127,0,0,1,{$p1},{$p2})\r\n"); - - + }elseif (preg_match('/^EPSV/', $buf, $matches)) { + fputs($s, "550 Extended passsive mode not supported.\r\n"); } elseif (preg_match('/^SITE EXEC/', $buf, $matches)) { fputs($s, "200 OK\r\n"); diff --git a/ext/standard/ftp_fopen_wrapper.c b/ext/standard/ftp_fopen_wrapper.c index c07d9443594ae..ff0f9421f7dcc 100644 --- a/ext/standard/ftp_fopen_wrapper.c +++ b/ext/standard/ftp_fopen_wrapper.c @@ -720,18 +720,17 @@ php_stream * php_stream_ftp_opendir(php_stream_wrapper *wrapper, const char *pat if (hoststart == NULL) { hoststart = resource->host; } - datastream = php_stream_sock_open_host(hoststart, portno, SOCK_STREAM, 0, 0); - if (datastream == NULL) { - goto opendir_errexit; - } result = GET_FTP_RESULT(stream); if (result != 150 && result != 125) { /* Could not retrieve or send the file * this data will only be sent to us after connection on the data port was initiated. */ - php_stream_close(datastream); - datastream = NULL; + goto opendir_errexit; + } + + datastream = php_stream_sock_open_host(hoststart, portno, SOCK_STREAM, 0, 0); + if (datastream == NULL) { goto opendir_errexit; } diff --git a/ext/standard/tests/streams/opendir-001.phpt b/ext/standard/tests/streams/opendir-001.phpt new file mode 100644 index 0000000000000..9faf89a901850 --- /dev/null +++ b/ext/standard/tests/streams/opendir-001.phpt @@ -0,0 +1,19 @@ +--TEST-- +opendir() with 'ftp://' stream. +--SKIPIF-- + +--FILE-- + +==DONE== +--EXPECTF-- +Warning: opendir(ftp://localhost:%d/bogusdir): failed to open dir: FTP server reports 250 /bogusdir: No such file or directory + in %s on line %d +bool(false) +==DONE== diff --git a/ext/standard/tests/streams/opendir-002.phpt b/ext/standard/tests/streams/opendir-002.phpt new file mode 100644 index 0000000000000..b54d0965a7003 --- /dev/null +++ b/ext/standard/tests/streams/opendir-002.phpt @@ -0,0 +1,31 @@ +--TEST-- +opendir() with 'ftp://' stream. +--SKIPIF-- + +--FILE-- + +==DONE== +--EXPECTF-- +resource(%d) of type (stream) +string(5) "file1" +string(5) "file1" +string(3) "fil" +string(4) "b0rk" +==DONE== From c672a3e05f92cd095c175944f3656ed0a9ab1cc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Hukkam=C3=A4ki?= Date: Mon, 25 Jul 2016 15:42:29 +0300 Subject: [PATCH 4/6] Test cases for #54431, #41021. Test opendir() with ftps:// wrapper. --- ext/ftp/tests/cert.pem | 48 -------------------- ext/ftp/tests/server.inc | 15 ++++++- ext/ftp/tests/test.pem | 49 +++++++++++++++++++++ ext/standard/tests/streams/opendir-003.phpt | 22 +++++++++ ext/standard/tests/streams/opendir-004.phpt | 28 ++++++++++++ 5 files changed, 112 insertions(+), 50 deletions(-) delete mode 100644 ext/ftp/tests/cert.pem create mode 100644 ext/ftp/tests/test.pem create mode 100644 ext/standard/tests/streams/opendir-003.phpt create mode 100644 ext/standard/tests/streams/opendir-004.phpt diff --git a/ext/ftp/tests/cert.pem b/ext/ftp/tests/cert.pem deleted file mode 100644 index 94c61ffcc31fe..0000000000000 --- a/ext/ftp/tests/cert.pem +++ /dev/null @@ -1,48 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIBmzCCAQQCAQAwWzELMAkGA1UEBhMCUFQxCzAJBgNVBAgTAkx4MQswCQYDVQQH -EwJMeDEcMBoGA1UEChMTQSBtaW5oYSBlbXByZXNhLCBTQTEUMBIGA1UECxMLUEhQ -IFFBIFRlYW0wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM9mfEOSYwXf58ch -4NyO1QOU1XMfquz8OVpvMUITABLAevZpeQn6vZPHNyXHFQC0QC8scydK1rAYd2U+ -9K2aPub6ioMjYyjPpAE07l9EAAPUEBlqqsziB/wT8QjWkByyJEkYu+o0Wyjokhfn -BMPvm52wLWUx9nvUeNDCftnKg1wxAgMBAAGgADANBgkqhkiG9w0BAQQFAAOBgQDD -s1FeqPxnF2bWj8/dG8MyPaRfOAMVz1UsCZUciXIVG5LSIvR2qnMC3iEYt3s13sEq -z8VJlNHa8nniE+VFNv093yIu+PlWXMEvb5y5EFqP2AYq3RAT+SJsSxGqIdzPZiKY -INaktLCZmQ/E1v7/4hFzVRq9ydJI82DVS1nv282Whw== ------END CERTIFICATE REQUEST----- ------BEGIN CERTIFICATE----- -MIIC4zCCAkygAwIBAgIBADANBgkqhkiG9w0BAQQFADBbMQswCQYDVQQGEwJQVDEL -MAkGA1UECBMCTHgxCzAJBgNVBAcTAkx4MRwwGgYDVQQKExNBIG1pbmhhIGVtcHJl -c2EsIFNBMRQwEgYDVQQLEwtQSFAgUUEgVGVhbTAeFw0wNjExMTkxODIzNTNaFw0w -NzExMTkxODIzNTNaMFsxCzAJBgNVBAYTAlBUMQswCQYDVQQIEwJMeDELMAkGA1UE -BxMCTHgxHDAaBgNVBAoTE0EgbWluaGEgZW1wcmVzYSwgU0ExFDASBgNVBAsTC1BI -UCBRQSBUZWFtMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPZnxDkmMF3+fH -IeDcjtUDlNVzH6rs/DlabzFCEwASwHr2aXkJ+r2TxzclxxUAtEAvLHMnStawGHdl -PvStmj7m+oqDI2Moz6QBNO5fRAAD1BAZaqrM4gf8E/EI1pAcsiRJGLvqNFso6JIX -5wTD75udsC1lMfZ71HjQwn7ZyoNcMQIDAQABo4G2MIGzMB0GA1UdDgQWBBTIga5L -q+Ub1SWXgNZRYCpq3c8Z+jCBgwYDVR0jBHwweoAUyIGuS6vlG9Ull4DWUWAqat3P -GfqhX6RdMFsxCzAJBgNVBAYTAlBUMQswCQYDVQQIEwJMeDELMAkGA1UEBxMCTHgx -HDAaBgNVBAoTE0EgbWluaGEgZW1wcmVzYSwgU0ExFDASBgNVBAsTC1BIUCBRQSBU -ZWFtggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAe6AA8aC3KDI8 -smd+7XWjaTSp1Q0uMkEZ2PEBzif2I1aPPqw1CQykJ1iDdC/8PJ1yEIezloP2XQoZ -NjTaCO+uubay03ncoPTZvDUwExN9BYFAYgc2z3tLMHYbA7kM2sIbKys7ZQegLibr -TSKYQOBeYA/FB9GHECJGU3zBRvYi+Og= ------END CERTIFICATE----- ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: DES-EDE3-CBC,928762DB6DE222AD - -oOxNUBX0wrqmRqb3IEZMogc1bnVm6JoW6YFjGfHNcIz0jS7UPDhUFDR26y0dYujL -LEgxOcYo8ItvGcXSRbs+3W7lISbosgkB0DOaKx5jVmOGwUVRergUUSY8rbf93FtP -27CEvAfsU6do5HmlJ34mYZW1k+onCznlJXJkupQ5jmiily3GwEdr/5mMIVOmXQ6p -xWkxHySDKyVbR0v4JY3SJLRBuhgofYNG5155PiqZ7KwYY4Aw60eVgINsvJCF9/8b -kEj+lecHbBdAf7N82320Ga+F+VeFnUl0gWFjoIF9UFCO80+7ZvIGdGlyPkr4zMvt -TsC1snJQdHg+IlT3sGayYrQANpTG6GPYhn3KEvK5aqq+bPEe5lija0gw34jbPCo+ -TjHR76lToxzubGZODyyF/rjl5KwUbqTCNuv1PX1jTx7n7sCbu+KHpqXMhTHLKtby -+Wh7WAfsVrbIW+P85/mkfhPbPZ2621f9cyStdFGgWU4dHdD00HIGOgAJvUSbC2Au -oVUoKf2818t1s9aA4ptog04sNi+Ixu+z+3yYNLZj51j4ZX3KuXxLIiQvlvFQ8LQi -RHGQk3u2W3iNtDKKUQjMPaB2FlVtC7FmtHBCpRmos6ld240DDyucqMdIDTMaqV0+ -sL4X+LIeBM/hP/IquRTuQBHBmgjkN4845ihTUJOanyKx605ANq/roHzXrbIxhR5p -pcJLCBMLMWgdOCJMZRavSq04iXeNfP6Mk/joVpHS62Ljdfc94BBLfsOKOErA20Nq -lfvbZqy2tI5IIDoq05S8FU0DYNqq/hyrv9Udo8IAo+WkBOABm0x/WA== ------END RSA PRIVATE KEY----- - \ No newline at end of file diff --git a/ext/ftp/tests/server.inc b/ext/ftp/tests/server.inc index 621ddf9252937..defe1cdb6aab0 100644 --- a/ext/ftp/tests/server.inc +++ b/ext/ftp/tests/server.inc @@ -2,16 +2,18 @@ $socket = null; $errno = 0; -$context = stream_context_create(array('ssl' => array('local_cert' => dirname(__FILE__).'/cert.pem', 'passphrase' => 'pass'))); +$context = stream_context_create(array('ssl' => array('local_cert' => dirname(__FILE__).'/test.pem'))); for ($i=0; $i<10 && !$socket; ++$i) { $port = rand(50000, 65535); + $port=50000; $socket = stream_socket_server("tcp://127.0.0.1:$port", $errno, $errstr, STREAM_SERVER_BIND|STREAM_SERVER_LISTEN, $context); } //set anther random port that is not the same as $port do{ $pasv_port = rand(50000, 65535); + $pasv_port=50001; }while($pasv_port == $port); if (!$socket) { @@ -282,13 +284,22 @@ if ($pid) { continue; } } else { - $soc = stream_socket_server("tcp://127.0.0.1:$pasv_port"); + if (!empty($ssl)) { + $soc = stream_socket_server("tcp://127.0.0.1:$pasv_port", $errno, $errstr, STREAM_SERVER_BIND|STREAM_SERVER_LISTEN, $context); + } else { + $soc = stream_socket_server("tcp://127.0.0.1:$pasv_port"); + } } + fputs($s, "150 File status okay; about to open data connection\r\n"); if (!empty($pasv)) { $fs = stream_socket_accept($soc, 5); } + if ((!empty($ssl)) && (!stream_socket_enable_crypto($fs, true, STREAM_CRYPTO_METHOD_SSLv23_SERVER))) { + die("SSLv23 handshake failed.\n"); + } + if (empty($m[1]) || $m[1] !== 'emptydir') { fputs($fs, "file1\r\nfile1\r\nfile\nb0rk\r\n"); } diff --git a/ext/ftp/tests/test.pem b/ext/ftp/tests/test.pem new file mode 100644 index 0000000000000..2bb30614ed60e --- /dev/null +++ b/ext/ftp/tests/test.pem @@ -0,0 +1,49 @@ +-----BEGIN CERTIFICATE----- +MIIDhTCCAm2gAwIBAgIJAN75FFz+owOAMA0GCSqGSIb3DQEBCwUAMFkxCzAJBgNV +BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX +aWRnaXRzIFB0eSBMdGQxEjAQBgNVBAMMCTEyNy4wLjAuMTAeFw0xNjA3MjUxMjM3 +MTJaFw0yNjA3MjMxMjM3MTJaMFkxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21l +LVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxEjAQBgNV +BAMMCTEyNy4wLjAuMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALtG +AIrNUDItISfpAqztL2TFEWEHLGTzCEh5Ag2sdMD7UYbqIPHLOE4EINv+dqEMM0Nz +LYnw7ChtVegXT907xCaQcmeDFSdhqze4L8zawDfnn4syB8XAwGYJfpstYwe3nO6+ +0WvLSb1A5TYNeyoXjwlAUKElxkeWAo51uhR41GDhDQ9GgpqX1ccAhmSoUhgIRSzf +6f4KE3WTdzl1p12ZtkYHB8Jo2jB/JXnwGOz6isLnpRvkex4B7sUX+7u1MqK/e1X7 +Hi1G/VkaAfC2SOfjTePtGBDBXrQ1arYXDPRA04sgFzSh55l7lC/4HasQ/jAb3h95 +dcEIqyc69iioaN1c1NcCAwEAAaNQME4wHQYDVR0OBBYEFNv3kefb1H+6/6CpjiBi ++I2s9E90MB8GA1UdIwQYMBaAFNv3kefb1H+6/6CpjiBi+I2s9E90MAwGA1UdEwQF +MAMBAf8wDQYJKoZIhvcNAQELBQADggEBAIzSEWpHSaBs7KduBRXX5+qFxBN6OCPl +7ID0rxAOYfw7ruzbmwgOpBgMIHGn+KqA6CmQI0jh9bZbv5TV2aFpFsUihugPc2lW +5EshCozxlEPmIJNsO8jDqPE4w3m4KiVTscRWjBa5cco+lwLDqboerm2l7vvrtr6B +pgLaZct1c73MouvoJSCGK5EOGW7jsgaxjxJ3UZug+24Ko1wulO2cgBLhda9Ilrnx +CIKI9h8Z2WVWuVQfyCyO1g7XkJgkBec77OhxD+m4onzPY6waqnnhmFOBcS+gKgBV +jHeK9DCvZ9zet3EyEp6fyQOOtsC+gU0piYgfsQL7aCp5oLe+fjTiuUY= +-----END CERTIFICATE----- +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC7RgCKzVAyLSEn +6QKs7S9kxRFhByxk8whIeQINrHTA+1GG6iDxyzhOBCDb/nahDDNDcy2J8OwobVXo +F0/dO8QmkHJngxUnYas3uC/M2sA355+LMgfFwMBmCX6bLWMHt5zuvtFry0m9QOU2 +DXsqF48JQFChJcZHlgKOdboUeNRg4Q0PRoKal9XHAIZkqFIYCEUs3+n+ChN1k3c5 +daddmbZGBwfCaNowfyV58Bjs+orC56Ub5HseAe7FF/u7tTKiv3tV+x4tRv1ZGgHw +tkjn403j7RgQwV60NWq2Fwz0QNOLIBc0oeeZe5Qv+B2rEP4wG94feXXBCKsnOvYo +qGjdXNTXAgMBAAECggEAD7yDISa9fWnjZlojGmrX16zjl/alWVo+sPBSJtn9+ZVk +tWSJHihIc+3O4Q2R5FiFGj7cbcHr5j3BwT3sPRfflKoAowgVx/hiDc2RXrJnAouZ +EXZDxu86e5iCpgF7V9OrATjRmjA74wZH/HHHjrLqFwnrfI8TCULmthfYag35Mqax +qrIEzvSuYdaGxblNe+ZfnVEDW2F9DLBGcma0ffUlJp8AvV7bpo8Rj/JovPxit/VS +UdwSRxwSAugctFpmcGlFkoQfxUx1WdEy8hjopLrayMjCCJvRUL4+C4zT9r9PBHOj +fCSbJ+ajQIoRrgaL9bURk8BFMHY8+yMUsWEYVSmFAQKBgQDtOvPkhvZsNocUB5nJ +ti3SXyDQ6OZQuKKHPSeDV/EvmZKeNlrQ1ZnwXLP3vkcedDOkt1nEVq/hUewpjt08 +2MvmMwJBQEnmbTzMf43DtlXsStdP1lhYaFbU4iMM5zRfyBHDu1GPZEPXvKKpJUk0 +M+jYIyTAP3mcZhqDKn0mPVP7VwKBgQDKFy9DtWFKxCvhFQvHx7YeZiVWJbIst/O4 +ZyuPVAErni0hzSeCkmm7+F9hgEdPSLRcSaeTWP4L0u1cixECKboIhoNs38aft7o3 +MdnI2RDSEKtKX2uVuhvpGDNuGpBAc8Qu8iCiv5INSC36ZhD1h++O/TiiUdgRJ3yX +yeG7ej+CgQKBgCR5F95e0aw5hfMSaBaXJ9xcO9Niu2ZVvMdGI7kR4EcNOXmRqczJ +ym0mE5VXb9/Cxd3hQq/pFAl0avbIvEMKoe62kPYvSC1hRiO6yLT6Z6N4rjncHqEZ +CaCZVAI72dWQEQsi1ZtSMwwMOIYA8YxRHs98N75HBA+DszfPZIZoj2zpAoGBAJHp +B3ElhmeLF/tdTLIj2bQ9H/wBH5H2Bvw/UU4c4vNxMzjSfRJjUAAtpgAptFLkNYTk +kR9sA5DZ7BMDPXaIVg9Nv5peP3SWHNc5IPtI7kIdUu9R0cW7J+e2V3vJphlC/ITA +wRuAoZ0BXmEKTHhae3aMEdXwrcZE8kpNsrO/4hcBAoGBAMISiPJPuxAX1UtqcxTa +mDJfnQ2gxRu6AK9VmXqo0X4IBxDSnTjcL0huUlS849wgsE5oTXgdYb2hn+TXM5JJ +NsEXLhV09X1mrk4M4LV1npd0mYxvFsO4+p+IX5YLiahInmQtq0gx3DWE8wouVFER +4yzfp27z8MZT8Qvr/ZI9lzWd +-----END PRIVATE KEY----- diff --git a/ext/standard/tests/streams/opendir-003.phpt b/ext/standard/tests/streams/opendir-003.phpt new file mode 100644 index 0000000000000..615a7ff27b054 --- /dev/null +++ b/ext/standard/tests/streams/opendir-003.phpt @@ -0,0 +1,22 @@ +--TEST-- +opendir() with 'ftps://' stream. +--SKIPIF-- + +--FILE-- + array('cafile' => __DIR__ . '/../../../ftp/tests/test.pem'))); + +var_dump(opendir($path, $context)); +?> +==DONE== +--EXPECTF-- +Warning: opendir(ftps://localhost:%d/bogusdir): failed to open dir: FTP server reports 250 /bogusdir: No such file or directory + in %s on line %d +bool(false) +==DONE== diff --git a/ext/standard/tests/streams/opendir-004.phpt b/ext/standard/tests/streams/opendir-004.phpt new file mode 100644 index 0000000000000..3e18ea1f36027 --- /dev/null +++ b/ext/standard/tests/streams/opendir-004.phpt @@ -0,0 +1,28 @@ +--TEST-- +opendir() with 'ftps://' stream. +--SKIPIF-- + +--FILE-- + array('cafile' => __DIR__ . '/../../../ftp/tests/test.pem'))); + +$ds=opendir($path, $context); +var_dump($ds); +while ($fn=readdir($ds)) { + var_dump($fn); +} +?> +==DONE== +--EXPECTF-- +resource(%d) of type (stream) +string(5) "file1" +string(5) "file1" +string(3) "fil" +string(4) "b0rk" +==DONE== From cad9295bccfee29b9cdf62c0813b4797df1eea82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Hukkam=C3=A4ki?= Date: Mon, 25 Jul 2016 15:47:11 +0300 Subject: [PATCH 5/6] Removed (temporary) local test settings. --- ext/ftp/tests/server.inc | 2 -- 1 file changed, 2 deletions(-) diff --git a/ext/ftp/tests/server.inc b/ext/ftp/tests/server.inc index defe1cdb6aab0..dc612e8b63eed 100644 --- a/ext/ftp/tests/server.inc +++ b/ext/ftp/tests/server.inc @@ -6,14 +6,12 @@ $context = stream_context_create(array('ssl' => array('local_cert' => dirname(__ for ($i=0; $i<10 && !$socket; ++$i) { $port = rand(50000, 65535); - $port=50000; $socket = stream_socket_server("tcp://127.0.0.1:$port", $errno, $errstr, STREAM_SERVER_BIND|STREAM_SERVER_LISTEN, $context); } //set anther random port that is not the same as $port do{ $pasv_port = rand(50000, 65535); - $pasv_port=50001; }while($pasv_port == $port); if (!$socket) { From 5ef785dacae6cb1652ce298c404e6592d6199351 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Hukkam=C3=A4ki?= Date: Mon, 25 Jul 2016 15:52:34 +0300 Subject: [PATCH 6/6] Fix opendir() test case. --- ext/standard/tests/streams/opendir-003.phpt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ext/standard/tests/streams/opendir-003.phpt b/ext/standard/tests/streams/opendir-003.phpt index 615a7ff27b054..a2e34e7cb791e 100644 --- a/ext/standard/tests/streams/opendir-003.phpt +++ b/ext/standard/tests/streams/opendir-003.phpt @@ -8,7 +8,7 @@ opendir() with 'ftps://' stream. $ssl=true; require __DIR__ . "/../../../ftp/tests/server.inc"; -$path="ftps://localhost:" . $port."/bogusdir"; +$path="ftps://127.0.0.1:" . $port."/bogusdir"; $context = stream_context_create(array('ssl' => array('cafile' => __DIR__ . '/../../../ftp/tests/test.pem'))); @@ -16,7 +16,7 @@ var_dump(opendir($path, $context)); ?> ==DONE== --EXPECTF-- -Warning: opendir(ftps://localhost:%d/bogusdir): failed to open dir: FTP server reports 250 /bogusdir: No such file or directory +Warning: opendir(ftps://127.0.0.1:%d/bogusdir): failed to open dir: FTP server reports 250 /bogusdir: No such file or directory in %s on line %d bool(false) ==DONE==