]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Use CURL handles from slab in place of one off allocated
authorNick Porter <nick@portercomputing.co.uk>
Thu, 16 Feb 2023 12:27:46 +0000 (12:27 +0000)
committerNick Porter <nick@portercomputing.co.uk>
Fri, 17 Feb 2023 11:13:32 +0000 (11:13 +0000)
src/modules/rlm_imap/rlm_imap.c

index b7dcd35bf596d324a0a9399a1a0a4fe96e7d8a51..a19f70240ab8e4f0dd94a999f33d86d531fe3628 100644 (file)
@@ -96,7 +96,7 @@ static void imap_io_module_signal(module_ctx_t const *mctx, request_t *request,
                /* Not much we can do */
        }
        t->mhandle->transfers--;
-       talloc_free(randle);
+       fr_imap_slab_release(randle);
 }
 
 /*
@@ -123,13 +123,13 @@ static unlang_action_t CC_HINT(nonnull) mod_authenticate_resume(rlm_rcode_t *p_r
        }
 
        if (randle->result != CURLE_OK) {
-               talloc_free(randle);
+               fr_imap_slab_release(randle);
                RETURN_MODULE_REJECT;
        }
 
        if (tls->extract_cert_attrs) fr_curl_response_certinfo(request, randle);
 
-       talloc_free(randle);
+       fr_imap_slab_release(randle);
        RETURN_MODULE_OK;
 }
 
@@ -153,12 +153,6 @@ static unlang_action_t CC_HINT(nonnull(1,2)) mod_authenticate(rlm_rcode_t *p_res
        fr_pair_t const         *password;
        fr_curl_io_request_t    *randle;
 
-       randle = fr_curl_io_request_alloc(request);
-       if (!randle){
-       error:
-               RETURN_MODULE_FAIL;
-       }
-
        username = fr_pair_find_by_da(&request->request_pairs, NULL, attr_user_name);
        password = fr_pair_find_by_da(&request->request_pairs, NULL, attr_user_password);
 
@@ -177,6 +171,13 @@ static unlang_action_t CC_HINT(nonnull(1,2)) mod_authenticate(rlm_rcode_t *p_res
                RETURN_MODULE_INVALID;
        }
 
+       randle = fr_imap_slab_reserve(t->slab);
+       if (!randle){
+       error:
+               if (randle) fr_imap_slab_release(randle);
+               RETURN_MODULE_FAIL;
+       }
+
        FR_CURL_REQUEST_SET_OPTION(CURLOPT_USERNAME, username->vp_strvalue);
        FR_CURL_REQUEST_SET_OPTION(CURLOPT_PASSWORD, password->vp_strvalue);