summaryrefslogtreecommitdiff
path: root/ext/ftp
diff options
context:
space:
mode:
Diffstat (limited to 'ext/ftp')
-rw-r--r--ext/ftp/ftp.c14
-rw-r--r--ext/ftp/ftp.h2
-rw-r--r--ext/ftp/ftp.stub.php128
-rw-r--r--ext/ftp/ftp_arginfo.h278
-rw-r--r--ext/ftp/php_ftp.c398
-rw-r--r--ext/ftp/php_ftp.h42
-rw-r--r--ext/ftp/tests/004.phpt58
-rw-r--r--ext/ftp/tests/005.phpt2
-rw-r--r--ext/ftp/tests/006.phpt108
-rw-r--r--ext/ftp/tests/007.phpt331
-rw-r--r--ext/ftp/tests/ftp_fget_basic.phpt4
-rw-r--r--ext/ftp/tests/ftp_get_basic.phpt6
-rw-r--r--ext/ftp/tests/ftp_set_option_errors.phpt2
-rw-r--r--ext/ftp/tests/ftp_ssl_connect_error.phpt20
-rw-r--r--ext/ftp/tests/server.inc1048
15 files changed, 1219 insertions, 1222 deletions
diff --git a/ext/ftp/ftp.c b/ext/ftp/ftp.c
index 5bb359b353..5d41f063f8 100644
--- a/ext/ftp/ftp.c
+++ b/ext/ftp/ftp.c
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
@@ -23,7 +21,7 @@
#include "php.h"
-#if HAVE_FTP
+#ifdef HAVE_FTP
#include <stdio.h>
#include <ctype.h>
@@ -47,7 +45,7 @@
#endif
#include <errno.h>
-#if HAVE_SYS_TIME_H
+#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
@@ -274,7 +272,7 @@ ftp_login(ftpbuf_t *ftp, const char *user, const size_t user_len, const char *pa
ctx = SSL_CTX_new(SSLv23_client_method());
if (ctx == NULL) {
- php_error_docref(NULL, E_WARNING, "failed to create the SSL context");
+ php_error_docref(NULL, E_WARNING, "Failed to create the SSL context");
return 0;
}
@@ -290,7 +288,7 @@ ftp_login(ftpbuf_t *ftp, const char *user, const size_t user_len, const char *pa
SSL_CTX_free(ctx);
if (ftp->ssl_handle == NULL) {
- php_error_docref(NULL, E_WARNING, "failed to create the SSL handle");
+ php_error_docref(NULL, E_WARNING, "Failed to create the SSL handle");
return 0;
}
@@ -818,7 +816,7 @@ ftp_pasv(ftpbuf_t *ftp, int pasv)
return 0;
}
-#if HAVE_IPV6
+#ifdef HAVE_IPV6
if (sa->sa_family == AF_INET6) {
struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) sa;
char *endptr, delimiter;
@@ -1724,7 +1722,7 @@ ftp_getdata(ftpbuf_t *ftp)
data->listener = fd;
-#if HAVE_IPV6 && HAVE_INET_NTOP
+#if defined(HAVE_IPV6) && defined(HAVE_INET_NTOP)
if (sa->sa_family == AF_INET6) {
/* need to use EPRT */
char eprtarg[INET6_ADDRSTRLEN + sizeof("|x||xxxxx|")];
diff --git a/ext/ftp/ftp.h b/ext/ftp/ftp.h
index 2b1338d81d..27c39b5486 100644
--- a/ext/ftp/ftp.h
+++ b/ext/ftp/ftp.h
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
diff --git a/ext/ftp/ftp.stub.php b/ext/ftp/ftp.stub.php
new file mode 100644
index 0000000000..b293c453fa
--- /dev/null
+++ b/ext/ftp/ftp.stub.php
@@ -0,0 +1,128 @@
+<?php
+
+/** @generate-function-entries */
+
+/** @return resource|false */
+function ftp_connect(string $host, int $port = 21, int $timeout = 90) {}
+
+#ifdef HAVE_FTP_SSL
+/** @return resource|false */
+function ftp_ssl_connect(string $host, int $port = 21, int $timeout = 90) {}
+#endif
+
+/** @param resource $ftp */
+function ftp_login($ftp, string $username, string $password): bool {}
+
+/** @param resource $ftp */
+function ftp_pwd($ftp): string|false {}
+
+/** @param resource $ftp */
+function ftp_cdup($ftp): bool {}
+
+/** @param resource $ftp */
+function ftp_chdir($ftp, string $directory): bool {}
+
+/** @param resource $ftp */
+function ftp_exec($ftp, string $command): bool {}
+
+/** @param resource $ftp */
+function ftp_raw($ftp, string $command): array {}
+
+/** @param resource $ftp */
+function ftp_mkdir($ftp, string $directory): string|false {}
+
+/** @param resource $ftp */
+function ftp_rmdir($ftp, string $directory): bool {}
+
+/** @param resource $ftp */
+function ftp_chmod($ftp, int $mode, string $filename): int|false {}
+
+/** @param resource $ftp */
+function ftp_alloc($ftp, int $size, &$response = null): bool {}
+
+/** @param resource $ftp */
+function ftp_nlist($ftp, string $directory): array|false {}
+
+/** @param resource $ftp */
+function ftp_rawlist($ftp, string $directory, bool $recurse = false): array|false {}
+
+/** @param resource $ftp */
+function ftp_mlsd($ftp, string $directory): array|false {}
+
+/** @param resource $ftp */
+function ftp_systype($ftp): string|false {}
+
+/**
+ * @param resource $ftp
+ * @param resource $fp
+ */
+function ftp_fget($ftp, $fp, string $remote_file, int $mode = FTP_BINARY, int $resumepos = 0): bool {}
+
+/**
+ * @param resource $ftp
+ * @param resource $fp
+ */
+function ftp_nb_fget($ftp, $fp, string $remote_file, int $mode = FTP_BINARY, int $resumpos = 0): int|false {}
+
+/** @param resource $ftp */
+function ftp_pasv($ftp, bool $pasv): bool {}
+
+/** @param resource $ftp */
+function ftp_get($ftp, string $local_file, string $remote_file, int $mode = FTP_BINARY, int $resumepos = 0): bool {}
+
+/** @param resource $ftp */
+function ftp_nb_get($ftp, string $local_file, string $remote_file, int $mode = FTP_BINARY, int $resume_pos = 0): int {}
+
+/** @param resource $ftp */
+function ftp_nb_continue($ftp): int {}
+
+/**
+ * @param resource $ftp
+ * @param resource $fp
+ */
+function ftp_fput($ftp, string $remote_file, $fp, int $mode = FTP_BINARY, int $startpos = 0): bool {}
+
+/**
+ * @param resource $ftp
+ * @param resource $fp
+ */
+function ftp_nb_fput($ftp, string $remote_file, $fp, $mode = FTP_BINARY, $startpos = 0): int|false {}
+
+/** @param resource $ftp */
+function ftp_put($ftp, string $remote_file, string $local_file, int $mode = FTP_BINARY, int $startpos = 0): bool {}
+
+/** @param resource $ftp */
+function ftp_append($ftp, string $remove_file, string $local_file, int $mode = FTP_BINARY): bool {}
+
+/** @param resource $ftp */
+function ftp_nb_put($ftp, string $remote_file, string $local_file, int $mode = FTP_BINARY, int $startpos = 0): int|false {}
+
+/** @param resource $ftp */
+function ftp_size($ftp, string $filename): int {}
+
+/** @param resource $ftp */
+function ftp_mdtm($ftp, string $filename): int {}
+
+/** @param resource $ftp */
+function ftp_rename($ftp, string $src, string $dest): bool {}
+
+/** @param resource $ftp */
+function ftp_delete($ftp, string $file): bool {}
+
+/** @param resource $ftp */
+function ftp_site($ftp, string $cmd): bool {}
+
+/** @param resource $ftp */
+function ftp_close($ftp): bool {}
+
+/**
+ * @param resource $ftp
+ * @alias ftp_close
+ */
+function ftp_quit($ftp): bool {}
+
+/** @param resource $ftp */
+function ftp_set_option($ftp, int $option, $value): bool {}
+
+/** @param resource $ftp */
+function ftp_get_option($ftp, int $option): int|bool {}
diff --git a/ext/ftp/ftp_arginfo.h b/ext/ftp/ftp_arginfo.h
new file mode 100644
index 0000000000..738f8e9284
--- /dev/null
+++ b/ext/ftp/ftp_arginfo.h
@@ -0,0 +1,278 @@
+/* This is a generated file, edit the .stub.php file instead. */
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_ftp_connect, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, host, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, port, IS_LONG, 0, "21")
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, timeout, IS_LONG, 0, "90")
+ZEND_END_ARG_INFO()
+
+#if defined(HAVE_FTP_SSL)
+ZEND_BEGIN_ARG_INFO_EX(arginfo_ftp_ssl_connect, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, host, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, port, IS_LONG, 0, "21")
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, timeout, IS_LONG, 0, "90")
+ZEND_END_ARG_INFO()
+#endif
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_login, 0, 3, _IS_BOOL, 0)
+ ZEND_ARG_INFO(0, ftp)
+ ZEND_ARG_TYPE_INFO(0, username, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO(0, password, IS_STRING, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_ftp_pwd, 0, 1, MAY_BE_STRING|MAY_BE_FALSE)
+ ZEND_ARG_INFO(0, ftp)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_cdup, 0, 1, _IS_BOOL, 0)
+ ZEND_ARG_INFO(0, ftp)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_chdir, 0, 2, _IS_BOOL, 0)
+ ZEND_ARG_INFO(0, ftp)
+ ZEND_ARG_TYPE_INFO(0, directory, IS_STRING, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_exec, 0, 2, _IS_BOOL, 0)
+ ZEND_ARG_INFO(0, ftp)
+ ZEND_ARG_TYPE_INFO(0, command, IS_STRING, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_raw, 0, 2, IS_ARRAY, 0)
+ ZEND_ARG_INFO(0, ftp)
+ ZEND_ARG_TYPE_INFO(0, command, IS_STRING, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_ftp_mkdir, 0, 2, MAY_BE_STRING|MAY_BE_FALSE)
+ ZEND_ARG_INFO(0, ftp)
+ ZEND_ARG_TYPE_INFO(0, directory, IS_STRING, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_ftp_rmdir arginfo_ftp_chdir
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_ftp_chmod, 0, 3, MAY_BE_LONG|MAY_BE_FALSE)
+ ZEND_ARG_INFO(0, ftp)
+ ZEND_ARG_TYPE_INFO(0, mode, IS_LONG, 0)
+ ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_alloc, 0, 2, _IS_BOOL, 0)
+ ZEND_ARG_INFO(0, ftp)
+ ZEND_ARG_TYPE_INFO(0, size, IS_LONG, 0)
+ ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, response, "null")
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_ftp_nlist, 0, 2, MAY_BE_ARRAY|MAY_BE_FALSE)
+ ZEND_ARG_INFO(0, ftp)
+ ZEND_ARG_TYPE_INFO(0, directory, IS_STRING, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_ftp_rawlist, 0, 2, MAY_BE_ARRAY|MAY_BE_FALSE)
+ ZEND_ARG_INFO(0, ftp)
+ ZEND_ARG_TYPE_INFO(0, directory, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, recurse, _IS_BOOL, 0, "false")
+ZEND_END_ARG_INFO()
+
+#define arginfo_ftp_mlsd arginfo_ftp_nlist
+
+#define arginfo_ftp_systype arginfo_ftp_pwd
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_fget, 0, 3, _IS_BOOL, 0)
+ ZEND_ARG_INFO(0, ftp)
+ ZEND_ARG_INFO(0, fp)
+ ZEND_ARG_TYPE_INFO(0, remote_file, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "FTP_BINARY")
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, resumepos, IS_LONG, 0, "0")
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_ftp_nb_fget, 0, 3, MAY_BE_LONG|MAY_BE_FALSE)
+ ZEND_ARG_INFO(0, ftp)
+ ZEND_ARG_INFO(0, fp)
+ ZEND_ARG_TYPE_INFO(0, remote_file, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "FTP_BINARY")
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, resumpos, IS_LONG, 0, "0")
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_pasv, 0, 2, _IS_BOOL, 0)
+ ZEND_ARG_INFO(0, ftp)
+ ZEND_ARG_TYPE_INFO(0, pasv, _IS_BOOL, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_get, 0, 3, _IS_BOOL, 0)
+ ZEND_ARG_INFO(0, ftp)
+ ZEND_ARG_TYPE_INFO(0, local_file, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO(0, remote_file, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "FTP_BINARY")
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, resumepos, IS_LONG, 0, "0")
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_nb_get, 0, 3, IS_LONG, 0)
+ ZEND_ARG_INFO(0, ftp)
+ ZEND_ARG_TYPE_INFO(0, local_file, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO(0, remote_file, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "FTP_BINARY")
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, resume_pos, IS_LONG, 0, "0")
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_nb_continue, 0, 1, IS_LONG, 0)
+ ZEND_ARG_INFO(0, ftp)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_fput, 0, 3, _IS_BOOL, 0)
+ ZEND_ARG_INFO(0, ftp)
+ ZEND_ARG_TYPE_INFO(0, remote_file, IS_STRING, 0)
+ ZEND_ARG_INFO(0, fp)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "FTP_BINARY")
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, startpos, IS_LONG, 0, "0")
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_ftp_nb_fput, 0, 3, MAY_BE_LONG|MAY_BE_FALSE)
+ ZEND_ARG_INFO(0, ftp)
+ ZEND_ARG_TYPE_INFO(0, remote_file, IS_STRING, 0)
+ ZEND_ARG_INFO(0, fp)
+ ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, mode, "FTP_BINARY")
+ ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, startpos, "0")
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_put, 0, 3, _IS_BOOL, 0)
+ ZEND_ARG_INFO(0, ftp)
+ ZEND_ARG_TYPE_INFO(0, remote_file, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO(0, local_file, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "FTP_BINARY")
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, startpos, IS_LONG, 0, "0")
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_append, 0, 3, _IS_BOOL, 0)
+ ZEND_ARG_INFO(0, ftp)
+ ZEND_ARG_TYPE_INFO(0, remove_file, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO(0, local_file, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "FTP_BINARY")
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_ftp_nb_put, 0, 3, MAY_BE_LONG|MAY_BE_FALSE)
+ ZEND_ARG_INFO(0, ftp)
+ ZEND_ARG_TYPE_INFO(0, remote_file, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO(0, local_file, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_LONG, 0, "FTP_BINARY")
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, startpos, IS_LONG, 0, "0")
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_size, 0, 2, IS_LONG, 0)
+ ZEND_ARG_INFO(0, ftp)
+ ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_ftp_mdtm arginfo_ftp_size
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_rename, 0, 3, _IS_BOOL, 0)
+ ZEND_ARG_INFO(0, ftp)
+ ZEND_ARG_TYPE_INFO(0, src, IS_STRING, 0)
+ ZEND_ARG_TYPE_INFO(0, dest, IS_STRING, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_delete, 0, 2, _IS_BOOL, 0)
+ ZEND_ARG_INFO(0, ftp)
+ ZEND_ARG_TYPE_INFO(0, file, IS_STRING, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_site, 0, 2, _IS_BOOL, 0)
+ ZEND_ARG_INFO(0, ftp)
+ ZEND_ARG_TYPE_INFO(0, cmd, IS_STRING, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_ftp_close arginfo_ftp_cdup
+
+#define arginfo_ftp_quit arginfo_ftp_cdup
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_set_option, 0, 3, _IS_BOOL, 0)
+ ZEND_ARG_INFO(0, ftp)
+ ZEND_ARG_TYPE_INFO(0, option, IS_LONG, 0)
+ ZEND_ARG_INFO(0, value)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_ftp_get_option, 0, 2, MAY_BE_LONG|MAY_BE_BOOL)
+ ZEND_ARG_INFO(0, ftp)
+ ZEND_ARG_TYPE_INFO(0, option, IS_LONG, 0)
+ZEND_END_ARG_INFO()
+
+
+ZEND_FUNCTION(ftp_connect);
+#if defined(HAVE_FTP_SSL)
+ZEND_FUNCTION(ftp_ssl_connect);
+#endif
+ZEND_FUNCTION(ftp_login);
+ZEND_FUNCTION(ftp_pwd);
+ZEND_FUNCTION(ftp_cdup);
+ZEND_FUNCTION(ftp_chdir);
+ZEND_FUNCTION(ftp_exec);
+ZEND_FUNCTION(ftp_raw);
+ZEND_FUNCTION(ftp_mkdir);
+ZEND_FUNCTION(ftp_rmdir);
+ZEND_FUNCTION(ftp_chmod);
+ZEND_FUNCTION(ftp_alloc);
+ZEND_FUNCTION(ftp_nlist);
+ZEND_FUNCTION(ftp_rawlist);
+ZEND_FUNCTION(ftp_mlsd);
+ZEND_FUNCTION(ftp_systype);
+ZEND_FUNCTION(ftp_fget);
+ZEND_FUNCTION(ftp_nb_fget);
+ZEND_FUNCTION(ftp_pasv);
+ZEND_FUNCTION(ftp_get);
+ZEND_FUNCTION(ftp_nb_get);
+ZEND_FUNCTION(ftp_nb_continue);
+ZEND_FUNCTION(ftp_fput);
+ZEND_FUNCTION(ftp_nb_fput);
+ZEND_FUNCTION(ftp_put);
+ZEND_FUNCTION(ftp_append);
+ZEND_FUNCTION(ftp_nb_put);
+ZEND_FUNCTION(ftp_size);
+ZEND_FUNCTION(ftp_mdtm);
+ZEND_FUNCTION(ftp_rename);
+ZEND_FUNCTION(ftp_delete);
+ZEND_FUNCTION(ftp_site);
+ZEND_FUNCTION(ftp_close);
+ZEND_FUNCTION(ftp_set_option);
+ZEND_FUNCTION(ftp_get_option);
+
+
+static const zend_function_entry ext_functions[] = {
+ ZEND_FE(ftp_connect, arginfo_ftp_connect)
+#if defined(HAVE_FTP_SSL)
+ ZEND_FE(ftp_ssl_connect, arginfo_ftp_ssl_connect)
+#endif
+ ZEND_FE(ftp_login, arginfo_ftp_login)
+ ZEND_FE(ftp_pwd, arginfo_ftp_pwd)
+ ZEND_FE(ftp_cdup, arginfo_ftp_cdup)
+ ZEND_FE(ftp_chdir, arginfo_ftp_chdir)
+ ZEND_FE(ftp_exec, arginfo_ftp_exec)
+ ZEND_FE(ftp_raw, arginfo_ftp_raw)
+ ZEND_FE(ftp_mkdir, arginfo_ftp_mkdir)
+ ZEND_FE(ftp_rmdir, arginfo_ftp_rmdir)
+ ZEND_FE(ftp_chmod, arginfo_ftp_chmod)
+ ZEND_FE(ftp_alloc, arginfo_ftp_alloc)
+ ZEND_FE(ftp_nlist, arginfo_ftp_nlist)
+ ZEND_FE(ftp_rawlist, arginfo_ftp_rawlist)
+ ZEND_FE(ftp_mlsd, arginfo_ftp_mlsd)
+ ZEND_FE(ftp_systype, arginfo_ftp_systype)
+ ZEND_FE(ftp_fget, arginfo_ftp_fget)
+ ZEND_FE(ftp_nb_fget, arginfo_ftp_nb_fget)
+ ZEND_FE(ftp_pasv, arginfo_ftp_pasv)
+ ZEND_FE(ftp_get, arginfo_ftp_get)
+ ZEND_FE(ftp_nb_get, arginfo_ftp_nb_get)
+ ZEND_FE(ftp_nb_continue, arginfo_ftp_nb_continue)
+ ZEND_FE(ftp_fput, arginfo_ftp_fput)
+ ZEND_FE(ftp_nb_fput, arginfo_ftp_nb_fput)
+ ZEND_FE(ftp_put, arginfo_ftp_put)
+ ZEND_FE(ftp_append, arginfo_ftp_append)
+ ZEND_FE(ftp_nb_put, arginfo_ftp_nb_put)
+ ZEND_FE(ftp_size, arginfo_ftp_size)
+ ZEND_FE(ftp_mdtm, arginfo_ftp_mdtm)
+ ZEND_FE(ftp_rename, arginfo_ftp_rename)
+ ZEND_FE(ftp_delete, arginfo_ftp_delete)
+ ZEND_FE(ftp_site, arginfo_ftp_site)
+ ZEND_FE(ftp_close, arginfo_ftp_close)
+ ZEND_FALIAS(ftp_quit, ftp_close, arginfo_ftp_quit)
+ ZEND_FE(ftp_set_option, arginfo_ftp_set_option)
+ ZEND_FE(ftp_get_option, arginfo_ftp_get_option)
+ ZEND_FE_END
+};
diff --git a/ext/ftp/php_ftp.c b/ext/ftp/php_ftp.c
index e3b425ef0f..a5e5f50485 100644
--- a/ext/ftp/php_ftp.c
+++ b/ext/ftp/php_ftp.c
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
@@ -27,274 +25,24 @@
# include <openssl/ssl.h>
#endif
-#if HAVE_FTP
+#ifdef HAVE_FTP
#include "ext/standard/info.h"
#include "ext/standard/file.h"
#include "php_ftp.h"
#include "ftp.h"
+#include "ftp_arginfo.h"
static int le_ftpbuf;
#define le_ftpbuf_name "FTP Buffer"
-/* {{{ arginfo */
-ZEND_BEGIN_ARG_INFO_EX(arginfo_ftp_connect, 0, 0, 1)
- ZEND_ARG_INFO(0, host)
- ZEND_ARG_INFO(0, port)
- ZEND_ARG_INFO(0, timeout)
-ZEND_END_ARG_INFO()
-
-#ifdef HAVE_FTP_SSL
-ZEND_BEGIN_ARG_INFO_EX(arginfo_ftp_ssl_connect, 0, 0, 1)
- ZEND_ARG_INFO(0, host)
- ZEND_ARG_INFO(0, port)
- ZEND_ARG_INFO(0, timeout)
-ZEND_END_ARG_INFO()
-#endif
-
-ZEND_BEGIN_ARG_INFO(arginfo_ftp_login, 0)
- ZEND_ARG_INFO(0, ftp)
- ZEND_ARG_INFO(0, username)
- ZEND_ARG_INFO(0, password)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_ftp_pwd, 0)
- ZEND_ARG_INFO(0, ftp)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_ftp_cdup, 0)
- ZEND_ARG_INFO(0, ftp)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_ftp_chdir, 0)
- ZEND_ARG_INFO(0, ftp)
- ZEND_ARG_INFO(0, directory)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_ftp_exec, 0)
- ZEND_ARG_INFO(0, ftp)
- ZEND_ARG_INFO(0, command)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_ftp_raw, 0)
- ZEND_ARG_INFO(0, ftp)
- ZEND_ARG_INFO(0, command)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_ftp_mkdir, 0)
- ZEND_ARG_INFO(0, ftp)
- ZEND_ARG_INFO(0, directory)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_ftp_rmdir, 0)
- ZEND_ARG_INFO(0, ftp)
- ZEND_ARG_INFO(0, directory)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_ftp_chmod, 0)
- ZEND_ARG_INFO(0, ftp)
- ZEND_ARG_INFO(0, mode)
- ZEND_ARG_INFO(0, filename)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_ftp_alloc, 0, 0, 2)
- ZEND_ARG_INFO(0, ftp)
- ZEND_ARG_INFO(0, size)
- ZEND_ARG_INFO(1, response)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_ftp_nlist, 0)
- ZEND_ARG_INFO(0, ftp)
- ZEND_ARG_INFO(0, directory)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_ftp_rawlist, 0, 0, 2)
- ZEND_ARG_INFO(0, ftp)
- ZEND_ARG_INFO(0, directory)
- ZEND_ARG_INFO(0, recursive)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_ftp_mlsd, 0)
- ZEND_ARG_INFO(0, ftp)
- ZEND_ARG_INFO(0, directory)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_ftp_systype, 0)
- ZEND_ARG_INFO(0, ftp)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_ftp_fget, 0, 0, 3)
- ZEND_ARG_INFO(0, ftp)
- ZEND_ARG_INFO(0, fp)
- ZEND_ARG_INFO(0, remote_file)
- ZEND_ARG_INFO(0, mode)
- ZEND_ARG_INFO(0, resumepos)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_ftp_nb_fget, 0, 0, 3)
- ZEND_ARG_INFO(0, ftp)
- ZEND_ARG_INFO(0, fp)
- ZEND_ARG_INFO(0, remote_file)
- ZEND_ARG_INFO(0, mode)
- ZEND_ARG_INFO(0, resumepos)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_ftp_pasv, 0, 0, 2)
- ZEND_ARG_INFO(0, ftp)
- ZEND_ARG_INFO(0, pasv)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_ftp_get, 0, 0, 3)
- ZEND_ARG_INFO(0, ftp)
- ZEND_ARG_INFO(0, local_file)
- ZEND_ARG_INFO(0, remote_file)
- ZEND_ARG_INFO(0, mode)
- ZEND_ARG_INFO(0, resume_pos)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_ftp_nb_get, 0, 0, 3)
- ZEND_ARG_INFO(0, ftp)
- ZEND_ARG_INFO(0, local_file)
- ZEND_ARG_INFO(0, remote_file)
- ZEND_ARG_INFO(0, mode)
- ZEND_ARG_INFO(0, resume_pos)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_ftp_nb_continue, 0)
- ZEND_ARG_INFO(0, ftp)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_ftp_fput, 0, 0, 3)
- ZEND_ARG_INFO(0, ftp)
- ZEND_ARG_INFO(0, remote_file)
- ZEND_ARG_INFO(0, fp)
- ZEND_ARG_INFO(0, mode)
- ZEND_ARG_INFO(0, startpos)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_ftp_nb_fput, 0, 0, 3)
- ZEND_ARG_INFO(0, ftp)
- ZEND_ARG_INFO(0, remote_file)
- ZEND_ARG_INFO(0, fp)
- ZEND_ARG_INFO(0, mode)
- ZEND_ARG_INFO(0, startpos)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_ftp_put, 0, 0, 3)
- ZEND_ARG_INFO(0, ftp)
- ZEND_ARG_INFO(0, remote_file)
- ZEND_ARG_INFO(0, local_file)
- ZEND_ARG_INFO(0, mode)
- ZEND_ARG_INFO(0, startpos)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_ftp_append, 0, 0, 3)
- ZEND_ARG_INFO(0, ftp)
- ZEND_ARG_INFO(0, remote_file)
- ZEND_ARG_INFO(0, local_file)
- ZEND_ARG_INFO(0, mode)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_ftp_nb_put, 0, 0, 3)
- ZEND_ARG_INFO(0, ftp)
- ZEND_ARG_INFO(0, remote_file)
- ZEND_ARG_INFO(0, local_file)
- ZEND_ARG_INFO(0, mode)
- ZEND_ARG_INFO(0, startpos)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_ftp_size, 0)
- ZEND_ARG_INFO(0, ftp)
- ZEND_ARG_INFO(0, filename)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_ftp_mdtm, 0)
- ZEND_ARG_INFO(0, ftp)
- ZEND_ARG_INFO(0, filename)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_ftp_rename, 0)
- ZEND_ARG_INFO(0, ftp)
- ZEND_ARG_INFO(0, src)
- ZEND_ARG_INFO(0, dest)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_ftp_delete, 0)
- ZEND_ARG_INFO(0, ftp)
- ZEND_ARG_INFO(0, file)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_ftp_site, 0)
- ZEND_ARG_INFO(0, ftp)
- ZEND_ARG_INFO(0, cmd)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_ftp_close, 0)
- ZEND_ARG_INFO(0, ftp)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_ftp_set_option, 0)
- ZEND_ARG_INFO(0, ftp)
- ZEND_ARG_INFO(0, option)
- ZEND_ARG_INFO(0, value)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO(arginfo_ftp_get_option, 0)
- ZEND_ARG_INFO(0, ftp)
- ZEND_ARG_INFO(0, option)
-ZEND_END_ARG_INFO()
-
-/* }}} */
-
-static const zend_function_entry php_ftp_functions[] = {
- PHP_FE(ftp_connect, arginfo_ftp_connect)
-#ifdef HAVE_FTP_SSL
- PHP_FE(ftp_ssl_connect, arginfo_ftp_ssl_connect)
-#endif
- PHP_FE(ftp_login, arginfo_ftp_login)
- PHP_FE(ftp_pwd, arginfo_ftp_pwd)
- PHP_FE(ftp_cdup, arginfo_ftp_cdup)
- PHP_FE(ftp_chdir, arginfo_ftp_chdir)
- PHP_FE(ftp_exec, arginfo_ftp_exec)
- PHP_FE(ftp_raw, arginfo_ftp_raw)
- PHP_FE(ftp_mkdir, arginfo_ftp_mkdir)
- PHP_FE(ftp_rmdir, arginfo_ftp_rmdir)
- PHP_FE(ftp_chmod, arginfo_ftp_chmod)
- PHP_FE(ftp_alloc, arginfo_ftp_alloc)
- PHP_FE(ftp_nlist, arginfo_ftp_nlist)
- PHP_FE(ftp_rawlist, arginfo_ftp_rawlist)
- PHP_FE(ftp_mlsd, arginfo_ftp_mlsd)
- PHP_FE(ftp_systype, arginfo_ftp_systype)
- PHP_FE(ftp_pasv, arginfo_ftp_pasv)
- PHP_FE(ftp_get, arginfo_ftp_get)
- PHP_FE(ftp_fget, arginfo_ftp_fget)
- PHP_FE(ftp_put, arginfo_ftp_put)
- PHP_FE(ftp_append, arginfo_ftp_append)
- PHP_FE(ftp_fput, arginfo_ftp_fput)
- PHP_FE(ftp_size, arginfo_ftp_size)
- PHP_FE(ftp_mdtm, arginfo_ftp_mdtm)
- PHP_FE(ftp_rename, arginfo_ftp_rename)
- PHP_FE(ftp_delete, arginfo_ftp_delete)
- PHP_FE(ftp_site, arginfo_ftp_site)
- PHP_FE(ftp_close, arginfo_ftp_close)
- PHP_FE(ftp_set_option, arginfo_ftp_set_option)
- PHP_FE(ftp_get_option, arginfo_ftp_get_option)
- PHP_FE(ftp_nb_fget, arginfo_ftp_nb_fget)
- PHP_FE(ftp_nb_get, arginfo_ftp_nb_get)
- PHP_FE(ftp_nb_continue, arginfo_ftp_nb_continue)
- PHP_FE(ftp_nb_put, arginfo_ftp_nb_put)
- PHP_FE(ftp_nb_fput, arginfo_ftp_nb_fput)
- PHP_FALIAS(ftp_quit, ftp_close, arginfo_ftp_close)
- PHP_FE_END
-};
-
zend_module_entry php_ftp_module_entry = {
STANDARD_MODULE_HEADER_EX,
NULL,
NULL,
"ftp",
- php_ftp_functions,
+ ext_functions,
PHP_MINIT(ftp),
NULL,
NULL,
@@ -304,7 +52,7 @@ zend_module_entry php_ftp_module_entry = {
STANDARD_MODULE_PROPERTIES
};
-#if COMPILE_DL_FTP
+#ifdef COMPILE_DL_FTP
ZEND_GET_MODULE(php_ftp)
#endif
@@ -375,7 +123,7 @@ PHP_FUNCTION(ftp_connect)
zend_long timeout_sec = FTP_DEFAULT_TIMEOUT;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|ll", &host, &host_len, &port, &timeout_sec) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if (timeout_sec <= 0) {
@@ -412,7 +160,7 @@ PHP_FUNCTION(ftp_ssl_connect)
zend_long timeout_sec = FTP_DEFAULT_TIMEOUT;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|ll", &host, &host_len, &port, &timeout_sec) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if (timeout_sec <= 0) {
@@ -446,11 +194,11 @@ PHP_FUNCTION(ftp_login)
size_t user_len, pass_len;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rss", &z_ftp, &user, &user_len, &pass, &pass_len) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) {
- RETURN_FALSE;
+ RETURN_THROWS();
}
/* log in */
@@ -472,11 +220,11 @@ PHP_FUNCTION(ftp_pwd)
const char *pwd;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &z_ftp) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) {
- RETURN_FALSE;
+ RETURN_THROWS();
}
if (!(pwd = ftp_pwd(ftp))) {
@@ -496,11 +244,11 @@ PHP_FUNCTION(ftp_cdup)
ftpbuf_t *ftp;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &z_ftp) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) {
- RETURN_FALSE;
+ RETURN_THROWS();
}
if (!ftp_cdup(ftp)) {
@@ -522,11 +270,11 @@ PHP_FUNCTION(ftp_chdir)
size_t dir_len;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs", &z_ftp, &dir, &dir_len) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) {
- RETURN_FALSE;
+ RETURN_THROWS();
}
/* change directories */
@@ -549,11 +297,11 @@ PHP_FUNCTION(ftp_exec)
size_t cmd_len;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs", &z_ftp, &cmd, &cmd_len) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) {
- RETURN_FALSE;
+ RETURN_THROWS();
}
/* execute serverside command */
@@ -576,11 +324,11 @@ PHP_FUNCTION(ftp_raw)
size_t cmd_len;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs", &z_ftp, &cmd, &cmd_len) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) {
- RETURN_FALSE;
+ RETURN_THROWS();
}
/* execute arbitrary ftp command */
@@ -599,11 +347,11 @@ PHP_FUNCTION(ftp_mkdir)
size_t dir_len;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs", &z_ftp, &dir, &dir_len) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) {
- RETURN_FALSE;
+ RETURN_THROWS();
}
/* create directory */
@@ -626,11 +374,11 @@ PHP_FUNCTION(ftp_rmdir)
size_t dir_len;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs", &z_ftp, &dir, &dir_len) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) {
- RETURN_FALSE;
+ RETURN_THROWS();
}
/* remove directorie */
@@ -654,11 +402,11 @@ PHP_FUNCTION(ftp_chmod)
zend_long mode;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rlp", &z_ftp, &mode, &filename, &filename_len) == FAILURE) {
- RETURN_FALSE;
+ RETURN_THROWS();
}
if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) {
- RETURN_FALSE;
+ RETURN_THROWS();
}
if (!ftp_chmod(ftp, mode, filename, filename_len)) {
@@ -680,11 +428,11 @@ PHP_FUNCTION(ftp_alloc)
zend_string *response = NULL;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rl|z", &z_ftp, &size, &zresponse) == FAILURE) {
- RETURN_FALSE;
+ RETURN_THROWS();
}
if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) {
- RETURN_FALSE;
+ RETURN_THROWS();
}
ret = ftp_alloc(ftp, size, zresponse ? &response : NULL);
@@ -711,11 +459,11 @@ PHP_FUNCTION(ftp_nlist)
size_t dir_len;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rp", &z_ftp, &dir, &dir_len) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) {
- RETURN_FALSE;
+ RETURN_THROWS();
}
/* get list of files */
@@ -742,11 +490,11 @@ PHP_FUNCTION(ftp_rawlist)
zend_bool recursive = 0;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs|b", &z_ftp, &dir, &dir_len, &recursive) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) {
- RETURN_FALSE;
+ RETURN_THROWS();
}
/* get raw directory listing */
@@ -773,11 +521,11 @@ PHP_FUNCTION(ftp_mlsd)
zval entry;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs", &z_ftp, &dir, &dir_len) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) {
- RETURN_FALSE;
+ RETURN_THROWS();
}
/* get raw directory listing */
@@ -808,11 +556,11 @@ PHP_FUNCTION(ftp_systype)
const char *syst;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &z_ftp) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) {
- RETURN_FALSE;
+ RETURN_THROWS();
}
if (NULL == (syst = ftp_syst(ftp))) {
@@ -837,11 +585,11 @@ PHP_FUNCTION(ftp_fget)
zend_long mode=FTPTYPE_IMAGE, resumepos=0;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rrs|ll", &z_ftp, &z_file, &file, &file_len, &mode, &resumepos) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) {
- RETURN_FALSE;
+ RETURN_THROWS();
}
php_stream_from_res(stream, Z_RES_P(z_file));
XTYPE(xtype, mode);
@@ -883,11 +631,11 @@ PHP_FUNCTION(ftp_nb_fget)
zend_long mode=FTPTYPE_IMAGE, resumepos=0, ret;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rrs|ll", &z_ftp, &z_file, &file, &file_len, &mode, &resumepos) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) {
- RETURN_FALSE;
+ RETURN_THROWS();
}
php_stream_from_res(stream, Z_RES_P(z_file));
XTYPE(xtype, mode);
@@ -929,11 +677,11 @@ PHP_FUNCTION(ftp_pasv)
zend_bool pasv;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rb", &z_ftp, &pasv) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) {
- RETURN_FALSE;
+ RETURN_THROWS();
}
if (!ftp_pasv(ftp, pasv ? 1 : 0)) {
@@ -957,11 +705,11 @@ PHP_FUNCTION(ftp_get)
zend_long mode=FTPTYPE_IMAGE, resumepos=0;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rpp|ll", &z_ftp, &local, &local_len, &remote, &remote_len, &mode, &resumepos) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) {
- RETURN_FALSE;
+ RETURN_THROWS();
}
XTYPE(xtype, mode);
@@ -1023,11 +771,11 @@ PHP_FUNCTION(ftp_nb_get)
zend_long mode=FTPTYPE_IMAGE, resumepos=0;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rss|ll", &z_ftp, &local, &local_len, &remote, &remote_len, &mode, &resumepos) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) {
- RETURN_FALSE;
+ RETURN_THROWS();
}
XTYPE(xtype, mode);
@@ -1091,15 +839,15 @@ PHP_FUNCTION(ftp_nb_continue)
zend_long ret;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &z_ftp) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) {
- RETURN_FALSE;
+ RETURN_THROWS();
}
if (!ftp->nb) {
- php_error_docref(NULL, E_WARNING, "no nbronous transfer to continue.");
+ php_error_docref(NULL, E_WARNING, "No nbronous transfer to continue.");
RETURN_LONG(PHP_FTP_FAILED);
}
@@ -1135,11 +883,11 @@ PHP_FUNCTION(ftp_fput)
char *remote;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rsr|ll", &z_ftp, &remote, &remote_len, &z_file, &mode, &startpos) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) {
- RETURN_FALSE;
+ RETURN_THROWS();
}
php_stream_from_zval(stream, z_file);
XTYPE(xtype, mode);
@@ -1185,11 +933,11 @@ PHP_FUNCTION(ftp_nb_fput)
char *remote;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rsr|ll", &z_ftp, &remote, &remote_len, &z_file, &mode, &startpos) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) {
- RETURN_FALSE;
+ RETURN_THROWS();
}
php_stream_from_res(stream, Z_RES_P(z_file));
XTYPE(xtype, mode);
@@ -1239,11 +987,11 @@ PHP_FUNCTION(ftp_put)
php_stream *instream;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rpp|ll", &z_ftp, &remote, &remote_len, &local, &local_len, &mode, &startpos) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) {
- RETURN_FALSE;
+ RETURN_THROWS();
}
XTYPE(xtype, mode);
@@ -1293,11 +1041,11 @@ PHP_FUNCTION(ftp_append)
php_stream *instream;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rpp|l", &z_ftp, &remote, &remote_len, &local, &local_len, &mode) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) {
- RETURN_FALSE;
+ RETURN_THROWS();
}
XTYPE(xtype, mode);
@@ -1329,11 +1077,11 @@ PHP_FUNCTION(ftp_nb_put)
php_stream *instream;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rpp|ll", &z_ftp, &remote, &remote_len, &local, &local_len, &mode, &startpos) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) {
- RETURN_FALSE;
+ RETURN_THROWS();
}
XTYPE(xtype, mode);
@@ -1388,11 +1136,11 @@ PHP_FUNCTION(ftp_size)
size_t file_len;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rp", &z_ftp, &file, &file_len) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) {
- RETURN_FALSE;
+ RETURN_THROWS();
}
/* get file size */
@@ -1410,11 +1158,11 @@ PHP_FUNCTION(ftp_mdtm)
size_t file_len;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rp", &z_ftp, &file, &file_len) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) {
- RETURN_FALSE;
+ RETURN_THROWS();
}
/* get file mod time */
@@ -1432,11 +1180,11 @@ PHP_FUNCTION(ftp_rename)
size_t src_len, dest_len;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rss", &z_ftp, &src, &src_len, &dest, &dest_len) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) {
- RETURN_FALSE;
+ RETURN_THROWS();
}
/* rename the file */
@@ -1459,11 +1207,11 @@ PHP_FUNCTION(ftp_delete)
size_t file_len;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs", &z_ftp, &file, &file_len) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) {
- RETURN_FALSE;
+ RETURN_THROWS();
}
/* delete the file */
@@ -1486,11 +1234,11 @@ PHP_FUNCTION(ftp_site)
size_t cmd_len;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs", &z_ftp, &cmd, &cmd_len) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) {
- RETURN_FALSE;
+ RETURN_THROWS();
}
/* send the site command */
@@ -1511,11 +1259,11 @@ PHP_FUNCTION(ftp_close)
ftpbuf_t *ftp;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &z_ftp) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) {
- RETURN_FALSE;
+ RETURN_THROWS();
}
ftp_quit(ftp);
@@ -1533,11 +1281,11 @@ PHP_FUNCTION(ftp_set_option)
ftpbuf_t *ftp;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rlz", &z_ftp, &option, &z_value) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) {
- RETURN_FALSE;
+ RETURN_THROWS();
}
switch (option) {
@@ -1589,11 +1337,11 @@ PHP_FUNCTION(ftp_get_option)
ftpbuf_t *ftp;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rl", &z_ftp, &option) == FAILURE) {
- return;
+ RETURN_THROWS();
}
if ((ftp = (ftpbuf_t *)zend_fetch_resource(Z_RES_P(z_ftp), le_ftpbuf_name, le_ftpbuf)) == NULL) {
- RETURN_FALSE;
+ RETURN_THROWS();
}
switch (option) {
diff --git a/ext/ftp/php_ftp.h b/ext/ftp/php_ftp.h
index f3033df8fe..60eba04adf 100644
--- a/ext/ftp/php_ftp.h
+++ b/ext/ftp/php_ftp.h
@@ -1,7 +1,5 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 7 |
- +----------------------------------------------------------------------+
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
@@ -20,7 +18,7 @@
#ifndef _INCLUDED_FTP_H
#define _INCLUDED_FTP_H
-#if HAVE_FTP
+#ifdef HAVE_FTP
extern zend_module_entry php_ftp_module_entry;
#define php_ftp_module_ptr &php_ftp_module_entry
@@ -36,44 +34,6 @@ extern zend_module_entry php_ftp_module_entry;
PHP_MINIT_FUNCTION(ftp);
PHP_MINFO_FUNCTION(ftp);
-PHP_FUNCTION(ftp_connect);
-#ifdef HAVE_FTP_SSL
-PHP_FUNCTION(ftp_ssl_connect);
-#endif
-PHP_FUNCTION(ftp_login);
-PHP_FUNCTION(ftp_pwd);
-PHP_FUNCTION(ftp_cdup);
-PHP_FUNCTION(ftp_chdir);
-PHP_FUNCTION(ftp_exec);
-PHP_FUNCTION(ftp_raw);
-PHP_FUNCTION(ftp_mkdir);
-PHP_FUNCTION(ftp_rmdir);
-PHP_FUNCTION(ftp_chmod);
-PHP_FUNCTION(ftp_alloc);
-PHP_FUNCTION(ftp_nlist);
-PHP_FUNCTION(ftp_rawlist);
-PHP_FUNCTION(ftp_mlsd);
-PHP_FUNCTION(ftp_systype);
-PHP_FUNCTION(ftp_pasv);
-PHP_FUNCTION(ftp_get);
-PHP_FUNCTION(ftp_fget);
-PHP_FUNCTION(ftp_put);
-PHP_FUNCTION(ftp_append);
-PHP_FUNCTION(ftp_fput);
-PHP_FUNCTION(ftp_size);
-PHP_FUNCTION(ftp_mdtm);
-PHP_FUNCTION(ftp_rename);
-PHP_FUNCTION(ftp_delete);
-PHP_FUNCTION(ftp_site);
-PHP_FUNCTION(ftp_close);
-PHP_FUNCTION(ftp_set_option);
-PHP_FUNCTION(ftp_get_option);
-PHP_FUNCTION(ftp_nb_get);
-PHP_FUNCTION(ftp_nb_fget);
-PHP_FUNCTION(ftp_nb_put);
-PHP_FUNCTION(ftp_nb_fput);
-PHP_FUNCTION(ftp_nb_continue);
-
#define phpext_ftp_ptr php_ftp_module_ptr
#else
diff --git a/ext/ftp/tests/004.phpt b/ext/ftp/tests/004.phpt
index 3fcf272e3b..b95c12c518 100644
--- a/ext/ftp/tests/004.phpt
+++ b/ext/ftp/tests/004.phpt
@@ -8,68 +8,22 @@ require 'skipif.inc';
<?php
require 'server.inc';
+// Negative timeout
+var_dump(ftp_connect('127.0.0.1', 0, -3));
+
$ftp = ftp_connect('127.0.0.1', $port);
if (!$ftp) die("Couldn't connect to the server");
var_dump(ftp_login($ftp, 'user', 'pass'));
-
-var_dump(ftp_systype($ftp));
-
-/* some bogus usage */
-var_dump(ftp_alloc($ftp, array()));
-var_dump(ftp_cdup($ftp, 0));
-var_dump(ftp_chdir($ftp, array()));
-var_dump(ftp_chmod($ftp, 0666));
-var_dump(ftp_close());
-var_dump(ftp_connect('sfjkfjaksfjkasjf'));
-var_dump(ftp_delete($ftp, array()));
-var_dump(ftp_exec($ftp, array()));
-
-var_dump(ftp_systype($ftp, 0));
-var_dump(ftp_pwd($ftp, array()));
-
-var_dump(ftp_login($ftp));
var_dump(ftp_login($ftp, 'user', 'bogus'));
var_dump(ftp_quit($ftp));
?>
--EXPECTF--
-bool(true)
-string(4) "UNIX"
-
-Warning: ftp_alloc() expects parameter 2 to be int, array given in %s004.php on line 12
-bool(false)
-
-Warning: ftp_cdup() expects exactly 1 parameter, 2 given in %s004.php on line 13
-NULL
-
-Warning: ftp_chdir() expects parameter 2 to be string, array given in %s004.php on line 14
-NULL
-
-Warning: ftp_chmod() expects exactly 3 parameters, 2 given in %s on line %d
+Warning: ftp_connect(): Timeout has to be greater than 0 in %s on line %d
bool(false)
+bool(true)
-Warning: ftp_close() expects exactly 1 parameter, 0 given in %s004.php on line 16
-NULL
-
-Warning: ftp_connect(): php_network_getaddresses: getaddrinfo failed: %s in %s004.php on line 17
-bool(false)
-
-Warning: ftp_delete() expects parameter 2 to be string, array given in %s004.php on line 18
-NULL
-
-Warning: ftp_exec() expects parameter 2 to be string, array given in %s004.php on line 19
-NULL
-
-Warning: ftp_systype() expects exactly 1 parameter, 2 given in %s004.php on line 21
-NULL
-
-Warning: ftp_pwd() expects exactly 1 parameter, 2 given in %s004.php on line 22
-NULL
-
-Warning: ftp_login() expects exactly 3 parameters, 1 given in %s004.php on line 24
-NULL
-
-Warning: ftp_login(): Not logged in. in %s004.php on line 25
+Warning: ftp_login(): Not logged in. in %s on line %d
bool(false)
bool(true)
diff --git a/ext/ftp/tests/005.phpt b/ext/ftp/tests/005.phpt
index bbc11e87ae..4b46321e26 100644
--- a/ext/ftp/tests/005.phpt
+++ b/ext/ftp/tests/005.phpt
@@ -66,7 +66,7 @@ int(-1)
Warning: ftp_mkdir(): Command not implemented (7). in %s005.php on line 20
bool(false)
-Warning: ftp_nb_continue(): no nbronous transfer to continue. in %s005.php on line 21
+Warning: ftp_nb_continue(): No nbronous transfer to continue. in %s005.php on line 21
int(0)
Warning: ftp_nb_fget(): Mode must be FTP_ASCII or FTP_BINARY in %s005.php on line 22
diff --git a/ext/ftp/tests/006.phpt b/ext/ftp/tests/006.phpt
deleted file mode 100644
index ff0d258917..0000000000
--- a/ext/ftp/tests/006.phpt
+++ /dev/null
@@ -1,108 +0,0 @@
---TEST--
-FTP with bogus parameters
---SKIPIF--
-<?php
-require 'skipif.inc';
-?>
---FILE--
-<?php
-$ftp=null;
-
-var_dump(ftp_connect(array()));
-var_dump(ftp_connect('127.0.0.1', 0, -3));
-var_dump(ftp_raw($ftp));
-var_dump(ftp_mkdir($ftp));
-var_dump(ftp_rmdir($ftp));
-var_dump(ftp_nlist($ftp));
-var_dump(ftp_rawlist($ftp));
-var_dump(ftp_fget($ftp));
-var_dump(ftp_nb_fget($ftp));
-var_dump(ftp_nb_get($ftp));
-var_dump(ftp_pasv($ftp));
-var_dump(ftp_nb_continue());
-var_dump(ftp_fput());
-var_dump(ftp_nb_fput($ftp));
-var_dump(ftp_put($ftp));
-var_dump(ftp_nb_put($ftp));
-var_dump(ftp_size($ftp));
-var_dump(ftp_mdtm($ftp));
-var_dump(ftp_rename($ftp));
-var_dump(ftp_site($ftp));
-var_dump(ftp_set_option($ftp));
-var_dump(ftp_get_option($ftp));
-var_dump(ftp_mlsd($ftp));
-var_dump(ftp_append($ftp));
-
-?>
---EXPECTF--
-Warning: ftp_connect() expects parameter 1 to be string, array given in %s006.php on line 4
-NULL
-
-Warning: ftp_connect(): Timeout has to be greater than 0 in %s006.php on line 5
-bool(false)
-
-Warning: ftp_raw() expects exactly 2 parameters, 1 given in %s006.php on line 6
-NULL
-
-Warning: ftp_mkdir() expects exactly 2 parameters, 1 given in %s006.php on line 7
-NULL
-
-Warning: ftp_rmdir() expects exactly 2 parameters, 1 given in %s006.php on line 8
-NULL
-
-Warning: ftp_nlist() expects exactly 2 parameters, 1 given in %s006.php on line 9
-NULL
-
-Warning: ftp_rawlist() expects at least 2 parameters, 1 given in %s006.php on line 10
-NULL
-
-Warning: ftp_fget() expects at least 3 parameters, 1 given in %s006.php on line 11
-NULL
-
-Warning: ftp_nb_fget() expects at least 3 parameters, 1 given in %s006.php on line 12
-NULL
-
-Warning: ftp_nb_get() expects at least 3 parameters, 1 given in %s006.php on line 13
-NULL
-
-Warning: ftp_pasv() expects exactly 2 parameters, 1 given in %s006.php on line 14
-NULL
-
-Warning: ftp_nb_continue() expects exactly 1 parameter, 0 given in %s006.php on line 15
-NULL
-
-Warning: ftp_fput() expects at least 3 parameters, 0 given in %s006.php on line 16
-NULL
-
-Warning: ftp_nb_fput() expects at least 3 parameters, 1 given in %s006.php on line 17
-NULL
-
-Warning: ftp_put() expects at least 3 parameters, 1 given in %s006.php on line 18
-NULL
-
-Warning: ftp_nb_put() expects at least 3 parameters, 1 given in %s006.php on line 19
-NULL
-
-Warning: ftp_size() expects exactly 2 parameters, 1 given in %s006.php on line 20
-NULL
-
-Warning: ftp_mdtm() expects exactly 2 parameters, 1 given in %s006.php on line 21
-NULL
-
-Warning: ftp_rename() expects exactly 3 parameters, 1 given in %s006.php on line 22
-NULL
-
-Warning: ftp_site() expects exactly 2 parameters, 1 given in %s006.php on line 23
-NULL
-
-Warning: ftp_set_option() expects exactly 3 parameters, 1 given in %s006.php on line 24
-NULL
-
-Warning: ftp_get_option() expects exactly 2 parameters, 1 given in %s006.php on line 25
-NULL
-
-Warning: ftp_mlsd() expects exactly 2 parameters, 1 given in %s006.php on line 26
-NULL
-
-Warning: ftp_append() expects at least 3 parameters, 1 given in %s006.php on line 27
-NULL
diff --git a/ext/ftp/tests/007.phpt b/ext/ftp/tests/007.phpt
index eebe8cf1e3..0520b37293 100644
--- a/ext/ftp/tests/007.phpt
+++ b/ext/ftp/tests/007.phpt
@@ -11,138 +11,205 @@ require 'skipif.inc';
<?php
$ftp = tmpfile();
-var_dump(ftp_login($ftp, 'user', 'pass'));
-var_dump(ftp_pwd($ftp));
-var_dump(ftp_cdup($ftp));
-var_dump(ftp_chdir($ftp, '~'));
-var_dump(ftp_exec($ftp, 'x'));
-var_dump(ftp_raw($ftp, 'x'));
-var_dump(ftp_mkdir($ftp, '/'));
-var_dump(ftp_rmdir($ftp, '/'));
-var_dump(ftp_chmod($ftp, 7777, '/'));
-var_dump(ftp_alloc($ftp, 7777));
-var_dump(ftp_nlist($ftp, '/'));
-var_dump(ftp_rawlist($ftp, '~'));
-var_dump(ftp_mlsd($ftp, '~'));
-var_dump(ftp_systype($ftp));
-var_dump(ftp_fget($ftp, $ftp, 'remote', 7777));
-var_dump(ftp_nb_fget($ftp, $ftp, 'remote', 7777));
-var_dump(ftp_pasv($ftp, false));
-var_dump(ftp_get($ftp, 'local', 'remote', 7777));
-var_dump(ftp_nb_get($ftp, 'local', 'remote', 7777));
-var_dump(ftp_nb_continue($ftp));
-var_dump(ftp_fput($ftp, 'remote', $ftp, 9999));
-var_dump(ftp_nb_fput($ftp, 'remote', $ftp, 9999));
-var_dump(ftp_put($ftp, 'remote', 'local', 9999));
-var_dump(ftp_append($ftp, 'remote', 'local', 9999));
-var_dump(ftp_nb_put($ftp, 'remote', 'local', 9999));
-var_dump(ftp_size($ftp, '~'));
-var_dump(ftp_mdtm($ftp, '~'));
-var_dump(ftp_rename($ftp, 'old', 'new'));
-var_dump(ftp_delete($ftp, 'gone'));
-var_dump(ftp_site($ftp, 'localhost'));
-var_dump(ftp_close($ftp));
-var_dump(ftp_set_option($ftp, 1, 2));
-var_dump(ftp_get_option($ftp, 1));
+try {
+ var_dump(ftp_login($ftp, 'user', 'pass'));
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
+try {
+ var_dump(ftp_pwd($ftp));
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
+try {
+ var_dump(ftp_cdup($ftp));
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
+try {
+ var_dump(ftp_chdir($ftp, '~'));
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
+try {
+ var_dump(ftp_exec($ftp, 'x'));
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
+try {
+ var_dump(ftp_raw($ftp, 'x'));
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
+try {
+ var_dump(ftp_mkdir($ftp, '/'));
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
+try {
+ var_dump(ftp_rmdir($ftp, '/'));
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
+try {
+ var_dump(ftp_chmod($ftp, 7777, '/'));
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
+try {
+ var_dump(ftp_alloc($ftp, 7777));
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
+try {
+ var_dump(ftp_nlist($ftp, '/'));
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
+try {
+ var_dump(ftp_rawlist($ftp, '~'));
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
+try {
+ var_dump(ftp_mlsd($ftp, '~'));
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
+try {
+ var_dump(ftp_systype($ftp));
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
+try {
+ var_dump(ftp_fget($ftp, $ftp, 'remote', 7777));
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
+try {
+ var_dump(ftp_nb_fget($ftp, $ftp, 'remote', 7777));
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
+try {
+ var_dump(ftp_pasv($ftp, false));
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
+try {
+ var_dump(ftp_get($ftp, 'local', 'remote', 7777));
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
+try {
+ var_dump(ftp_nb_get($ftp, 'local', 'remote', 7777));
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
+try {
+ var_dump(ftp_nb_continue($ftp));
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
+try {
+ var_dump(ftp_fput($ftp, 'remote', $ftp, 9999));
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
+try {
+ var_dump(ftp_nb_fput($ftp, 'remote', $ftp, 9999));
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
+try {
+ var_dump(ftp_put($ftp, 'remote', 'local', 9999));
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
+try {
+ var_dump(ftp_append($ftp, 'remote', 'local', 9999));
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
+try {
+ var_dump(ftp_nb_put($ftp, 'remote', 'local', 9999));
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
+try {
+ var_dump(ftp_size($ftp, '~'));
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
+try {
+ var_dump(ftp_mdtm($ftp, '~'));
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
+try {
+ var_dump(ftp_rename($ftp, 'old', 'new'));
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
+try {
+ var_dump(ftp_delete($ftp, 'gone'));
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
+try {
+ var_dump(ftp_site($ftp, 'localhost'));
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
+try {
+ var_dump(ftp_close($ftp));
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
+try {
+ var_dump(ftp_set_option($ftp, 1, 2));
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
+try {
+ var_dump(ftp_get_option($ftp, 1));
+} catch (TypeError $e) {
+ echo $e->getMessage(), "\n";
+}
fclose($ftp);
?>
---EXPECTF--
-Warning: ftp_login(): supplied resource is not a valid FTP Buffer resource in %s007.php on line %d
-bool(false)
-
-Warning: ftp_pwd(): supplied resource is not a valid FTP Buffer resource in %s007.php on line %d
-bool(false)
-
-Warning: ftp_cdup(): supplied resource is not a valid FTP Buffer resource in %s007.php on line %d
-bool(false)
-
-Warning: ftp_chdir(): supplied resource is not a valid FTP Buffer resource in %s007.php on line %d
-bool(false)
-
-Warning: ftp_exec(): supplied resource is not a valid FTP Buffer resource in %s007.php on line %d
-bool(false)
-
-Warning: ftp_raw(): supplied resource is not a valid FTP Buffer resource in %s007.php on line %d
-bool(false)
-
-Warning: ftp_mkdir(): supplied resource is not a valid FTP Buffer resource in %s007.php on line %d
-bool(false)
-
-Warning: ftp_rmdir(): supplied resource is not a valid FTP Buffer resource in %s007.php on line %d
-bool(false)
-
-Warning: ftp_chmod(): supplied resource is not a valid FTP Buffer resource in %s007.php on line %d
-bool(false)
-
-Warning: ftp_alloc(): supplied resource is not a valid FTP Buffer resource in %s007.php on line %d
-bool(false)
-
-Warning: ftp_nlist(): supplied resource is not a valid FTP Buffer resource in %s007.php on line %d
-bool(false)
-
-Warning: ftp_rawlist(): supplied resource is not a valid FTP Buffer resource in %s007.php on line %d
-bool(false)
-
-Warning: ftp_mlsd(): supplied resource is not a valid FTP Buffer resource in %s007.php on line %d
-bool(false)
-
-Warning: ftp_systype(): supplied resource is not a valid FTP Buffer resource in %s007.php on line %d
-bool(false)
-
-Warning: ftp_fget(): supplied resource is not a valid FTP Buffer resource in %s007.php on line %d
-bool(false)
-
-Warning: ftp_nb_fget(): supplied resource is not a valid FTP Buffer resource in %s007.php on line %d
-bool(false)
-
-Warning: ftp_pasv(): supplied resource is not a valid FTP Buffer resource in %s007.php on line %d
-bool(false)
-
-Warning: ftp_get(): supplied resource is not a valid FTP Buffer resource in %s007.php on line %d
-bool(false)
-
-Warning: ftp_nb_get(): supplied resource is not a valid FTP Buffer resource in %s007.php on line %d
-bool(false)
-
-Warning: ftp_nb_continue(): supplied resource is not a valid FTP Buffer resource in %s007.php on line %d
-bool(false)
-
-Warning: ftp_fput(): supplied resource is not a valid FTP Buffer resource in %s007.php on line %d
-bool(false)
-
-Warning: ftp_nb_fput(): supplied resource is not a valid FTP Buffer resource in %s007.php on line %d
-bool(false)
-
-Warning: ftp_put(): supplied resource is not a valid FTP Buffer resource in %s007.php on line %d
-bool(false)
-
-Warning: ftp_append(): supplied resource is not a valid FTP Buffer resource in %s007.php on line %d
-bool(false)
-
-Warning: ftp_nb_put(): supplied resource is not a valid FTP Buffer resource in %s007.php on line %d
-bool(false)
-
-Warning: ftp_size(): supplied resource is not a valid FTP Buffer resource in %s007.php on line %d
-bool(false)
-
-Warning: ftp_mdtm(): supplied resource is not a valid FTP Buffer resource in %s007.php on line %d
-bool(false)
-
-Warning: ftp_rename(): supplied resource is not a valid FTP Buffer resource in %s007.php on line %d
-bool(false)
-
-Warning: ftp_delete(): supplied resource is not a valid FTP Buffer resource in %s007.php on line %d
-bool(false)
-
-Warning: ftp_site(): supplied resource is not a valid FTP Buffer resource in %s007.php on line %d
-bool(false)
-
-Warning: ftp_close(): supplied resource is not a valid FTP Buffer resource in %s007.php on line %d
-bool(false)
-
-Warning: ftp_set_option(): supplied resource is not a valid FTP Buffer resource in %s007.php on line %d
-bool(false)
-
-Warning: ftp_get_option(): supplied resource is not a valid FTP Buffer resource in %s007.php on line %d
-bool(false)
+--EXPECT--
+ftp_login(): supplied resource is not a valid FTP Buffer resource
+ftp_pwd(): supplied resource is not a valid FTP Buffer resource
+ftp_cdup(): supplied resource is not a valid FTP Buffer resource
+ftp_chdir(): supplied resource is not a valid FTP Buffer resource
+ftp_exec(): supplied resource is not a valid FTP Buffer resource
+ftp_raw(): supplied resource is not a valid FTP Buffer resource
+ftp_mkdir(): supplied resource is not a valid FTP Buffer resource
+ftp_rmdir(): supplied resource is not a valid FTP Buffer resource
+ftp_chmod(): supplied resource is not a valid FTP Buffer resource
+ftp_alloc(): supplied resource is not a valid FTP Buffer resource
+ftp_nlist(): supplied resource is not a valid FTP Buffer resource
+ftp_rawlist(): supplied resource is not a valid FTP Buffer resource
+ftp_mlsd(): supplied resource is not a valid FTP Buffer resource
+ftp_systype(): supplied resource is not a valid FTP Buffer resource
+ftp_fget(): supplied resource is not a valid FTP Buffer resource
+ftp_nb_fget(): supplied resource is not a valid FTP Buffer resource
+ftp_pasv(): supplied resource is not a valid FTP Buffer resource
+ftp_get(): supplied resource is not a valid FTP Buffer resource
+ftp_nb_get(): supplied resource is not a valid FTP Buffer resource
+ftp_nb_continue(): supplied resource is not a valid FTP Buffer resource
+ftp_fput(): supplied resource is not a valid FTP Buffer resource
+ftp_nb_fput(): supplied resource is not a valid FTP Buffer resource
+ftp_put(): supplied resource is not a valid FTP Buffer resource
+ftp_append(): supplied resource is not a valid FTP Buffer resource
+ftp_nb_put(): supplied resource is not a valid FTP Buffer resource
+ftp_size(): supplied resource is not a valid FTP Buffer resource
+ftp_mdtm(): supplied resource is not a valid FTP Buffer resource
+ftp_rename(): supplied resource is not a valid FTP Buffer resource
+ftp_delete(): supplied resource is not a valid FTP Buffer resource
+ftp_site(): supplied resource is not a valid FTP Buffer resource
+ftp_close(): supplied resource is not a valid FTP Buffer resource
+ftp_set_option(): supplied resource is not a valid FTP Buffer resource
+ftp_get_option(): supplied resource is not a valid FTP Buffer resource
diff --git a/ext/ftp/tests/ftp_fget_basic.phpt b/ext/ftp/tests/ftp_fget_basic.phpt
index 336594e316..62092f897d 100644
--- a/ext/ftp/tests/ftp_fget_basic.phpt
+++ b/ext/ftp/tests/ftp_fget_basic.phpt
@@ -21,10 +21,10 @@ var_dump(ftp_fget($ftp, $fp ,'a story.txt', FTP_ASCII));
fseek($fp, 0);
echo fgets($fp);
-$postition = ftell($fp);
+$position = ftell($fp);
//test binary data transfer
var_dump(ftp_fget($ftp, $fp, 'binary data.bin', FTP_BINARY));
-fseek($fp, $postition);
+fseek($fp, $position);
var_dump(urlencode(fgets($fp)));
//test non-existent file request
diff --git a/ext/ftp/tests/ftp_get_basic.phpt b/ext/ftp/tests/ftp_get_basic.phpt
index 2c5f6f58a6..c52ea56218 100644
--- a/ext/ftp/tests/ftp_get_basic.phpt
+++ b/ext/ftp/tests/ftp_get_basic.phpt
@@ -29,9 +29,6 @@ unlink($tmpfname);
//test non-existent file request
ftp_get($ftp, $tmpfname ,'a warning.txt', FTP_ASCII);
-
-//test invalid ftp_get params
-var_dump(ftp_get('foo', 'bar', 'baz'));
?>
--EXPECTF--
bool(true)
@@ -41,6 +38,3 @@ bool(true)
string(21) "BINARYFoo%00Bar%0D%0A"
Warning: ftp_get(): a warning: No such file or directory in %sftp_get_basic.php on line %d
-
-Warning: ftp_get() expects parameter 1 to be resource, string given in %s on line %d
-NULL
diff --git a/ext/ftp/tests/ftp_set_option_errors.phpt b/ext/ftp/tests/ftp_set_option_errors.phpt
index 1ad8a072c9..ad91be56e8 100644
--- a/ext/ftp/tests/ftp_set_option_errors.phpt
+++ b/ext/ftp/tests/ftp_set_option_errors.phpt
@@ -1,5 +1,5 @@
--TEST--
-Testing ftp_set_option erros while setting up
+Testing ftp_set_option errors while setting up
--CREDITS--
Gabriel Caruso (carusogabriel34@gmail.com)
--SKIPIF--
diff --git a/ext/ftp/tests/ftp_ssl_connect_error.phpt b/ext/ftp/tests/ftp_ssl_connect_error.phpt
index b0ece5d63b..13c8f9e9c0 100644
--- a/ext/ftp/tests/ftp_ssl_connect_error.phpt
+++ b/ext/ftp/tests/ftp_ssl_connect_error.phpt
@@ -12,14 +12,6 @@ echo "*** Testing ftp_ssl_connect() function : error conditions ***\n";
echo "\n-- Testing ftp_ssl_connect() function on failure --\n";
var_dump(ftp_ssl_connect('totes.invalid'));
-echo "\n-- Testing ftp_ssl_connect() function invalid argument type --\n";
-ftp_ssl_connect([]);
-ftp_ssl_connect('totes.invalid', []);
-ftp_ssl_connect('totes.invalid', 21, []);
-
-echo "\n-- Testing ftp_ssl_connect() function with more than expected no. of arguments --\n";
-ftp_ssl_connect('totes.invalid', 21, 1, []);
-
echo "\n-- Testing ftp_ssl_connect() function timeout warning for value 0 --\n";
ftp_ssl_connect('totes.invalid', 21, 0);
@@ -32,18 +24,6 @@ echo "===DONE===\n";
Warning: ftp_ssl_connect(): php_network_getaddresses: getaddrinfo failed: %s in %s on line %d
bool(false)
--- Testing ftp_ssl_connect() function invalid argument type --
-
-Warning: ftp_ssl_connect() expects parameter 1 to be string, array given in %s on line %d
-
-Warning: ftp_ssl_connect() expects parameter 2 to be int, array given in %s on line %d
-
-Warning: ftp_ssl_connect() expects parameter 3 to be int, array given in %s on line %d
-
--- Testing ftp_ssl_connect() function with more than expected no. of arguments --
-
-Warning: ftp_ssl_connect() expects at most 3 parameters, 4 given in %s on line %d
-
-- Testing ftp_ssl_connect() function timeout warning for value 0 --
Warning: ftp_ssl_connect(): Timeout has to be greater than 0 in %s on line %d
diff --git a/ext/ftp/tests/server.inc b/ext/ftp/tests/server.inc
index ed21843f43..38599391d6 100644
--- a/ext/ftp/tests/server.inc
+++ b/ext/ftp/tests/server.inc
@@ -5,551 +5,551 @@ $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);
+ $port = rand(50000, 65535);
- $socket = @stream_socket_server("tcp://127.0.0.1:$port", $errno, $errstr, STREAM_SERVER_BIND|STREAM_SERVER_LISTEN, $context);
+ $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 = rand(50000, 65535);
}while($pasv_port == $port);
if (!$socket) {
- echo "$errstr ($errno)\n";
- die("could not start/bind the ftp server\n");
+ echo "$errstr ($errno)\n";
+ die("could not start/bind the ftp server\n");
}
$pid = pcntl_fork();
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;
- }
+ 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;
+ }
}
if ($pid) {
- function dump_and_exit($buf)
- {
- var_dump($buf);
- fclose($GLOBALS['s']);
- exit;
- }
-
- function anonymous()
- {
- return $GLOBALS['user'] === 'anonymous';
- }
-
- /* quick&dirty realpath() like function */
- function change_dir($dir)
- {
- global $cwd;
-
- if ($dir[0] == '/') {
- $cwd = $dir;
- return;
- }
-
- $cwd = "$cwd/$dir";
-
- do {
- $old = $cwd;
- $cwd = preg_replace('@/?[^/]+/\.\.@', '', $cwd);
- } while ($old != $cwd);
-
- $cwd = strtr($cwd, array('//' => '/'));
- if (!$cwd) $cwd = '/';
- }
-
- $s = stream_socket_accept($socket);
-
- if (!$s) die("Error accepting a new connection\n");
-
- 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;
-
- if (!empty($ssl)) {
- if ($buf !== "AUTH TLS\r\n") {
- fputs($s, "500 Syntax error, command unrecognized.\r\n");
- dump_and_exit($buf);
- }
-
- if (empty($bug37799)) {
- fputs($s, "234 auth type accepted\r\n");
- } else {
- fputs($s, "666 dummy\r\n");
- fputs($s, "666 bogus msg\r\n");
- exit;
- }
-
- if (!stream_socket_enable_crypto($s, true, STREAM_CRYPTO_METHOD_SSLv23_SERVER)) {
- die("SSLv23 handshake failed.\n");
- }
-
- if (!preg_match('/^PBSZ \d+\r\n$/', $buf = fread($s, 2048))) {
- fputs($s, "501 bogus data\r\n");
- dump_and_exit($buf);
- }
-
- fputs($s, "200 OK\r\n");
- $buf = fread($s, 2048);
-
- if ($buf !== "PROT P\r\n") {
- fputs($s, "504 Wrong protection.\r\n");
- dump_and_exit($buf);
- }
-
- fputs($s, "200 OK\r\n");
-
- $buf = fread($s, 2048);
- }
-
- if ($buf == "AUTH TLS\r\n") {
- fputs($s, "500 not supported.\r\n");
- return ;
- } else if (!preg_match('/^USER (\w+)\r\n$/', $buf, $m)) {
- fputs($s, "500 Syntax error, command unrecognized.\r\n");
- dump_and_exit($buf);
- }
- $user = $m[1];
- if ($user !== 'user' && $user !== 'anonymous') {
- fputs($s, "530 Not logged in.\r\n");
- fclose($s);
- exit;
- }
-
- if (anonymous()) {
- fputs($s, "230 Anonymous user logged in\r\n");
-
- } else {
- fputs($s, "331 User name ok, need password\r\n");
-
- if (!preg_match('/^PASS (\w+)\r\n$/', $buf = fread($s, 100), $m)) {
- fputs($s, "500 Syntax error, command unrecognized.\r\n");
- dump_and_exit($buf);
- }
-
- $pass = $m[1];
- if ($pass === 'pass') {
- fputs($s, "230 User logged in\r\n");
- } else {
- fputs($s, "530 Not logged in.\r\n");
- fclose($s);
- exit;
- }
- }
- }
-
- user_auth($buf);
-
- $cwd = '/';
- $num_bogus_cmds = 0;
-
- while($buf = fread($s, 4098)) {
- if (!empty($bogus)) {
- fputs($s, "502 Command not implemented (".$num_bogus_cmds++.").\r\n");
-
- } else if ($buf === "HELP\r\n") {
- fputs($s, "214-There is help available for the following commands:\r\n");
- fputs($s, " USER\r\n");
- fputs($s, " HELP\r\n");
- fputs($s, "214 end of list\r\n");
-
- } elseif ($buf === "HELP HELP\r\n") {
- fputs($s, "214 Syntax: HELP [<SP> <string>] <CRLF>\r\n");
-
- } elseif ($buf === "PWD\r\n") {
- fputs($s, "257 \"$cwd\" is current directory.\r\n");
-
- } elseif ($buf === "CDUP\r\n") {
- change_dir('..');
- fputs($s, "250 CDUP command successful.\r\n");
-
- } elseif ($buf === "SYST\r\n") {
- if (isset($bug27809)) {
- fputs($s, "215 OS/400 is the remote operating system. The TCP/IP version is \"V5R2M0\"\r\n");
- } else {
- fputs($s, "215 UNIX Type: L8.\r\n");
- }
-
- } elseif ($buf === "TYPE A\r\n") {
- $ascii = true;
- fputs($s, "200 OK\r\n");
-
- } elseif ($buf === "AUTH SSL\r\n") {
- $ascii = true;
- fputs($s, "500 not supported\r\n");
-
- } elseif ($buf === "TYPE I\r\n") {
- $ascii = false;
- fputs($s, "200 OK\r\n");
-
- } elseif ($buf === "QUIT\r\n") {
- break;
-
- } elseif (preg_match("~^PORT (\d+),(\d+),(\d+),(\d+),(\d+),(\d+)\r\n$~", $buf, $m)) {
- $host = "$m[1].$m[2].$m[3].$m[4]";
- $port = ((int)$m[5] << 8) + (int)$m[6];
- fputs($s, "200 OK.\r\n");
-
- } elseif (preg_match("~^STOR ([\w/.-]+)\r\n$~", $buf, $m)) {
- fputs($s, "150 File status okay; about to open data connection\r\n");
-
- if(empty($pasv))
- {
- if (!$fs = stream_socket_client("tcp://$host:$port")) {
- fputs($s, "425 Can't open data connection\r\n");
- continue;
- }
-
- $data = stream_get_contents($fs);
- $orig = file_get_contents(dirname(__FILE__).'/'.$m[1]);
-
-
- if (isset($ascii) && !$ascii && $orig === $data) {
- fputs($s, "226 Closing data Connection.\r\n");
-
- } elseif ((!empty($ascii) || isset($bug39583)) && $data === strtr($orig, array("\r\n" => "\n", "\r" => "\n", "\n" => "\r\n"))) {
- fputs($s, "226 Closing data Connection.\r\n");
-
- } else {
- var_dump($data);
- var_dump($orig);
- fputs($s, "552 Requested file action aborted.\r\n");
- }
- fclose($fs);
- }else{
- $data = file_get_contents('nm2.php');
- $orig = file_get_contents(dirname(__FILE__).'/'.$m[1]);
- if ( $orig === $data) {
- fputs($s, "226 Closing data Connection.\r\n");
-
- } else {
- var_dump($data);
- var_dump($orig);
- fputs($s, "552 Requested file action aborted.\r\n");
- }
- }
-
- } elseif (preg_match("~^APPE ([\w/.-]+)\r\n$~", $buf, $m)) {
- fputs($s, "150 File status okay; about to open data connection\r\n");
-
- if(empty($pasv))
- {
- if (!$fs = stream_socket_client("tcp://$host:$port")) {
- fputs($s, "425 Can't open data connection\r\n");
- continue;
- }
-
- $data = stream_get_contents($fs);
- file_put_contents(__DIR__.'/'.$m[1], $data, FILE_APPEND);
- fputs($s, "226 Closing data Connection.\r\n");
- fclose($fs);
- }else{
- $data = stream_get_contents($fs);
- file_put_contents(__DIR__.'/'.$m[1], $data, FILE_APPEND);
- fputs($s, "226 Closing data Connection.\r\n");
- fclose($fs);
- }
-
- }elseif (preg_match("~^CWD ([A-Za-z./]+)\r\n$~", $buf, $m)) {
- if (isset($bug77680)) {
- fputs($s, "550 Directory change to $m[1] failed: file does not exist\r\n");
- var_dump($buf);
- } else {
- change_dir($m[1]);
- fputs($s, "250 CWD command successful.\r\n");
- }
-
- } elseif (preg_match("~^NLST(?: ([A-Za-z./]+))?\r\n$~", $buf, $m)) {
-
- if (isset($m[1]) && (($m[1] === 'bogusdir') || ($m[1] === '/bogusdir'))) {
- fputs($s, "250 $m[1]: No such file or directory\r\n");
- continue;
- }
-
- // there are some servers that don't open the ftp-data socket if there's nothing to send
- if (isset($bug39458) && isset($m[1]) && $m[1] === 'emptydir') {
- fputs($s, "226 Transfer complete.\r\n");
- continue;
- }
-
- if (empty($pasv)) {
- 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;
- }
- } else {
- fputs($s, "125 Data connection already open; transfer starting.\r\n");
- $fs=$pasvs;
- }
-
-
- if ((!empty($ssl)) && (!stream_socket_enable_crypto($pasvs, 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");
- }
-
- fputs($s, "226 Closing data Connection.\r\n");
- fclose($fs);
-
- } elseif (preg_match("~^MKD ([A-Za-z./]+)\r\n$~", $buf, $m)) {
- if (isset($bug7216)) {
- fputs($s, "257 OK.\r\n");
- } else {
- if (isset($bug77680)) {
- var_dump($buf);
- }
- fputs($s, "257 \"/path/to/ftproot$cwd$m[1]\" created.\r\n");
- }
-
- } elseif (preg_match('/^USER /', $buf)) {
- user_auth($buf);
-
- } elseif (preg_match('/^MDTM ([\w\h]+)/', $buf, $matches)) {
- switch ($matches [1]){
- case "A":
- fputs($s, "213 19980615100045.014\r\n");
- break;
- case "B":
- fputs($s, "213 19980615100045.014\r\n");
- break;
- case "C":
- fputs($s, "213 19980705132316\r\n");
- break;
- case "19990929043300 File6":
- fputs($s, "213 19991005213102\r\n");
- break;
- default :
- fputs($s, "550 No file named \"{$matches [1]}\"\r\n");
- break;
- }
- }elseif (preg_match('/^RETR ([\/]*[\w\h]+)/', $buf, $matches)) {
- if(!empty($pasv)){
- ;
- }
- else if (!$fs = stream_socket_client("tcp://$host:$port")) {
- fputs($s, "425 Can't open data connection\r\n");
- continue;
- }
-
- switch($matches[1]){
-
- case "pasv":
- fputs($s, "150 File status okay; about to open data connection.\r\n");
- //the data connection is handled in another forked process
- // called from outside this while loop
- fputs($s, "226 Closing data Connection.\r\n");
- break;
- case "a story":
- fputs($s, "150 File status okay; about to open data connection.\r\n");
- fputs($fs, "For sale: baby shoes, never worn.\r\n");
- fputs($s, "226 Closing data Connection.\r\n");
- break;
- case "binary data":
- fputs($s, "150 File status okay; about to open data connection.\r\n");
- $transfer_type = $ascii? 'ASCII' : 'BINARY' ;
- fputs($fs, $transfer_type."Foo\0Bar\r\n");
- fputs($s, "226 Closing data Connection.\r\n");
- break;
- case "fget":
- fputs($s, "150 File status okay; about to open data connection.\r\n");
- $transfer_type = $ascii? 'ASCII' : 'BINARY' ;
- fputs($fs, $transfer_type."FooBar\r\n");
- fputs($s, "226 Closing data Connection.\r\n");
- break;
- case "fgetresume":
- fputs($s, "150 File status okay; about to open data connection.\r\n");
- $transfer_type = $ascii? 'ASCII' : 'BINARY' ;
- fputs($fs, "Bar\r\n");
- fputs($s, "226 Closing data Connection.\r\n");
- break;
- case "fget_large":
- fputs($s, "150 File status okay; about to open data connection.\r\n");
- $transfer_type = $ascii? 'ASCII' : 'BINARY' ;
- if ($GLOBALS['rest_pos'] == '5368709119') {
- fputs($fs, "X");
- } else {
- fputs($fs, "Y");
- }
- fputs($s, "226 Closing data Connection.\r\n");
- break;
- 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");
- }
- fputs($s, "226 Closing data Connection.\r\n");
- break;
- case "/bug73457":
- fputs($s, "150 File status okay; about to open data connection.\r\n");
- break;
-
- default:
- fputs($s, "550 {$matches[1]}: No such file or directory \r\n");
- break;
- }
- if(isset($fs))
- fclose($fs);
-
-
- }elseif (preg_match('/^PASV/', $buf, $matches)) {
- $pasv=true;
- $host = "127.0.0.1";
- $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 (!$soc) {
- echo "$errstr ($errno)\n";
- die("could not bind passive port\n");
- }
- } else {
- $pasv_port=1234;
- }
-
- $p2 = $pasv_port % ((int) 1 << 8);
- $p1 = ($pasv_port-$p2)/((int) 1 << 8);
- fputs($s, "227 Entering Passive Mode. (127,0,0,1,{$p1},{$p2})\r\n");
+ function dump_and_exit($buf)
+ {
+ var_dump($buf);
+ fclose($GLOBALS['s']);
+ exit;
+ }
+
+ function anonymous()
+ {
+ return $GLOBALS['user'] === 'anonymous';
+ }
+
+ /* quick&dirty realpath() like function */
+ function change_dir($dir)
+ {
+ global $cwd;
+
+ if ($dir[0] == '/') {
+ $cwd = $dir;
+ return;
+ }
+
+ $cwd = "$cwd/$dir";
+
+ do {
+ $old = $cwd;
+ $cwd = preg_replace('@/?[^/]+/\.\.@', '', $cwd);
+ } while ($old != $cwd);
+
+ $cwd = strtr($cwd, array('//' => '/'));
+ if (!$cwd) $cwd = '/';
+ }
+
+ $s = stream_socket_accept($socket);
+
+ if (!$s) die("Error accepting a new connection\n");
+
+ 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;
+
+ if (!empty($ssl)) {
+ if ($buf !== "AUTH TLS\r\n") {
+ fputs($s, "500 Syntax error, command unrecognized.\r\n");
+ dump_and_exit($buf);
+ }
+
+ if (empty($bug37799)) {
+ fputs($s, "234 auth type accepted\r\n");
+ } else {
+ fputs($s, "666 dummy\r\n");
+ fputs($s, "666 bogus msg\r\n");
+ exit;
+ }
+
+ if (!stream_socket_enable_crypto($s, true, STREAM_CRYPTO_METHOD_SSLv23_SERVER)) {
+ die("SSLv23 handshake failed.\n");
+ }
+
+ if (!preg_match('/^PBSZ \d+\r\n$/', $buf = fread($s, 2048))) {
+ fputs($s, "501 bogus data\r\n");
+ dump_and_exit($buf);
+ }
+
+ fputs($s, "200 OK\r\n");
+ $buf = fread($s, 2048);
+
+ if ($buf !== "PROT P\r\n") {
+ fputs($s, "504 Wrong protection.\r\n");
+ dump_and_exit($buf);
+ }
+
+ fputs($s, "200 OK\r\n");
+
+ $buf = fread($s, 2048);
+ }
+
+ if ($buf == "AUTH TLS\r\n") {
+ fputs($s, "500 not supported.\r\n");
+ return ;
+ } else if (!preg_match('/^USER (\w+)\r\n$/', $buf, $m)) {
+ fputs($s, "500 Syntax error, command unrecognized.\r\n");
+ dump_and_exit($buf);
+ }
+ $user = $m[1];
+ if ($user !== 'user' && $user !== 'anonymous') {
+ fputs($s, "530 Not logged in.\r\n");
+ fclose($s);
+ exit;
+ }
+
+ if (anonymous()) {
+ fputs($s, "230 Anonymous user logged in\r\n");
+
+ } else {
+ fputs($s, "331 User name ok, need password\r\n");
+
+ if (!preg_match('/^PASS (\w+)\r\n$/', $buf = fread($s, 100), $m)) {
+ fputs($s, "500 Syntax error, command unrecognized.\r\n");
+ dump_and_exit($buf);
+ }
+
+ $pass = $m[1];
+ if ($pass === 'pass') {
+ fputs($s, "230 User logged in\r\n");
+ } else {
+ fputs($s, "530 Not logged in.\r\n");
+ fclose($s);
+ exit;
+ }
+ }
+ }
+
+ user_auth($buf);
+
+ $cwd = '/';
+ $num_bogus_cmds = 0;
+
+ while($buf = fread($s, 4098)) {
+ if (!empty($bogus)) {
+ fputs($s, "502 Command not implemented (".$num_bogus_cmds++.").\r\n");
+
+ } else if ($buf === "HELP\r\n") {
+ fputs($s, "214-There is help available for the following commands:\r\n");
+ fputs($s, " USER\r\n");
+ fputs($s, " HELP\r\n");
+ fputs($s, "214 end of list\r\n");
+
+ } elseif ($buf === "HELP HELP\r\n") {
+ fputs($s, "214 Syntax: HELP [<SP> <string>] <CRLF>\r\n");
+
+ } elseif ($buf === "PWD\r\n") {
+ fputs($s, "257 \"$cwd\" is current directory.\r\n");
+
+ } elseif ($buf === "CDUP\r\n") {
+ change_dir('..');
+ fputs($s, "250 CDUP command successful.\r\n");
+
+ } elseif ($buf === "SYST\r\n") {
+ if (isset($bug27809)) {
+ fputs($s, "215 OS/400 is the remote operating system. The TCP/IP version is \"V5R2M0\"\r\n");
+ } else {
+ fputs($s, "215 UNIX Type: L8.\r\n");
+ }
+
+ } elseif ($buf === "TYPE A\r\n") {
+ $ascii = true;
+ fputs($s, "200 OK\r\n");
+
+ } elseif ($buf === "AUTH SSL\r\n") {
+ $ascii = true;
+ fputs($s, "500 not supported\r\n");
+
+ } elseif ($buf === "TYPE I\r\n") {
+ $ascii = false;
+ fputs($s, "200 OK\r\n");
+
+ } elseif ($buf === "QUIT\r\n") {
+ break;
+
+ } elseif (preg_match("~^PORT (\d+),(\d+),(\d+),(\d+),(\d+),(\d+)\r\n$~", $buf, $m)) {
+ $host = "$m[1].$m[2].$m[3].$m[4]";
+ $port = ((int)$m[5] << 8) + (int)$m[6];
+ fputs($s, "200 OK.\r\n");
+
+ } elseif (preg_match("~^STOR ([\w/.-]+)\r\n$~", $buf, $m)) {
+ fputs($s, "150 File status okay; about to open data connection\r\n");
+
+ if(empty($pasv))
+ {
+ if (!$fs = stream_socket_client("tcp://$host:$port")) {
+ fputs($s, "425 Can't open data connection\r\n");
+ continue;
+ }
+
+ $data = stream_get_contents($fs);
+ $orig = file_get_contents(dirname(__FILE__).'/'.$m[1]);
+
+
+ if (isset($ascii) && !$ascii && $orig === $data) {
+ fputs($s, "226 Closing data Connection.\r\n");
+
+ } elseif ((!empty($ascii) || isset($bug39583)) && $data === strtr($orig, array("\r\n" => "\n", "\r" => "\n", "\n" => "\r\n"))) {
+ fputs($s, "226 Closing data Connection.\r\n");
+
+ } else {
+ var_dump($data);
+ var_dump($orig);
+ fputs($s, "552 Requested file action aborted.\r\n");
+ }
+ fclose($fs);
+ }else{
+ $data = file_get_contents('nm2.php');
+ $orig = file_get_contents(dirname(__FILE__).'/'.$m[1]);
+ if ( $orig === $data) {
+ fputs($s, "226 Closing data Connection.\r\n");
+
+ } else {
+ var_dump($data);
+ var_dump($orig);
+ fputs($s, "552 Requested file action aborted.\r\n");
+ }
+ }
+
+ } elseif (preg_match("~^APPE ([\w/.-]+)\r\n$~", $buf, $m)) {
+ fputs($s, "150 File status okay; about to open data connection\r\n");
+
+ if(empty($pasv))
+ {
+ if (!$fs = stream_socket_client("tcp://$host:$port")) {
+ fputs($s, "425 Can't open data connection\r\n");
+ continue;
+ }
+
+ $data = stream_get_contents($fs);
+ file_put_contents(__DIR__.'/'.$m[1], $data, FILE_APPEND);
+ fputs($s, "226 Closing data Connection.\r\n");
+ fclose($fs);
+ }else{
+ $data = stream_get_contents($fs);
+ file_put_contents(__DIR__.'/'.$m[1], $data, FILE_APPEND);
+ fputs($s, "226 Closing data Connection.\r\n");
+ fclose($fs);
+ }
+
+ }elseif (preg_match("~^CWD ([A-Za-z./]+)\r\n$~", $buf, $m)) {
+ if (isset($bug77680)) {
+ fputs($s, "550 Directory change to $m[1] failed: file does not exist\r\n");
+ var_dump($buf);
+ } else {
+ change_dir($m[1]);
+ fputs($s, "250 CWD command successful.\r\n");
+ }
+
+ } elseif (preg_match("~^NLST(?: ([A-Za-z./]+))?\r\n$~", $buf, $m)) {
+
+ if (isset($m[1]) && (($m[1] === 'bogusdir') || ($m[1] === '/bogusdir'))) {
+ fputs($s, "250 $m[1]: No such file or directory\r\n");
+ continue;
+ }
+
+ // there are some servers that don't open the ftp-data socket if there's nothing to send
+ if (isset($bug39458) && isset($m[1]) && $m[1] === 'emptydir') {
+ fputs($s, "226 Transfer complete.\r\n");
+ continue;
+ }
+
+ if (empty($pasv)) {
+ 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;
+ }
+ } else {
+ fputs($s, "125 Data connection already open; transfer starting.\r\n");
+ $fs=$pasvs;
+ }
+
+
+ if ((!empty($ssl)) && (!stream_socket_enable_crypto($pasvs, 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");
+ }
+
+ fputs($s, "226 Closing data Connection.\r\n");
+ fclose($fs);
+
+ } elseif (preg_match("~^MKD ([A-Za-z./]+)\r\n$~", $buf, $m)) {
+ if (isset($bug7216)) {
+ fputs($s, "257 OK.\r\n");
+ } else {
+ if (isset($bug77680)) {
+ var_dump($buf);
+ }
+ fputs($s, "257 \"/path/to/ftproot$cwd$m[1]\" created.\r\n");
+ }
+
+ } elseif (preg_match('/^USER /', $buf)) {
+ user_auth($buf);
+
+ } elseif (preg_match('/^MDTM ([\w\h]+)/', $buf, $matches)) {
+ switch ($matches [1]){
+ case "A":
+ fputs($s, "213 19980615100045.014\r\n");
+ break;
+ case "B":
+ fputs($s, "213 19980615100045.014\r\n");
+ break;
+ case "C":
+ fputs($s, "213 19980705132316\r\n");
+ break;
+ case "19990929043300 File6":
+ fputs($s, "213 19991005213102\r\n");
+ break;
+ default :
+ fputs($s, "550 No file named \"{$matches [1]}\"\r\n");
+ break;
+ }
+ }elseif (preg_match('/^RETR ([\/]*[\w\h]+)/', $buf, $matches)) {
+ if(!empty($pasv)){
+ ;
+ }
+ else if (!$fs = stream_socket_client("tcp://$host:$port")) {
+ fputs($s, "425 Can't open data connection\r\n");
+ continue;
+ }
+
+ switch($matches[1]){
+
+ case "pasv":
+ fputs($s, "150 File status okay; about to open data connection.\r\n");
+ //the data connection is handled in another forked process
+ // called from outside this while loop
+ fputs($s, "226 Closing data Connection.\r\n");
+ break;
+ case "a story":
+ fputs($s, "150 File status okay; about to open data connection.\r\n");
+ fputs($fs, "For sale: baby shoes, never worn.\r\n");
+ fputs($s, "226 Closing data Connection.\r\n");
+ break;
+ case "binary data":
+ fputs($s, "150 File status okay; about to open data connection.\r\n");
+ $transfer_type = $ascii? 'ASCII' : 'BINARY' ;
+ fputs($fs, $transfer_type."Foo\0Bar\r\n");
+ fputs($s, "226 Closing data Connection.\r\n");
+ break;
+ case "fget":
+ fputs($s, "150 File status okay; about to open data connection.\r\n");
+ $transfer_type = $ascii? 'ASCII' : 'BINARY' ;
+ fputs($fs, $transfer_type."FooBar\r\n");
+ fputs($s, "226 Closing data Connection.\r\n");
+ break;
+ case "fgetresume":
+ fputs($s, "150 File status okay; about to open data connection.\r\n");
+ $transfer_type = $ascii? 'ASCII' : 'BINARY' ;
+ fputs($fs, "Bar\r\n");
+ fputs($s, "226 Closing data Connection.\r\n");
+ break;
+ case "fget_large":
+ fputs($s, "150 File status okay; about to open data connection.\r\n");
+ $transfer_type = $ascii? 'ASCII' : 'BINARY' ;
+ if ($GLOBALS['rest_pos'] == '5368709119') {
+ fputs($fs, "X");
+ } else {
+ fputs($fs, "Y");
+ }
+ fputs($s, "226 Closing data Connection.\r\n");
+ break;
+ 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");
+ }
+ fputs($s, "226 Closing data Connection.\r\n");
+ break;
+ case "/bug73457":
+ fputs($s, "150 File status okay; about to open data connection.\r\n");
+ break;
+
+ default:
+ fputs($s, "550 {$matches[1]}: No such file or directory \r\n");
+ break;
+ }
+ if(isset($fs))
+ fclose($fs);
+
+
+ }elseif (preg_match('/^PASV/', $buf, $matches)) {
+ $pasv=true;
+ $host = "127.0.0.1";
+ $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 (!$soc) {
+ echo "$errstr ($errno)\n";
+ die("could not bind passive port\n");
+ }
+ } else {
+ $pasv_port=1234;
+ }
+
+ $p2 = $pasv_port % ((int) 1 << 8);
+ $p1 = ($pasv_port-$p2)/((int) 1 << 8);
+ fputs($s, "227 Entering Passive Mode. (127,0,0,1,{$p1},{$p2})\r\n");
if (empty($bug73457)) {
$pasvs = stream_socket_accept($soc,10);
}
- } 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");
-
- } elseif (preg_match('/^RMD/', $buf, $matches)) {
- fputs($s, "250 OK\r\n");
-
- } elseif (preg_match('/^SITE CHMOD/', $buf, $matches)) {
- fputs($s, "200 OK\r\n");
-
- } elseif (preg_match('/^DELE ([\w\h]+)/', $buf, $matches)) {
- if (isset($matches[1]) && in_array($matches[1], ['file1', "file\nb0rk"])){
- fputs($s, "250 Delete successful\r\n");
- } else {
- fputs($s, "550 No such file or directory\r\n");
- }
- } elseif (preg_match('/^ALLO (\d+)/', $buf, $matches)) {
- fputs($s, "200 " . $matches[1] . " bytes allocated\r\n");
-
- }elseif (preg_match('/^LIST www\//', $buf, $matches)) {
- fputs($s, "226 Transfer complete\r\n");
-
- }elseif (preg_match('/^LIST no_exists\//', $buf, $matches)) {
- fputs($s, "425 Error establishing connection\r\n");
-
- }elseif (preg_match('/^REST (\d+)/', $buf, $matches)) {
- $GLOBALS['rest_pos'] = $matches[1];
- fputs($s, "350 OK\r\n");
- }elseif (preg_match('/^SIZE largefile/', $buf)) {
- fputs($s, "213 5368709120\r\n");
- }elseif (preg_match('/^RNFR existing_file/', $buf, $matches)) {
- fputs($s, "350 File or directory exists, ready for destination name\r\n");
- }elseif (preg_match('/^RNFR nonexisting_file/', $buf, $matches)) {
- fputs($s, "550 No such file or directory\r\n");
- }elseif (preg_match('/^RNTO nonexisting_file/', $buf, $matches)) {
- fputs($s, "250 Rename successful\r\n");
- }elseif (preg_match('/^MLSD no_exists\//', $buf, $matches)) {
- fputs($s, "425 Error establishing connection\r\n");
- }elseif (preg_match("~^MLSD(?: ([A-Za-z./]+))?\r\n$~", $buf, $m)) {
-
- if(isset($m[1]) && (($m[1] === 'bogusdir') || ($m[1] === '/bogusdir'))) {
- fputs($s, "250 $m[1]: No such file or directory\r\n");
- continue;
- }
-
- // there are some servers that don't open the ftp-data socket if there's nothing to send
- if(isset($bug39458) && isset($m[1]) && $m[1] === 'emptydir') {
- fputs($s, "226 Transfer complete.\r\n");
- continue;
- }
-
- if(empty($pasv)) {
- 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;
- }
- } else {
- fputs($s, "125 Data connection already open; transfer starting.\r\n");
- $fs = $pasvs;
- }
-
- if((!empty($ssl)) && (!stream_socket_enable_crypto($pasvs, TRUE, STREAM_CRYPTO_METHOD_SSLv23_SERVER))) {
- die("SSLv23 handshake failed.\n");
- }
-
- if(empty($m[1]) || $m[1] !== 'emptydir') {
- fputs($fs, "modify=20170127230002;perm=flcdmpe;type=cdir;unique=811U4340002;UNIX.group=33;UNIX.mode=0755;UNIX.owner=33; .\r\n");
- fputs($fs, "modify=20170127230002;perm=flcdmpe;type=pdir;unique=811U4340002;UNIX.group=33;UNIX.mode=0755;UNIX.owner=33; ..\r\n");
- fputs($fs, "modify=20170126121225;perm=adfrw;size=4729;type=file;unique=811U4340CB9;UNIX.group=33;UNIX.mode=0644;UNIX.owner=33; foobar\r\n");
- fputs($fs, "fact=val=ue;empty=; path;name\r\n");
- fputs($fs, "no_space\r\n");
- fputs($fs, "no_semi pathname\r\n");
- fputs($fs, "no_eq; pathname\r\n");
- }
-
- fputs($s, "226 Closing data Connection.\r\n");
- fclose($fs);
- }elseif (preg_match('/^SIZE \/bug73457/', $buf)) {
- fputs($s, "213 10\r\n");
- }elseif (preg_match("/^SITE/", $buf)) {
- fputs($s, "500 Syntax error, command unrecognized.\r\n");
- }else {
- dump_and_exit($buf);
- }
- }
- fclose($s);
- exit;
+ } 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");
+
+ } elseif (preg_match('/^RMD/', $buf, $matches)) {
+ fputs($s, "250 OK\r\n");
+
+ } elseif (preg_match('/^SITE CHMOD/', $buf, $matches)) {
+ fputs($s, "200 OK\r\n");
+
+ } elseif (preg_match('/^DELE ([\w\h]+)/', $buf, $matches)) {
+ if (isset($matches[1]) && in_array($matches[1], ['file1', "file\nb0rk"])){
+ fputs($s, "250 Delete successful\r\n");
+ } else {
+ fputs($s, "550 No such file or directory\r\n");
+ }
+ } elseif (preg_match('/^ALLO (\d+)/', $buf, $matches)) {
+ fputs($s, "200 " . $matches[1] . " bytes allocated\r\n");
+
+ }elseif (preg_match('/^LIST www\//', $buf, $matches)) {
+ fputs($s, "226 Transfer complete\r\n");
+
+ }elseif (preg_match('/^LIST no_exists\//', $buf, $matches)) {
+ fputs($s, "425 Error establishing connection\r\n");
+
+ }elseif (preg_match('/^REST (\d+)/', $buf, $matches)) {
+ $GLOBALS['rest_pos'] = $matches[1];
+ fputs($s, "350 OK\r\n");
+ }elseif (preg_match('/^SIZE largefile/', $buf)) {
+ fputs($s, "213 5368709120\r\n");
+ }elseif (preg_match('/^RNFR existing_file/', $buf, $matches)) {
+ fputs($s, "350 File or directory exists, ready for destination name\r\n");
+ }elseif (preg_match('/^RNFR nonexisting_file/', $buf, $matches)) {
+ fputs($s, "550 No such file or directory\r\n");
+ }elseif (preg_match('/^RNTO nonexisting_file/', $buf, $matches)) {
+ fputs($s, "250 Rename successful\r\n");
+ }elseif (preg_match('/^MLSD no_exists\//', $buf, $matches)) {
+ fputs($s, "425 Error establishing connection\r\n");
+ }elseif (preg_match("~^MLSD(?: ([A-Za-z./]+))?\r\n$~", $buf, $m)) {
+
+ if(isset($m[1]) && (($m[1] === 'bogusdir') || ($m[1] === '/bogusdir'))) {
+ fputs($s, "250 $m[1]: No such file or directory\r\n");
+ continue;
+ }
+
+ // there are some servers that don't open the ftp-data socket if there's nothing to send
+ if(isset($bug39458) && isset($m[1]) && $m[1] === 'emptydir') {
+ fputs($s, "226 Transfer complete.\r\n");
+ continue;
+ }
+
+ if(empty($pasv)) {
+ 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;
+ }
+ } else {
+ fputs($s, "125 Data connection already open; transfer starting.\r\n");
+ $fs = $pasvs;
+ }
+
+ if((!empty($ssl)) && (!stream_socket_enable_crypto($pasvs, TRUE, STREAM_CRYPTO_METHOD_SSLv23_SERVER))) {
+ die("SSLv23 handshake failed.\n");
+ }
+
+ if(empty($m[1]) || $m[1] !== 'emptydir') {
+ fputs($fs, "modify=20170127230002;perm=flcdmpe;type=cdir;unique=811U4340002;UNIX.group=33;UNIX.mode=0755;UNIX.owner=33; .\r\n");
+ fputs($fs, "modify=20170127230002;perm=flcdmpe;type=pdir;unique=811U4340002;UNIX.group=33;UNIX.mode=0755;UNIX.owner=33; ..\r\n");
+ fputs($fs, "modify=20170126121225;perm=adfrw;size=4729;type=file;unique=811U4340CB9;UNIX.group=33;UNIX.mode=0644;UNIX.owner=33; foobar\r\n");
+ fputs($fs, "fact=val=ue;empty=; path;name\r\n");
+ fputs($fs, "no_space\r\n");
+ fputs($fs, "no_semi pathname\r\n");
+ fputs($fs, "no_eq; pathname\r\n");
+ }
+
+ fputs($s, "226 Closing data Connection.\r\n");
+ fclose($fs);
+ }elseif (preg_match('/^SIZE \/bug73457/', $buf)) {
+ fputs($s, "213 10\r\n");
+ }elseif (preg_match("/^SITE/", $buf)) {
+ fputs($s, "500 Syntax error, command unrecognized.\r\n");
+ }else {
+ dump_and_exit($buf);
+ }
+ }
+ fclose($s);
+ exit;
}
fclose($socket);