2007-10-22 [colin] 3.0.2cvs98
authorColin Leroy <colin@colino.net>
Mon, 22 Oct 2007 16:26:07 +0000 (16:26 +0000)
committerColin Leroy <colin@colino.net>
Mon, 22 Oct 2007 16:26:07 +0000 (16:26 +0000)
* src/common/socket.h
* src/common/ssl.c
Fix big leak in GnuTLS code

ChangeLog
PATCHSETS
configure.ac
src/common/socket.h
src/common/ssl.c

index a727187..fdf52eb 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2007-10-22 [colin]     3.0.2cvs98
+
+       * src/common/socket.h
+       * src/common/ssl.c
+               Fix big leak in GnuTLS code
+
 2007-10-22 [colin]     3.0.2cvs97
 
        * src/news.c
index 144f231..8b53eb1 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( cvs diff -u -r 1.22.2.37 -r 1.22.2.38 src/quote_fmt_parse.y;  ) > 3.0.2cvs95.patchset
 ( cvs diff -u -r 1.16.2.31 -r 1.16.2.32 src/prefs_customheader.c;  ) > 3.0.2cvs96.patchset
 ( cvs diff -u -r 1.101.2.42 -r 1.101.2.43 src/news.c;  ) > 3.0.2cvs97.patchset
+( cvs diff -u -r 1.13.2.17 -r 1.13.2.18 src/common/socket.h;  cvs diff -u -r 1.9.2.24 -r 1.9.2.25 src/common/ssl.c;  ) > 3.0.2cvs98.patchset
index 3675351..0b0cd76 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=0
 MICRO_VERSION=2
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=97
+EXTRA_VERSION=98
 EXTRA_RELEASE=
 EXTRA_GTK2_VERSION=
 
index d017ee9..7a37647 100644 (file)
@@ -60,11 +60,11 @@ struct _SockInfo
        gint sock;
 #if USE_OPENSSL
        SSL *ssl;
-       guint g_source;
 #elif USE_GNUTLS
        gnutls_session ssl;
-       guint g_source;
+       gnutls_certificate_credentials_t xcred;
 #endif
+       guint g_source;
        GIOChannel *sock_ch;
 
        gchar *hostname;
index 0e6c027..3bcee8a 100644 (file)
@@ -304,6 +304,7 @@ gboolean ssl_init_socket_with_method(SockInfo *sockinfo, SSLMethod method)
 
        if ((r = SSL_connect_nb(session)) < 0) {
                g_warning("SSL connection failed (%s)", gnutls_strerror(r));
+               gnutls_certificate_free_credentials(xcred);
                gnutls_deinit(session);
                return FALSE;
        }
@@ -316,6 +317,7 @@ gboolean ssl_init_socket_with_method(SockInfo *sockinfo, SSLMethod method)
        ||  (r = gnutls_x509_crt_init(&cert)) < 0
        ||  (r = gnutls_x509_crt_import(cert, &raw_cert_list[0], GNUTLS_X509_FMT_DER)) < 0) {
                g_warning("cert get failure: %d %s\n", r, gnutls_strerror(r));
+               gnutls_certificate_free_credentials(xcred);
                gnutls_deinit(session);
                return FALSE;
        }
@@ -324,6 +326,7 @@ gboolean ssl_init_socket_with_method(SockInfo *sockinfo, SSLMethod method)
 
        if (!ssl_certificate_check(cert, status, sockinfo->canonical_name, sockinfo->hostname, sockinfo->port)) {
                gnutls_x509_crt_deinit(cert);
+               gnutls_certificate_free_credentials(xcred);
                gnutls_deinit(session);
                return FALSE;
        }
@@ -331,6 +334,7 @@ gboolean ssl_init_socket_with_method(SockInfo *sockinfo, SSLMethod method)
        gnutls_x509_crt_deinit(cert);
 
        sockinfo->ssl = session;
+       sockinfo->xcred = xcred;
 #endif
        return TRUE;
 }
@@ -341,6 +345,7 @@ void ssl_done_socket(SockInfo *sockinfo)
 #ifdef USE_OPENSSL
                SSL_free(sockinfo->ssl);
 #else
+               gnutls_certificate_free_credentials(sockinfo->xcred);
                gnutls_deinit(sockinfo->ssl);
 #endif
                sockinfo->ssl = NULL;