]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/connection.c
SLAPI - Netscape plugin API for slapd - based on patch contributed by Steve Omrani...
[openldap] / servers / slapd / connection.c
index 241c6003915b825b4968eb7072889b5389b3e1f6..8dbf0e63d7522d1ef93108993acec5a7e46e0b00 100644 (file)
@@ -320,10 +320,9 @@ static void connection_return( Connection *c )
 
 long connection_init(
        ber_socket_t s,
-       const char* url,
+       Listener *listener,
        const char* dnsname,
        const char* peername,
-       const char* sockname,
        int tls_udp_option,
        slap_ssf_t ssf,
        const char *authid )
@@ -333,9 +332,9 @@ long connection_init(
 
        assert( connections != NULL );
 
+       assert( listener != NULL );
        assert( dnsname != NULL );
        assert( peername != NULL );
-       assert( sockname != NULL );
 
 #ifndef HAVE_TLS
        assert( tls_udp_option != 1 );
@@ -396,22 +395,28 @@ long connection_init(
        if( c == NULL ) {
 #ifdef NEW_LOGGING
                LDAP_LOG( CONNECTION, INFO, 
-                          "connection_init: skt %d      connection table full (%d/%d)\n",
-                          s, i, dtblsize );
+                          "connection_init: skt %d connection table full "
+                          "(%d/%d)\n", s, i, dtblsize );
 #else
                Debug( LDAP_DEBUG_ANY,
-                               "connection_init(%d): connection table full (%d/%d)\n",
-                               s, i, dtblsize);
+                               "connection_init(%d): connection table full "
+                               "(%d/%d)\n", s, i, dtblsize);
 #endif
            ldap_pvt_thread_mutex_unlock( &connections_mutex );
            return -1;
        }
-    }
+       }
 #endif
 
-    assert( c != NULL );
+       assert( c != NULL );
 
        if( c->c_struct_state == SLAP_C_UNINITIALIZED ) {
+               c->c_send_ldap_result = slap_send_ldap_result;
+               c->c_send_search_entry = slap_send_search_entry;
+               c->c_send_search_result = slap_send_search_result;
+               c->c_send_search_reference = slap_send_search_reference;
+               c->c_send_ldap_extended = slap_send_ldap_extended;
+
                c->c_authmech.bv_val = NULL;
                c->c_authmech.bv_len = 0;
                c->c_dn.bv_val = NULL;
@@ -420,14 +425,11 @@ long connection_init(
                c->c_ndn.bv_len = 0;
                c->c_groups = NULL;
 
-               c->c_listener_url.bv_val = NULL;
-               c->c_listener_url.bv_len = 0;
+               c->c_listener = NULL;
                c->c_peer_domain.bv_val = NULL;
                c->c_peer_domain.bv_len = 0;
                c->c_peer_name.bv_val = NULL;
                c->c_peer_name.bv_len = 0;
-               c->c_sock_name.bv_val = NULL;
-               c->c_sock_name.bv_len = 0;
 
                LDAP_STAILQ_INIT(&c->c_ops);
                LDAP_STAILQ_INIT(&c->c_pending_ops);
@@ -462,10 +464,9 @@ long connection_init(
     assert( c->c_dn.bv_val == NULL );
     assert( c->c_ndn.bv_val == NULL );
     assert( c->c_groups == NULL );
-    assert( c->c_listener_url.bv_val == NULL );
+    assert( c->c_listener == NULL );
     assert( c->c_peer_domain.bv_val == NULL );
     assert( c->c_peer_name.bv_val == NULL );
-    assert( c->c_sock_name.bv_val == NULL );
     assert( LDAP_STAILQ_EMPTY(&c->c_ops) );
     assert( LDAP_STAILQ_EMPTY(&c->c_pending_ops) );
        assert( c->c_sasl_bind_mech.bv_val == NULL );
@@ -474,10 +475,9 @@ long connection_init(
        assert( c->c_sasl_bindop == NULL );
        assert( c->c_currentber == NULL );
 
-       ber_str2bv( url, 0, 1, &c->c_listener_url );
+       c->c_listener = listener;
        ber_str2bv( dnsname, 0, 1, &c->c_peer_domain );
        ber_str2bv( peername, 0, 1, &c->c_peer_name );
-       ber_str2bv( sockname, 0, 1, &c->c_sock_name );
 
     c->c_n_ops_received = 0;
     c->c_n_ops_executing = 0;
@@ -633,12 +633,7 @@ connection_destroy( Connection *c )
     c->c_activitytime = c->c_starttime = 0;
 
        connection2anonymous( c );
-
-       if(c->c_listener_url.bv_val != NULL) {
-               free(c->c_listener_url.bv_val);
-               c->c_listener_url.bv_val = NULL;
-       }
-       c->c_listener_url.bv_len = 0;
+       c->c_listener = NULL;
 
        if(c->c_peer_domain.bv_val != NULL) {
                free(c->c_peer_domain.bv_val);
@@ -646,31 +641,10 @@ connection_destroy( Connection *c )
        }
        c->c_peer_domain.bv_len = 0;
        if(c->c_peer_name.bv_val != NULL) {
-#ifdef LDAP_PF_LOCAL
-               /*
-                * If peer was a domain socket, unlink. Mind you,
-                * they may be un-named. Should we leave this to
-                * the client?
-                */
-               if (strncmp(c->c_peer_name.bv_val, "PATH=", 
-                                       sizeof("PATH=") - 1) == 0) {
-                       char *path = c->c_peer_name.bv_val 
-                               + sizeof("PATH=") - 1;
-                       if (path[0] != '\0') {
-                               (void)unlink(path);
-                       }
-               }
-#endif /* LDAP_PF_LOCAL */
-
                free(c->c_peer_name.bv_val);
                c->c_peer_name.bv_val = NULL;
        }
        c->c_peer_name.bv_len = 0;
-       if(c->c_sock_name.bv_val != NULL) {
-               free(c->c_sock_name.bv_val);
-               c->c_sock_name.bv_val = NULL;
-       }
-       c->c_sock_name.bv_len = 0;
 
        c->c_sasl_bind_in_progress = 0;
        if(c->c_sasl_bind_mech.bv_val != NULL) {
@@ -1057,7 +1031,12 @@ operations_error:
 
        LDAP_STAILQ_REMOVE( &conn->c_ops, arg->co_op, slap_op, o_next);
        LDAP_STAILQ_NEXT(arg->co_op, o_next) = NULL;
-       slap_op_free( arg->co_op );
+#ifdef LDAP_CLIENT_UPDATE
+       if ( !( arg->co_op->o_clientupdate_type & SLAP_LCUP_PERSIST ) )
+#endif /* LDAP_CLIENT_UPDATE */
+       {
+               slap_op_free( arg->co_op );
+       }
        arg->co_op = NULL;
        arg->co_conn = NULL;
        free( (char *) arg );