On Mon, 25 Sep 2006 16:06:17 +0400 "Nikita V. Youshchenko" <[EMAIL PROTECTED]> wrote:
> Hi, > > > > > I've prepared a new version of libetpan package, that has this patch > > > > applied... > > > > > > The segfault still happens ... > > > > Could you compile with debugging symbols and show the stack trace of > > the crash ? > > Dinh, could it happen that applying only the mentioned patch (without all > the rest that was committed to CVS since 0.46 release) results in broken > code? Finally Colin got a patch which at least works for me and the IMAP server which I use (btw, it's a (Cyrus v2.2.3) with LMTP; on OpenBSD 3.4 (GENERIC)). Thanks Colin! ;) It's against 0.46, so it replaces the current patch in patches/. regards, -- Ricardo Mones http://people.debian.org/~mones «All the troubles you have will pass away very quickly.»
--- libetpan-0.46/src/data-types/mailstream_ssl.c 2006-06-26 13:50:26.000000000 +0200 +++ mailstream_ssl.c 2006-09-25 19:05:18.000000000 +0200 @@ -30,7 +30,7 @@ */ /* - * $Id: mailstream_ssl.c,v 1.38 2006/06/26 11:50:26 hoa Exp $ + * $Id: mailstream_ssl.c,v 1.40 2006/09/24 08:42:37 colinleroy Exp $ */ /* @@ -162,6 +162,7 @@ #ifdef USE_SSL static inline int mailstream_prepare_fd(int fd) { +#ifndef WIN32 int fd_flags; int r; @@ -170,6 +171,7 @@ r = fcntl(fd, F_SETFL, fd_flags); if (r < 0) return -1; +#endif return 0; } @@ -269,19 +271,37 @@ { struct mailstream_ssl_data * ssl_data; gnutls_session session; - gnutls_anon_client_credentials anoncred; + + const int cipher_prio[] = { GNUTLS_CIPHER_AES_128_CBC, + GNUTLS_CIPHER_3DES_CBC, + GNUTLS_CIPHER_AES_256_CBC, + GNUTLS_CIPHER_ARCFOUR_128, 0 }; + const int kx_prio[] = { GNUTLS_KX_DHE_RSA, + GNUTLS_KX_RSA, + GNUTLS_KX_DHE_DSS, 0 }; + const int mac_prio[] = { GNUTLS_MAC_SHA1, + GNUTLS_MAC_MD5, 0 }; + const int proto_prio[] = { GNUTLS_TLS1, + GNUTLS_SSL3, 0 }; + + gnutls_certificate_credentials_t xcred; int r; mailstream_ssl_init(); - gnutls_anon_allocate_client_credentials (&anoncred); - + gnutls_certificate_allocate_credentials (&xcred); r = gnutls_init(&session, GNUTLS_CLIENT); if (session == NULL) return NULL; - r = gnutls_set_default_priority(session); - r = gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, anoncred); + gnutls_set_default_priority(session); + gnutls_protocol_set_priority (session, proto_prio); + gnutls_cipher_set_priority (session, cipher_prio); + gnutls_kx_set_priority (session, kx_prio); + gnutls_mac_set_priority (session, mac_prio); + + r = gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); + gnutls_transport_set_ptr(session, (gnutls_transport_ptr) fd); do {