From 693fd4a36b2bd2536506507d7dc3ad949f76144b Mon Sep 17 00:00:00 2001 From: Ilia Alshanetsky Date: Mon, 25 Nov 2002 22:00:52 +0000 Subject: [PATCH] Added a check to determine if the file can be retrieved or sent. This check also prevents incorrect error reporting in the event the retrieval or the sending of the file cannot be accomplished. --- ext/standard/ftp_fopen_wrapper.c | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/ext/standard/ftp_fopen_wrapper.c b/ext/standard/ftp_fopen_wrapper.c index 3145e83f0a..a824812f58 100644 --- a/ext/standard/ftp_fopen_wrapper.c +++ b/ext/standard/ftp_fopen_wrapper.c @@ -402,21 +402,32 @@ php_stream * php_stream_url_wrap_ftp(php_stream_wrapper *wrapper, char *path, ch php_stream_write_string(stream, "/"); } php_stream_write_string(stream, "\r\n"); + + /* open the data channel */ + if (hoststart == NULL) { + hoststart = resource->host; + } + datastream = php_stream_sock_open_host(hoststart, portno, SOCK_STREAM, 0, 0); + if (datastream == NULL) { + goto errexit; + } + result = GET_FTP_RESULT(stream); + if (result != 150) { + /* Could not retrieve or send the file + * this data will only be sent to us after connection on the data port was initiated. + */ + php_stream_close(datastream); + datastream = NULL; + goto errexit; + } + /* close control connection if not in ssl mode */ if (!use_ssl) { php_stream_write_string(stream, "QUIT\r\n"); php_stream_close(stream); stream = NULL; } - - /* open the data channel */ - if (hoststart == NULL) { - hoststart = resource->host; - } - datastream = php_stream_sock_open_host(hoststart, portno, SOCK_STREAM, 0, 0); - if (datastream == NULL) - goto errexit; php_stream_context_set(datastream, context); php_stream_notify_progress_init(context, 0, file_size); -- 2.50.1