summaryrefslogtreecommitdiff
path: root/chat/bitlbee/patches
diff options
context:
space:
mode:
Diffstat (limited to 'chat/bitlbee/patches')
-rw-r--r--chat/bitlbee/patches/patch-aa17
-rw-r--r--chat/bitlbee/patches/patch-ab20
-rw-r--r--chat/bitlbee/patches/patch-ac20
-rw-r--r--chat/bitlbee/patches/patch-ad50
-rw-r--r--chat/bitlbee/patches/patch-ae23
5 files changed, 130 insertions, 0 deletions
diff --git a/chat/bitlbee/patches/patch-aa b/chat/bitlbee/patches/patch-aa
new file mode 100644
index 00000000000..83d4d4a3f06
--- /dev/null
+++ b/chat/bitlbee/patches/patch-aa
@@ -0,0 +1,17 @@
+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_ );
diff --git a/chat/bitlbee/patches/patch-ab b/chat/bitlbee/patches/patch-ab
new file mode 100644
index 00000000000..afa9cbae4d4
--- /dev/null
+++ b/chat/bitlbee/patches/patch-ab
@@ -0,0 +1,20 @@
+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_;
diff --git a/chat/bitlbee/patches/patch-ac b/chat/bitlbee/patches/patch-ac
new file mode 100644
index 00000000000..3bbb4c6d15d
--- /dev/null
+++ b/chat/bitlbee/patches/patch-ac
@@ -0,0 +1,20 @@
+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_;
diff --git a/chat/bitlbee/patches/patch-ad b/chat/bitlbee/patches/patch-ad
new file mode 100644
index 00000000000..b5c532a8b67
--- /dev/null
+++ b/chat/bitlbee/patches/patch-ad
@@ -0,0 +1,50 @@
+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_ )
diff --git a/chat/bitlbee/patches/patch-ae b/chat/bitlbee/patches/patch-ae
new file mode 100644
index 00000000000..c14614121af
--- /dev/null
+++ b/chat/bitlbee/patches/patch-ae
@@ -0,0 +1,23 @@
+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 )