Sun Apr 20 09:29:45 2008 UTC ()
Add patch taken from the devel branch, to fix issues with openssl and jabber

Patch is taken from
http://bugs.bitlbee.org/bitlbee/changeset/devel%2C359
And the issue: http://bugs.bitlbee.org/bitlbee/ticket/368

Thanks to Frederic Jaeckel for the report.


(tonio)
diff -r1.40 -r1.41 pkgsrc/chat/bitlbee/Makefile
diff -r1.18 -r1.19 pkgsrc/chat/bitlbee/distinfo
diff -r0 -r1.7 pkgsrc/chat/bitlbee/patches/patch-aa
diff -r0 -r1.1 pkgsrc/chat/bitlbee/patches/patch-ab
diff -r0 -r1.1 pkgsrc/chat/bitlbee/patches/patch-ac
diff -r0 -r1.1 pkgsrc/chat/bitlbee/patches/patch-ad
diff -r0 -r1.1 pkgsrc/chat/bitlbee/patches/patch-ae

cvs diff -r1.40 -r1.41 pkgsrc/chat/bitlbee/Makefile (expand / switch to unified diff)

--- pkgsrc/chat/bitlbee/Makefile 2008/04/09 18:51:30 1.40
+++ pkgsrc/chat/bitlbee/Makefile 2008/04/20 09:29:45 1.41
@@ -1,17 +1,18 @@ @@ -1,17 +1,18 @@
1# $NetBSD: Makefile,v 1.40 2008/04/09 18:51:30 tonio Exp $ 1# $NetBSD: Makefile,v 1.41 2008/04/20 09:29:45 tonio Exp $
2# 2#
3 3
4DISTNAME= bitlbee-1.2 4DISTNAME= bitlbee-1.2
 5PKGREVISION= 1
5CATEGORIES= chat 6CATEGORIES= chat
6MASTER_SITES= http://get.bitlbee.org/src/ 7MASTER_SITES= http://get.bitlbee.org/src/
7 8
8MAINTAINER= tonio@NetBSD.org 9MAINTAINER= tonio@NetBSD.org
9HOMEPAGE= http://www.bitlbee.org/ 10HOMEPAGE= http://www.bitlbee.org/
10COMMENT= IRC to other chat networks gateway 11COMMENT= IRC to other chat networks gateway
11 12
12PKG_DESTDIR_SUPPORT= user-destdir 13PKG_DESTDIR_SUPPORT= user-destdir
13 14
14HAS_CONFIGURE= yes 15HAS_CONFIGURE= yes
15USE_TOOLS+= gmake pkg-config 16USE_TOOLS+= gmake pkg-config
16 17
17CONFIGURE_ARGS+= --prefix=${PREFIX} 18CONFIGURE_ARGS+= --prefix=${PREFIX}

cvs diff -r1.18 -r1.19 pkgsrc/chat/bitlbee/distinfo (expand / switch to unified diff)

--- pkgsrc/chat/bitlbee/distinfo 2008/04/09 18:51:30 1.18
+++ pkgsrc/chat/bitlbee/distinfo 2008/04/20 09:29:45 1.19
@@ -1,5 +1,10 @@ @@ -1,5 +1,10 @@
1$NetBSD: distinfo,v 1.18 2008/04/09 18:51:30 tonio Exp $ 1$NetBSD: distinfo,v 1.19 2008/04/20 09:29:45 tonio Exp $
2 2
3SHA1 (bitlbee-1.2.tar.gz) = 71dc24e9025375460e999345db70fb5dff7d45d8 3SHA1 (bitlbee-1.2.tar.gz) = 71dc24e9025375460e999345db70fb5dff7d45d8
4RMD160 (bitlbee-1.2.tar.gz) = c48c5f8af418ba4fe7310732ced6290521cc656e 4RMD160 (bitlbee-1.2.tar.gz) = c48c5f8af418ba4fe7310732ced6290521cc656e
5Size (bitlbee-1.2.tar.gz) = 469482 bytes 5Size (bitlbee-1.2.tar.gz) = 469482 bytes
 6SHA1 (patch-aa) = 39f16450f87ee37b16ac4e13991ddc6baecf460b
 7SHA1 (patch-ab) = 249a77118d76e1495713f28f9caf9923734afac3
 8SHA1 (patch-ac) = 6ba0b3fff28f8bcc29d3d07bd7692104d5ae4bc1
 9SHA1 (patch-ad) = 1d6733eed422feeac7568f519d7ae0336cbfbead
 10SHA1 (patch-ae) = bd55911a6cfe49f02ecd1b7f0469dc9bfea8f5d6

File Added: pkgsrc/chat/bitlbee/patches/Attic/patch-aa
Fix stalling issue with OpenSSL and Jabber
From http://bugs.bitlbee.org/bitlbee/changeset/devel%2C359

$NetBSD: patch-aa,v 1.7 2008/04/20 09:29:45 tonio Exp $

