ID: 36103
Updated by: [EMAIL PROTECTED]
Reported By: rebe at unit01 dot net
-Status: Open
+Status: Assigned
Bug Type: FTP related
Operating System: linux
PHP Version: 5.1.2
-Assigned To:
+Assigned To: tony2001
New Comment:
Tony, don't forget this. :)
Previous Comments:
------------------------------------------------------------------------
[2006-01-27 22:03:06] rebe at unit01 dot net
OK, so looks like your patch is also working properly. Just give me a
couple of days - maybe 'till the middle of the next week to check
everything again because I am a little bit busy now doing different
work.
I want to really confirm that this is a final sollution, so you could
apply that patch into official PHP release.
It is my first subbmission and I am glad to have really active and
collaborating PHP development team :)
------------------------------------------------------------------------
[2006-01-24 10:50:40] [EMAIL PROTECTED]
>Frankly - your patch is doing 99% percent the same thing
Yes, it does.
>}while(errcode == 0 && !SSL_is_init_finished(ftp-ssl_handle));
>we didn't use that in our fix.
So does it work without that check?
------------------------------------------------------------------------
[2006-01-24 10:44:57] rebe at unit01 dot net
Frankly - your patch is doing 99% percent the same thing but is not
fixing problem :) I checked that twice cause I didn't believe it but
still getting "handshake failed". The only difference I see is :
}while(errcode == 0 && !SSL_is_init_finished(ftp-ssl_handle));
^^^^^^^^^^^^^^
we didn't use that in our fix.
------------------------------------------------------------------------
[2006-01-24 01:14:37] [EMAIL PROTECTED]
Please try this patch:
http://tony2001.phpclub.net/dev/tmp/bug36103.diff
------------------------------------------------------------------------
[2006-01-24 00:38:21] rebe at unit01 dot net
OK here's what we figured out with a friend of mine. Login function in
ext/ftp.c treat all errors (also "want_more..." ) as login fail but it
is not true. A patch below is fixing problem and makes everything
working fine:
@@ -243,6 +243,7 @@
{
#if HAVE_OPENSSL_EXT
SSL_CTX *ctx = NULL;
+ int err,errs;
#endif
if (ftp == NULL) {
return 0;
@@ -291,13 +292,24 @@
}
SSL_set_fd(ftp->ssl_handle, ftp->fd);
-
+/*
if (SSL_connect(ftp->ssl_handle) <= 0) {
php_error_docref(NULL TSRMLS_CC,
E_WARNING, "SSL/TLS handshake failed");
SSL_shutdown(ftp->ssl_handle);
return 0;
}
-
+*/
+err=SSL_connect(ftp->ssl_handle);
+while (err <= 0) {
+ errs = SSL_get_error(ftp->fd, err);
+ if ((errs != SSL_ERROR_WANT_READ) && (errs !=
SSL_ERROR_WANT_WRITE) && (errs != SSL_ERROR_WANT_X509_LOOKUP)) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "SSL/TLS handshake
failed");
+ SSL_shutdown(ftp->ssl_handle);
+ return 0;
+ }
+ err = SSL_connect(ftp->ssl_handle);
+}
+
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/36103
--
Edit this bug report at http://bugs.php.net/?id=36103&edit=1