summaryrefslogtreecommitdiff
path: root/ext/ftp/ftp.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/ftp/ftp.c')
-rw-r--r--ext/ftp/ftp.c77
1 files changed, 37 insertions, 40 deletions
diff --git a/ext/ftp/ftp.c b/ext/ftp/ftp.c
index 988380eef8..400e017a6f 100644
--- a/ext/ftp/ftp.c
+++ b/ext/ftp/ftp.c
@@ -266,60 +266,57 @@ ftp_login(ftpbuf_t *ftp, const char *user, const char *pass TSRMLS_DC)
}
if (ftp->resp != 334) {
- ftp->use_ssl = 0;
+ return 0;
} else {
ftp->old_ssl = 1;
ftp->use_ssl_for_data = 1;
}
}
- /* now enable ssl if we still need to */
- if (ftp->use_ssl) {
- ctx = SSL_CTX_new(SSLv23_client_method());
- if (ctx == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "failed to create the SSL context");
+ ctx = SSL_CTX_new(SSLv23_client_method());
+ if (ctx == NULL) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "failed to create the SSL context");
+ return 0;
+ }
+
+ SSL_CTX_set_options(ctx, SSL_OP_ALL);
+
+ ftp->ssl_handle = SSL_new(ctx);
+ if (ftp->ssl_handle == NULL) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "failed to create the SSL handle");
+ SSL_CTX_free(ctx);
+ return 0;
+ }
+
+ 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;
+ }
+
+ ftp->ssl_active = 1;
+
+ if (!ftp->old_ssl) {
+
+ /* set protection buffersize to zero */
+ if (!ftp_putcmd(ftp, "PBSZ", "0")) {
+ return 0;
+ }
+ if (!ftp_getresp(ftp)) {
return 0;
}
- SSL_CTX_set_options(ctx, SSL_OP_ALL);
-
- ftp->ssl_handle = SSL_new(ctx);
- if (ftp->ssl_handle == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "failed to create the SSL handle");
- SSL_CTX_free(ctx);
+ /* enable data conn encryption */
+ if (!ftp_putcmd(ftp, "PROT", "P")) {
return 0;
}
-
- 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);
+ if (!ftp_getresp(ftp)) {
return 0;
}
- ftp->ssl_active = 1;
-
- if (!ftp->old_ssl) {
-
- /* set protection buffersize to zero */
- if (!ftp_putcmd(ftp, "PBSZ", "0")) {
- return 0;
- }
- if (!ftp_getresp(ftp)) {
- return 0;
- }
-
- /* enable data conn encryption */
- if (!ftp_putcmd(ftp, "PROT", "P")) {
- return 0;
- }
- if (!ftp_getresp(ftp)) {
- return 0;
- }
-
- ftp->use_ssl_for_data = (ftp->resp >= 200 && ftp->resp <=299);
- }
+ ftp->use_ssl_for_data = (ftp->resp >= 200 && ftp->resp <=299);
}
}
#endif