From 1fd7249f8e3038b352dfe996bd6edcef700c1371 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Kuzn=C3=ADk?= Date: Wed, 13 Dec 2017 16:03:36 +0000 Subject: [PATCH] RFC4511 says Binds do not abandon, send a "reset" bind instead --- servers/lloadd/operation.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) 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 ) {