--- lib/ssl_client.h.orig	Sat Jun 30 23:18:42 2007
+++ lib/ssl_client.h
@@ -59,6 +59,9 @@ G_MODULE_EXPORT void *ssl_starttls( int 
 G_MODULE_EXPORT int ssl_read( void *conn, char *buf, int len );
 G_MODULE_EXPORT int ssl_write( void *conn, const char *buf, int len );
 
+/* See ssl_openssl.c for an explanation. */
+G_MODULE_EXPORT int ssl_pending( void *conn );
+
 /* Abort the SSL connection and disconnect the socket. Do not use close()
    directly, both the SSL library and the peer will be unhappy! */
 G_MODULE_EXPORT void ssl_disconnect( void *conn_ );

File Added: pkgsrc/chat/bitlbee/patches/Attic/patch-ab
Fix stalling issue with OpenSSL and Jabber
From http://bugs.bitlbee.org/bitlbee/changeset/devel%2C359

$NetBSD: patch-ab,v 1.1 2008/04/20 09:29:45 tonio Exp $

--- lib/ssl_gnutls.c.orig	Sat Mar 15 18:32:14 2008
+++ lib/ssl_gnutls.c
@@ -210,6 +210,12 @@ int ssl_write( void *conn, const char *b
 	return st;
 }
 
+/* See ssl_openssl.c for an explanation. */
+int ssl_pending( void *conn )
+{
+	return 0;
+}
+
 void ssl_disconnect( void *conn_ )
 {
 	struct scd *conn = conn_;

File Added: pkgsrc/chat/bitlbee/patches/Attic/patch-ac
Fix stalling issue with OpenSSL and Jabber
From http://bugs.bitlbee.org/bitlbee/changeset/devel%2C359

$NetBSD: patch-ac,v 1.1 2008/04/20 09:29:45 tonio Exp $

--- lib/ssl_nss.c.orig	Sat Jun 30 23:18:42 2007
+++ lib/ssl_nss.c
@@ -168,6 +168,12 @@ int ssl_write( void *conn, const char *b
 	return( PR_Write ( ((struct scd*)conn)->prfd, buf, len ) );
 }
 
+/* See ssl_openssl.c for an explanation. */
+int ssl_pending( void *conn )
+{
+	return 0;
+}
+
 void ssl_disconnect( void *conn_ )
 {
 	struct scd *conn = conn_;

File Added: pkgsrc/chat/bitlbee/patches/Attic/patch-ad
Fix stalling issue with OpenSSL and Jabber
From http://bugs.bitlbee.org/bitlbee/changeset/devel%2C359

$NetBSD: patch-ad,v 1.1 2008/04/20 09:29:45 tonio Exp $

--- lib/ssl_openssl.c.orig	Sat Jun 30 23:18:42 2007
+++ lib/ssl_openssl.c
@@ -61,16 +61,16 @@ void *ssl_connect( char *host, int port,
 	struct scd *conn = g_new0( struct scd, 1 );
 	
 	conn->fd = proxy_connect( host, port, ssl_connected, conn );
-	conn->func = func;
-	conn->data = data;
-	conn->inpa = -1;
-	
 	if( conn->fd < 0 )
 	{
 		g_free( conn );
 		return NULL;
 	}
 	
+	conn->func = func;
+	conn->data = data;
+	conn->inpa = -1;
+	
 	return conn;
 }
 
@@ -228,6 +228,21 @@ int ssl_write( void *conn, const char *b
 	}
 	
 	return st;
+}
+
+/* Only OpenSSL *really* needs this (and well, maybe NSS). See for more info:
+   http://www.gnu.org/software/gnutls/manual/gnutls.html#index-gnutls_005frecord_005fcheck_005fpending-209
+   http://www.openssl.org/docs/ssl/SSL_pending.html
+   
+   Required because OpenSSL empties the TCP buffer completely but doesn't
+   necessarily give us all the unencrypted data.
+   
+   Returns 0 if there's nothing left or if we don't have to care (GnuTLS),
+   1 if there's more data. */
+int ssl_pending( void *conn )
+{
+	return ( ((struct scd*)conn) && ((struct scd*)conn)->established ) ?
+	       SSL_pending( ((struct scd*)conn)->ssl ) > 0 : 0;
 }
 
 void ssl_disconnect( void *conn_ )

File Added: pkgsrc/chat/bitlbee/patches/Attic/patch-ae
Fix stalling issue with OpenSSL and Jabber
From http://bugs.bitlbee.org/bitlbee/changeset/devel%2C359

$NetBSD: patch-ae,v 1.1 2008/04/20 09:29:45 tonio Exp $

--- protocols/jabber/io.c.orig	Sat Feb 16 23:39:47 2008
+++ protocols/jabber/io.c
@@ -240,8 +240,13 @@ static gboolean jabber_read_callback( gp
 		return FALSE;
 	}
 	
-	/* EAGAIN/etc or a successful read. */
-	return TRUE;
+	if( ssl_pending( jd->ssl ) )
+		/* OpenSSL empties the TCP buffers completely but may keep some
+		   data in its internap buffers. select() won't see that, but
+		   ssl_pending() does. */
+		return jabber_read_callback( data, fd, cond );
+	else
+		return TRUE;
 }
 
 gboolean jabber_connected_plain( gpointer data, gint source, b_input_condition cond )