From: Nick Porter Date: Mon, 24 Apr 2023 17:15:28 +0000 (+0100) Subject: LDAP query should be removed from outstanding list in demux X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e35b82f8d4b29b6eead5da5fb984cf4a3d9f29fc;p=thirdparty%2Ffreeradius-server.git LDAP query should be removed from outstanding list in demux We have received a reply, so it is no longer outstanding. Also libldap can reuse msgid values so there could be a conflict between a query whose reply has been received and a new query. --- diff --git a/src/lib/ldap/base.c b/src/lib/ldap/base.c index 5b0c420bf79..37beb0b4d43 100644 --- a/src/lib/ldap/base.c +++ b/src/lib/ldap/base.c @@ -920,11 +920,6 @@ static int _ldap_query_free(fr_ldap_query_t *query) { int i; - /* - * Remove the query from the tree of outstanding queries - */ - if (query->ldap_conn) fr_rb_remove(query->ldap_conn->queries, query); - /* * Free any results which were retrieved */ diff --git a/src/lib/ldap/connection.c b/src/lib/ldap/connection.c index 90b8d27a050..671e1dffd9d 100644 --- a/src/lib/ldap/connection.c +++ b/src/lib/ldap/connection.c @@ -792,6 +792,11 @@ static void ldap_trunk_request_demux(fr_event_list_t *el, fr_trunk_connection_t continue; } + /* + * Remove the query from the tree of outstanding queries + */ + fr_rb_remove(ldap_conn->queries, query); + /* * This really shouldn't happen - as we only retrieve complete sets of results - * but as the query data structure will last until its results are fully handled diff --git a/src/lib/ldap/referral.c b/src/lib/ldap/referral.c index 8b9fe803ef0..2ce2817e14b 100644 --- a/src/lib/ldap/referral.c +++ b/src/lib/ldap/referral.c @@ -115,12 +115,6 @@ int fr_ldap_referral_follow(fr_ldap_thread_t *t, request_t *request, fr_ldap_que int referral_no = -1; fr_ldap_referral_t *referral; - /* - * In following a referral, firstly remove the query from the - * tree of pending queries clear the message id. - */ - fr_rb_remove(query->ldap_conn->queries, query); - query->msgid = 0; fr_trunk_request_signal_complete(query->treq); query->treq = NULL;