From: Ondřej Kuzník Date: Wed, 13 Dec 2017 16:03:36 +0000 (+0000) Subject: RFC4511 says Binds do not abandon, send a "reset" bind instead X-Git-Tag: OPENLDAP_REL_ENG_2_5_1ALPHA~18^2~86 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1fd7249f8e3038b352dfe996bd6edcef700c1371;p=thirdparty%2Fopenldap.git RFC4511 says Binds do not abandon, send a "reset" bind instead --- diff --git a/servers/lloadd/operation.c b/servers/lloadd/operation.c index b35152dc03..f83d2ade67 100644 --- a/servers/lloadd/operation.c +++ b/servers/lloadd/operation.c @@ -533,9 +533,20 @@ operation_send_abandon( LloadOperation *op ) } upstream->c_pendingber = ber; - rc = ber_printf( ber, "t{titi}", LDAP_TAG_MESSAGE, - LDAP_TAG_MSGID, upstream->c_next_msgid++, - LDAP_REQ_ABANDON, op->o_upstream_msgid ); + Debug( LDAP_DEBUG_TRACE, "operation_send_abandon: " + "abandoning %s msgid=%d on connid=%lu\n", + lload_msgtype2str( op->o_tag ), op->o_upstream_msgid, + op->o_upstream_connid ); + + if ( op->o_tag == LDAP_REQ_BIND ) { + rc = ber_printf( ber, "t{tit{ist{s}}}", LDAP_TAG_MESSAGE, + LDAP_TAG_MSGID, upstream->c_next_msgid++, + LDAP_REQ_BIND, LDAP_VERSION3, "", LDAP_AUTH_SASL, "" ); + } else { + rc = ber_printf( ber, "t{titi}", LDAP_TAG_MESSAGE, + LDAP_TAG_MSGID, upstream->c_next_msgid++, + LDAP_REQ_ABANDON, op->o_upstream_msgid ); + } if ( rc < 0 ) { ber_free( ber, 1 ); @@ -574,6 +585,11 @@ operation_abandon( LloadOperation *op ) ldap_pvt_thread_mutex_unlock( &op->o_link_mutex ); if ( tavl_delete( &c->c_ops, op, operation_upstream_cmp ) == NULL ) { /* The operation has already been abandoned or finished */ + Debug( LDAP_DEBUG_TRACE, "operation_abandon: " + "%s from connid=%lu msgid=%d not present in connid=%lu any " + "more\n", + lload_msgtype2str( op->o_tag ), op->o_client_connid, + op->o_client_msgid, op->o_upstream_connid ); goto unlock; } if ( c->c_state == LLOAD_C_BINDING ) {