]> git.sur5r.net Git - openldap/commitdiff
connection_init now takes one more argument that indicates whether to
authorJulio Sánchez Fernández <jsanchez@openldap.org>
Wed, 14 Jul 1999 19:44:18 +0000 (19:44 +0000)
committerJulio Sánchez Fernández <jsanchez@openldap.org>
Wed, 14 Jul 1999 19:44:18 +0000 (19:44 +0000)
use TLS right away or not on that connection.

servers/slapd/connection.c
servers/slapd/daemon.c
servers/slapd/proto-slap.h

index e8defc96748feb770f7cdad77ee84a177764d6da..bea96c20b049a081ee1296cb1b796062a9852a7b 100644 (file)
@@ -50,6 +50,7 @@ static void connection_close( Connection *c );
 static int connection_op_activate( Connection *conn, Operation *op );
 static int connection_resched( Connection *conn );
 static void connection_abandon( Connection *conn );
+static void connection_destroy( Connection *c );
 
 struct co_arg {
        Connection      *co_conn;
@@ -271,7 +272,8 @@ static void connection_return( Connection *c )
 long connection_init(
        ber_socket_t s,
        const char* name,
-       const char* addr)
+       const char* addr,
+       int use_tls)
 {
        unsigned long id;
        Connection *c;
@@ -392,6 +394,21 @@ long connection_init(
     c->c_conn_state = SLAP_C_INACTIVE;
     c->c_struct_state = SLAP_C_USED;
 
+#ifdef HAVE_TLS
+    if ( use_tls ) {
+           /* FIXME: >0 means incomplete read */
+           if ( ldap_pvt_tls_accept( c->c_sb, NULL ) < 0 ) {
+                   Debug( LDAP_DEBUG_ANY,
+                          "connection_init(%d): TLS accept failed.\n",
+                               s, 0, 0);
+                   ldap_pvt_thread_mutex_unlock( &c->c_mutex );
+                   ldap_pvt_thread_mutex_unlock( &connections_mutex );
+                   connection_destroy( c );
+                   return -1;
+           }
+    }
+#endif
+
     ldap_pvt_thread_mutex_unlock( &c->c_mutex );
     ldap_pvt_thread_mutex_unlock( &connections_mutex );
 
index 53490b9927dbe59260930098acb7e2be71392d04..ee09d97731998f5193fff928739b68c1b7198831 100644 (file)
@@ -330,7 +330,7 @@ slapd_daemon_task(
                }
 
        } else {
-               if( connection_init( (ber_socket_t) 0, NULL, NULL ) ) {
+               if( connection_init( (ber_socket_t) 0, NULL, NULL, 0 ) ) {
                        Debug( LDAP_DEBUG_ANY,
                                "connection_init(%d) failed.\n",
                                0, 0, 0 );
@@ -579,7 +579,8 @@ slapd_daemon_task(
                        }
 #endif /* HAVE_TCPD */
 
-                       if( (id = connection_init(s, client_name, client_addr)) < 0 ) {
+                       if( (id = connection_init(s, client_name, client_addr,
+                                                 listeners[l].use_tls)) < 0 ) {
                                Debug( LDAP_DEBUG_ANY,
                                        "daemon: connection_init(%ld, %s, %s) failed.\n",
                                        (long) s,
index bc628db77ada7631547685865d468a0683234a13..442f2f450a4e9699b760e749236b7986025e58ce 100644 (file)
@@ -144,7 +144,7 @@ int connections_timeout_idle LDAP_P((time_t));
 
 long connection_init LDAP_P((
        ber_socket_t s,
-       const char* name, const char* addr));
+       const char* name, const char* addr, int use_tls));
 
 void connection_closing LDAP_P(( Connection *c ));
 int connection_state_closing LDAP_P(( Connection *c ));