]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Add callback to tidy up if LDAP trunk requests fail
authorNick Porter <nick@portercomputing.co.uk>
Tue, 5 Sep 2023 15:40:04 +0000 (16:40 +0100)
committerNick Porter <nick@portercomputing.co.uk>
Tue, 5 Sep 2023 16:14:09 +0000 (17:14 +0100)
src/lib/ldap/connection.c

index fb48d46e0c35ca0517c9e2ea16dda9d619b9c1a2..1b86dc33755455cde1ac85e18d3b4aa565ca3cac 100644 (file)
@@ -502,6 +502,25 @@ static void ldap_request_cancel_mux(UNUSED fr_event_list_t *el, fr_trunk_connect
        }
 }
 
+/** Callback to tidy up when a trunk request fails
+ *
+ */
+static void ldap_request_fail(request_t *request, void *preq, UNUSED void *rctx,
+                             UNUSED fr_trunk_request_state_t state, UNUSED void *uctx)
+{
+       fr_ldap_query_t         *query = talloc_get_type_abort(preq, fr_ldap_query_t);
+
+       /*
+        *      Failed trunk requests get freed - so remove association in query.
+        */
+       query->treq = NULL;
+       query->ret = LDAP_RESULT_ERROR;
+
+       /*
+        *      Ensure request is runnable.
+        */
+       if (request) unlang_interpret_mark_runnable(request);
+}
 
 /** I/O read function
  *
@@ -1006,7 +1025,8 @@ fr_ldap_thread_trunk_t *fr_thread_ldap_trunk_get(fr_ldap_thread_t *thread, char
                                              .request_mux = ldap_trunk_request_mux,
                                              .request_demux = ldap_trunk_request_demux,
                                              .request_cancel = ldap_request_cancel,
-                                             .request_cancel_mux = ldap_request_cancel_mux
+                                             .request_cancel_mux = ldap_request_cancel_mux,
+                                             .request_fail = ldap_request_fail,
                                        },
                                      thread->trunk_conf,
                                      "rlm_ldap", found, false);