From: Ilia Alshanetsky Date: Mon, 25 Nov 2002 22:00:52 +0000 (+0000) Subject: Added a check to determine if the file can be retrieved or sent. X-Git-Tag: RELEASE_1_0b2~9 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=693fd4a36b2bd2536506507d7dc3ad949f76144b;p=php 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. --- 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);