Hi,

the attached patch fixes session resumption if linked against GnuTLS:
gnutls_session_get_data can return GNUTLS_E_SHORT_MEMORY_BUFFER even if
passed a NULL buffer.

Without this patch, lftp cannot list directories or transfer files on
FTP servers that require session resumption on the data connection as
security measure, e.g. if using the latest ProFTPD without
NoSessionReuseRequired set.
Without the patch connections fail with "425 Unable to build data
connection: Operation not permitted" due to the session not being resumed.

Regards,
Tim Kosse


diff --git a/src/lftp_ssl.cc b/src/lftp_ssl.cc
index 100b90b..57251ad 100644
--- a/src/lftp_ssl.cc
+++ b/src/lftp_ssl.cc
@@ -610,7 +610,8 @@ void lftp_ssl_gnutls::copy_sid(const lftp_ssl_gnutls *o)
 {
    size_t session_data_size;
    void *session_data;
-   if(gnutls_session_get_data(o->session,NULL,&session_data_size)!=GNUTLS_E_SUCCESS)
+   int res=gnutls_session_get_data(o->session,NULL,&session_data_size);
+   if(res!=GNUTLS_E_SUCCESS && res!=GNUTLS_E_SHORT_MEMORY_BUFFER)
       return;
    session_data=xmalloc(session_data_size);
    if(gnutls_session_get_data(o->session,session_data,&session_data_size)!=GNUTLS_E_SUCCESS)

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
lftp-devel mailing list
lftp-devel@uniyar.ac.ru
http://univ.uniyar.ac.ru/mailman/listinfo/lftp-devel

Reply via email to