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