From 7aa67341fcdf1f3018e459537199cc5481bb4a2e Mon Sep 17 00:00:00 2001
From: Kurt Zeilenga <kurt@openldap.org>
Date: Thu, 11 Jul 2002 00:57:24 +0000
Subject: [PATCH] Read on if data is ready after TLS

---
 servers/slapd/connection.c | 21 +++++++++++++--------
 1 file changed, 13 insertions(+), 8 deletions(-)

diff --git a/servers/slapd/connection.c b/servers/slapd/connection.c
index 0f4ce390da..6425e199f2 100644
--- a/servers/slapd/connection.c
+++ b/servers/slapd/connection.c
@@ -1164,14 +1164,13 @@ int connection_read(ber_socket_t s)
 			 * to propagate to client. */
 			FD_ZERO(&rfd);
 			FD_SET(s, &rfd);
-			for (rc=1; rc>0;)
-			{
+			for (rc=1; rc>0;) {
 			    tv.tv_sec = 1;
 			    tv.tv_usec = 0;
 			    rc = select(s+1, &rfd, NULL, NULL, &tv);
-			    if (rc == 1)
-				ber_sockbuf_ctrl( c->c_sb, LBER_SB_OPT_DRAIN,
-				    NULL);
+			    if (rc == 1) {
+					ber_sockbuf_ctrl( c->c_sb, LBER_SB_OPT_DRAIN, NULL);
+				}
 			}
 #endif
 			connection_close( c );
@@ -1206,9 +1205,15 @@ int connection_read(ber_socket_t s)
 			slap_sasl_external( c, c->c_tls_ssf, authid.bv_val );
 			if ( authid.bv_val )	free( authid.bv_val );
 		}
-		connection_return( c );
-		ldap_pvt_thread_mutex_unlock( &connections_mutex );
-		return 0;
+
+		/* if success and data is ready, fall thru to data input loop */
+		if( rc != 0 ||
+			!ber_sockbuf_ctrl( c->c_sb, LBER_SB_OPT_DATA_READY, NULL ) )
+		{
+			connection_return( c );
+			ldap_pvt_thread_mutex_unlock( &connections_mutex );
+			return 0;
+		}
 	}
 #endif
 
-- 
GitLab