Alexander V. Lukyanov
Sat, 20 Sep 2008 02:59:32 -0700
On Fri, Sep 05, 2008 at 07:46:35PM +0200, Andreas Prieß wrote: > DEBUG: Client "87.178.121.68", "Connection terminated without SSL > shutdown - buggy client?"
Could you try attached patch, please? -- Alexander.
Index: buffer_ssl.cc
===================================================================
RCS file: /home/lav/cvsroot/lftp/src/buffer_ssl.cc,v
retrieving revision 1.13
diff -u -p -r1.13 buffer_ssl.cc
--- buffer_ssl.cc 2 Aug 2007 11:27:59 -0000 1.13
+++ buffer_ssl.cc 20 Sep 2008 09:49:55 -0000
@@ -112,4 +112,14 @@ int IOBufferSSL::Put_LL(const char *buf,
return res;
}
+int IOBufferSSL::PutEOF_LL()
+{
+ ssl->shutdown();
+ return 0;
+}
+
+IOBufferSSL::~IOBufferSSL()
+{
+}
+
#endif // USE_SSL
Index: buffer_ssl.h
===================================================================
RCS file: /home/lav/cvsroot/lftp/src/buffer_ssl.h,v
retrieving revision 1.8
diff -u -p -r1.8 buffer_ssl.h
--- buffer_ssl.h 16 May 2007 08:07:34 -0000 1.8
+++ buffer_ssl.h 12 Sep 2008 12:49:46 -0000
@@ -34,10 +34,12 @@ class IOBufferSSL : public IOBuffer
int Get_LL(int size);
int Put_LL(const char *buf,int size);
+ int PutEOF_LL();
public:
IOBufferSSL(lftp_ssl *s,dir_t m) : IOBuffer(m), my_ssl(s), ssl(my_ssl) {}
IOBufferSSL(const Ref<lftp_ssl>& s,dir_t m) : IOBuffer(m), ssl(s) {}
+ ~IOBufferSSL();
int Do();
bool Done() { return IOBuffer::Done() && ssl->handshake_done; }
};
Index: lftp_ssl.cc
===================================================================
RCS file: /home/lav/cvsroot/lftp/src/lftp_ssl.cc,v
retrieving revision 1.33
diff -u -p -r1.33 lftp_ssl.cc
--- lftp_ssl.cc 12 Sep 2007 05:38:25 -0000 1.33
+++ lftp_ssl.cc 12 Sep 2008 12:52:25 -0000
@@ -293,12 +293,13 @@ void lftp_ssl_gnutls::load_keys()
}
gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, cred);
}
-lftp_ssl_gnutls::~lftp_ssl_gnutls()
+void lftp_ssl_gnutls::shutdown()
{
-#if 0
if(handshake_done)
gnutls_bye(session,GNUTLS_SHUT_RDWR); // FIXME - E_AGAIN
-#endif
+}
+lftp_ssl_gnutls::~lftp_ssl_gnutls()
+{
if(cred)
gnutls_certificate_free_credentials(cred);
gnutls_deinit(session);
@@ -831,12 +832,13 @@ void lftp_ssl_openssl::load_keys()
}
}
}
-lftp_ssl_openssl::~lftp_ssl_openssl()
+void lftp_ssl_openssl::shutdown()
{
-#if 0
if(handshake_done)
SSL_shutdown(ssl);
-#endif
+}
+lftp_ssl_openssl::~lftp_ssl_openssl()
+{
SSL_free(ssl);
}
Index: lftp_ssl.h
===================================================================
RCS file: /home/lav/cvsroot/lftp/src/lftp_ssl.h,v
retrieving revision 1.21
diff -u -p -r1.21 lftp_ssl.h
--- lftp_ssl.h 11 Apr 2007 05:00:17 -0000 1.21
+++ lftp_ssl.h 12 Sep 2008 12:50:59 -0000
@@ -107,6 +107,7 @@ public:
bool want_out();
void copy_sid(const lftp_ssl_gnutls *);
void load_keys();
+ void shutdown();
};
typedef lftp_ssl_gnutls lftp_ssl;
#elif USE_OPENSSL
@@ -140,6 +141,7 @@ public:
bool want_out();
void copy_sid(const lftp_ssl_openssl *);
void load_keys();
+ void shutdown();
};
typedef lftp_ssl_openssl lftp_ssl;
#endif