X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fconnection.c;h=aeed4237b8da68fc7fdef23307db4d29c1b00e7c;hb=014ba5ac80497d02b83514f30dabe3824e9facdc;hp=241c6003915b825b4968eb7072889b5389b3e1f6;hpb=3eb21d8a6c3bea8fee7685a60831bd24f96ff7d2;p=openldap diff --git a/servers/slapd/connection.c b/servers/slapd/connection.c index 241c600391..aeed4237b8 100644 --- a/servers/slapd/connection.c +++ b/servers/slapd/connection.c @@ -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 ); @@ -420,14 +419,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 +458,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 +469,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 +627,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 +635,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 +1025,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 );