summaryrefslogtreecommitdiff
path: root/ext/ftp/tests/server.inc
diff options
context:
space:
mode:
Diffstat (limited to 'ext/ftp/tests/server.inc')
-rw-r--r--ext/ftp/tests/server.inc78
1 files changed, 18 insertions, 60 deletions
diff --git a/ext/ftp/tests/server.inc b/ext/ftp/tests/server.inc
index 38599391d6..8bc836fc40 100644
--- a/ext/ftp/tests/server.inc
+++ b/ext/ftp/tests/server.inc
@@ -4,59 +4,21 @@ $socket = null;
$errno = 0;
$context = stream_context_create(array('ssl' => array('local_cert' => dirname(__FILE__).'/cert.pem')));
-for ($i=0; $i<10 && !$socket; ++$i) {
- $port = rand(50000, 65535);
-
- $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);
-}while($pasv_port == $port);
-
+$socket = stream_socket_server("tcp://127.0.0.1:0", $errno, $errstr, STREAM_SERVER_BIND|STREAM_SERVER_LISTEN, $context);
if (!$socket) {
echo "$errstr ($errno)\n";
die("could not start/bind the ftp server\n");
}
-$pid = pcntl_fork();
+$socket_name = stream_socket_get_name($socket, false);
+$port = (int) substr($socket_name, strrpos($socket_name, ':') + 1);
-function pasv_listen($action){
- global $pasv_port, $tmp_file;
- $tmp_file = 'nm2.php';
- $pid = pcntl_fork();
- if($pid === 0){
- $soc = stream_socket_server("tcp://127.0.0.1:$pasv_port");
- $fs = stream_socket_accept($soc, 3);
- switch ($action) {
- case 'fget':
- case 'get':
- //listen for 3 seconds 3 seconds
- fputs($fs, "I am passive.\r\n");
- break;
- case 'put':
- file_put_contents($tmp_file, stream_get_contents($fs));
- break;
- case 'list':
- fputs($fs, "drwxr-x--- 3 owner group 4096 Jul 12 12:16 .\r\n");
- fputs($fs, "drwxr-x--- 3 owner group 4096 Jul 12 12:16 ..\r\n");
- fputs($fs, "drwxr-x--- 3 owner group 4096 Jul 12 12:16 public_ftp\r\n");
- break;
- case 'list_null':
- fputs($fs, "\r\n");
- break;
- }
- fclose($fs);
- exit;
- }
-}
+$pid = pcntl_fork();
if ($pid) {
-
function dump_and_exit($buf)
{
var_dump($buf);
- fclose($GLOBALS['s']);
exit;
}
@@ -90,10 +52,14 @@ if ($pid) {
if (!$s) die("Error accepting a new connection\n");
+ register_shutdown_function(function() use($pid, $s) {
+ fclose($s);
+ pcntl_waitpid($pid, $status);
+ });
+
fputs($s, "220----- PHP FTP server 0.3 -----\r\n220 Service ready\r\n");
$buf = fread($s, 2048);
-
function user_auth($buf) {
global $user, $s, $ssl, $bug37799;
@@ -143,7 +109,6 @@ if ($pid) {
$user = $m[1];
if ($user !== 'user' && $user !== 'anonymous') {
fputs($s, "530 Not logged in.\r\n");
- fclose($s);
exit;
}
@@ -163,7 +128,6 @@ if ($pid) {
fputs($s, "230 User logged in\r\n");
} else {
fputs($s, "530 Not logged in.\r\n");
- fclose($s);
exit;
}
}
@@ -432,25 +396,20 @@ if ($pid) {
$i=0;
if (empty($bug73457)) {
- do {
- 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");
- }
- /* Could bind port, Try another port */
- if (!$soc) {
- $pasv_port = rand(50000, 65535);
- }
- $i++;
- } while ($i<10 && !$soc);
-
+ if (!empty($ssl)) {
+ $soc = stream_socket_server("tcp://127.0.0.1:0", $errno, $errstr, STREAM_SERVER_BIND|STREAM_SERVER_LISTEN, $context);
+ } else {
+ $soc = stream_socket_server("tcp://127.0.0.1:0");
+ }
if (!$soc) {
echo "$errstr ($errno)\n";
die("could not bind passive port\n");
}
+
+ $soc_name = stream_socket_get_name($soc, false);
+ $pasv_port = (int) substr($soc_name, strrpos($soc_name, ':') + 1);
} else {
- $pasv_port=1234;
+ $pasv_port = 1234;
}
$p2 = $pasv_port % ((int) 1 << 8);
@@ -548,7 +507,6 @@ if ($pid) {
dump_and_exit($buf);
}
}
- fclose($s);
exit;
}