]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/connection.c
ITS#6270
[openldap] / servers / slapd / connection.c
index 43faf736a511b65f30d575dcbf813fbade6c81ed..7f8331f5329875b6bc8b486f7377b5f00383ac7b 100644 (file)
@@ -48,28 +48,10 @@ static ldap_pvt_thread_mutex_t connections_mutex;
 static Connection *connections = NULL;
 
 static ldap_pvt_thread_mutex_t conn_nextid_mutex;
-static unsigned long conn_nextid = 0;
+static unsigned long conn_nextid = SLAPD_SYNC_SYNCCONN_OFFSET;
 
 static const char conn_lost_str[] = "connection lost";
 
-/* structure state (protected by connections_mutex) */
-enum sc_struct_state {
-       SLAP_C_UNINITIALIZED = 0,       /* MUST BE ZERO (0) */
-       SLAP_C_UNUSED,
-       SLAP_C_USED,
-       SLAP_C_PENDING
-};
-
-/* connection state (protected by c_mutex ) */
-enum sc_conn_state {
-       SLAP_C_INVALID = 0,             /* MUST BE ZERO (0) */
-       SLAP_C_INACTIVE,                /* zero threads */
-       SLAP_C_CLOSING,                 /* closing */
-       SLAP_C_ACTIVE,                  /* one or more threads */
-       SLAP_C_BINDING,                 /* binding */
-       SLAP_C_CLIENT                   /* outbound client conn */
-};
-
 const char *
 connection_state2str( int state )
 {
@@ -1380,6 +1362,11 @@ connection_read( ber_socket_t s, conn_readinfo *cri )
                            c->c_connid, (int) s, c->c_tls_ssf, c->c_ssf, 0 );
                        slap_sasl_external( c, c->c_tls_ssf, &authid );
                        if ( authid.bv_val ) free( authid.bv_val );
+               } else if ( rc == 1 ) { /* need to retry */
+                       slapd_set_read( s, 0 );
+                       slapd_set_write( s, 1 );
+                       connection_return( c );
+                       return 0;
                }
 
                /* if success and data is ready, fall thru to data input loop */
@@ -1879,6 +1866,14 @@ int connection_write(ber_socket_t s)
                return -1;
        }
 
+#ifdef HAVE_TLS
+       if ( c->c_is_tls && c->c_needs_tls_accept ) {
+               connection_return( c );
+               connection_read_activate( s );
+               return 0;
+       }
+#endif
+
        c->c_n_write++;
 
        Debug( LDAP_DEBUG_TRACE,