diff -up libgadu-1.11.0/src/events.c.r1144 libgadu-1.11.0/src/events.c --- libgadu-1.11.0/src/events.c.r1144 2011-05-29 13:41:30.000000000 +0200 +++ libgadu-1.11.0/src/events.c 2011-07-12 21:49:57.000000000 +0200 @@ -810,14 +810,14 @@ gnutls_handshake_repeat: const gnutls_datum_t *peers; gnutls_x509_crt_t cert; - if (gnutls_x509_crt_init(&cert) >= 0) { + if (gnutls_x509_crt_init(&cert) == 0) { peers = gnutls_certificate_get_peers(GG_SESSION_GNUTLS(sess), &peer_count); if (peers != NULL) { char buf[256]; size_t size; - if (gnutls_x509_crt_import(cert, &peers[0], GNUTLS_X509_FMT_DER) >= 0) { + if (gnutls_x509_crt_import(cert, &peers[0], GNUTLS_X509_FMT_DER) == 0) { size = sizeof(buf); gnutls_x509_crt_get_dn(cert, buf, &size); gg_debug_session(sess, GG_DEBUG_MISC, "// cert subject: %s\n", buf); @@ -826,6 +826,8 @@ gnutls_handshake_repeat: gg_debug_session(sess, GG_DEBUG_MISC, "// cert issuer: %s\n", buf); } } + + gnutls_x509_crt_deinit(cert); } } diff -up libgadu-1.11.0/src/libgadu.c.r1144 libgadu-1.11.0/src/libgadu.c --- libgadu-1.11.0/src/libgadu.c.r1144 2011-05-29 13:41:30.000000000 +0200 +++ libgadu-1.11.0/src/libgadu.c 2011-07-12 21:49:57.000000000 +0200 @@ -881,8 +881,7 @@ struct gg_session *gg_login(const struct gnutls_global_init(); gnutls_certificate_allocate_credentials(&tmp->xcred); gnutls_init(&tmp->session, GNUTLS_CLIENT); - gnutls_priority_set_direct(tmp->session, "NORMAL:-VERS-TLS", NULL); -// gnutls_priority_set_direct(tmp->session, "NONE:+VERS-SSL3.0:+AES-128-CBC:+RSA:+SHA1:+COMP-NULL", NULL); + gnutls_set_default_priority(tmp->session); gnutls_credentials_set(tmp->session, GNUTLS_CRD_CERTIFICATE, tmp->xcred); #elif defined(GG_CONFIG_HAVE_OPENSSL) char buf[1024]; @@ -1116,18 +1115,6 @@ void gg_logoff(struct gg_session *sess) sess->fd = -1; } -#ifdef GG_CONFIG_HAVE_GNUTLS - if (sess->ssl != NULL) { - gg_session_gnutls_t *tmp; - - tmp = (gg_session_gnutls_t*) sess->ssl; - gnutls_deinit(tmp->session); - gnutls_certificate_free_credentials(tmp->xcred); - gnutls_global_deinit(); - free(sess->ssl); - } -#endif - if (sess->send_buf) { free(sess->send_buf); sess->send_buf = NULL; @@ -1159,6 +1146,18 @@ void gg_free_session(struct gg_session * free(sess->recv_buf); free(sess->header_buf); +#ifdef GG_CONFIG_HAVE_GNUTLS + if (sess->ssl != NULL) { + gg_session_gnutls_t *tmp; + + tmp = (gg_session_gnutls_t*) sess->ssl; + gnutls_deinit(tmp->session); + gnutls_certificate_free_credentials(tmp->xcred); + gnutls_global_deinit(); + free(sess->ssl); + } +#endif + #ifdef GG_CONFIG_HAVE_OPENSSL if (sess->ssl) SSL_free(sess->ssl);