From: Arran Cudbard-Bell Date: Wed, 3 Nov 2021 17:36:03 +0000 (-0400) Subject: Move rctx into mctx, fixing dhcpv6_process in the process X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=011a5132a69645fcb090ed4974fddd6186b10005;p=thirdparty%2Ffreeradius-server.git Move rctx into mctx, fixing dhcpv6_process in the process --- diff --git a/src/lib/eap_aka_sim/module.c b/src/lib/eap_aka_sim/module.c index e73bf966f89..ad070172dc1 100644 --- a/src/lib/eap_aka_sim/module.c +++ b/src/lib/eap_aka_sim/module.c @@ -39,8 +39,7 @@ RCSID("$Id$") /** Encode EAP session data from attributes * */ -static unlang_action_t mod_encode(rlm_rcode_t *p_result, module_ctx_t const *mctx, - request_t *request, UNUSED void *rctx) +static unlang_action_t mod_encode(rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request) { eap_aka_sim_module_conf_t *inst = talloc_get_type_abort(mctx->instance, eap_aka_sim_module_conf_t); eap_session_t *eap_session = eap_session_get(request->parent); diff --git a/src/lib/eap_aka_sim/state_machine.c b/src/lib/eap_aka_sim/state_machine.c index 60e36155b2a..229c44d63c9 100644 --- a/src/lib/eap_aka_sim/state_machine.c +++ b/src/lib/eap_aka_sim/state_machine.c @@ -43,19 +43,16 @@ RCSID("$Id$") #define STATE(_x) static inline unlang_action_t state_ ## _x(rlm_rcode_t *p_result, \ module_ctx_t const *mctx, \ - request_t *request,\ - eap_aka_sim_session_t *eap_aka_sim_session) + request_t *request) #define STATE_GUARD(_x) static unlang_action_t guard_ ## _x(rlm_rcode_t *p_result, \ module_ctx_t const *mctx, \ - request_t *request, \ - eap_aka_sim_session_t *eap_aka_sim_session) + request_t *request) #define RESUME(_x) static inline unlang_action_t resume_ ## _x(rlm_rcode_t *p_result, \ module_ctx_t const *mctx, \ - request_t *request, \ - void *rctx) + request_t *request) -#define STATE_TRANSITION(_x) guard_ ## _x(p_result, mctx, request, eap_aka_sim_session); +#define STATE_TRANSITION(_x) guard_ ## _x(p_result, mctx, request); #define CALL_SECTION(_x) unlang_module_yield_to_section(p_result, \ request, \ @@ -63,7 +60,7 @@ RCSID("$Id$") RLM_MODULE_NOOP, \ resume_ ## _x, \ mod_signal, \ - eap_aka_sim_session) + talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t)) /* * Declare all state and guard functions to @@ -115,11 +112,9 @@ static size_t aka_sim_state_table_len = NUM_ELEMENTS(aka_sim_state_table); * * @param[in] mctx UNUSED. * @param[in] request The current request. - * @param[in] rctx the eap_session_t * @param[in] action to perform. */ -static void mod_signal(UNUSED module_ctx_t const *mctx, request_t *request, void *rctx, - fr_state_signal_t action) +static void mod_signal(module_ctx_t const *mctx, request_t *request, fr_state_signal_t action) { if (action != FR_SIGNAL_CANCEL) return; @@ -129,9 +124,9 @@ static void mod_signal(UNUSED module_ctx_t const *mctx, request_t *request, void * Remove data from the request to * avoid double free. */ - if (!fr_cond_assert(request_data_get(request, (void *)eap_aka_sim_state_machine_process, 0) == rctx)) return; + if (!fr_cond_assert(request_data_get(request, (void *)eap_aka_sim_state_machine_process, 0) == mctx->rctx)) return; - TALLOC_FREE(rctx); + talloc_free(mctx->rctx); } /** Warn the user that the rcode they provided is being ignored in this section @@ -187,9 +182,9 @@ do { \ */ static inline CC_HINT(always_inline) void state_set(request_t *request, eap_aka_sim_session_t *eap_aka_sim_session, - eap_aka_sim_state_t new_state) + module_method_t new_state) { - eap_aka_sim_state_t old_state = eap_aka_sim_session->state; + module_method_t old_state = eap_aka_sim_session->state; if (new_state != old_state) { RDEBUG2("Changed state %s -> %s", @@ -202,7 +197,7 @@ static inline CC_HINT(always_inline) void state_set(request_t *request, eap_aka_sim_session->state = new_state; } -#define STATE_SET(_new_state) state_set(request, eap_aka_sim_session, state_ ## _new_state) +#define STATE_SET(_new_state) state_set(request, talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t), state_ ## _new_state) /** Determine if we're after authentication * @@ -611,7 +606,7 @@ static void crypto_identity_set(request_t *request, eap_aka_sim_session_t *eap_a */ RESUME(store_session) { - eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(rctx, eap_aka_sim_session_t); + eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t); switch (unlang_interpret_stack_result(request)) { /* @@ -627,7 +622,7 @@ RESUME(store_session) pair_delete_request(attr_eap_aka_sim_next_reauth_id); - return eap_aka_sim_session->next(p_result, mctx, request, eap_aka_sim_session); + return eap_aka_sim_session->next(p_result, mctx, request); } /** Resume after 'store pseudonym { ... }' @@ -637,7 +632,7 @@ RESUME(store_session) RESUME(store_pseudonym) { eap_aka_sim_process_conf_t *inst = talloc_get_type_abort(mctx->instance, eap_aka_sim_process_conf_t); - eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(rctx, eap_aka_sim_session_t); + eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t); fr_pair_t *vp; fr_pair_t *new; @@ -762,7 +757,7 @@ RESUME(store_pseudonym) * We didn't store any fast-reauth data */ done: - return eap_aka_sim_session->next(p_result, mctx, request, eap_aka_sim_session); + return eap_aka_sim_session->next(p_result, mctx, request); } /** Implements a set of states for storing pseudonym and fastauth identities @@ -781,7 +776,7 @@ done: static unlang_action_t session_and_pseudonym_store(rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request, eap_aka_sim_session_t *eap_aka_sim_session, - eap_aka_sim_next_t next) + module_method_t next) { eap_aka_sim_process_conf_t *inst = talloc_get_type_abort(mctx->instance, eap_aka_sim_process_conf_t); fr_pair_t *vp; @@ -805,7 +800,7 @@ static unlang_action_t session_and_pseudonym_store(rlm_rcode_t *p_result, module RWDEBUG("Found empty Pseudonym-Id, and told not to generate one. " "Skipping store pseudonym { ... } section"); - return resume_store_pseudonym(p_result, mctx, request, eap_aka_sim_session); + return resume_store_pseudonym(p_result, mctx, request); } MEM(identity = talloc_array(vp, char, inst->ephemeral_id_length + 2)); @@ -837,7 +832,7 @@ static unlang_action_t session_and_pseudonym_store(rlm_rcode_t *p_result, module return CALL_SECTION(store_pseudonym); } - return resume_store_pseudonym(p_result, mctx, request, eap_aka_sim_session); + return resume_store_pseudonym(p_result, mctx, request); } /** Resume after 'clear session { ... }' @@ -845,11 +840,11 @@ static unlang_action_t session_and_pseudonym_store(rlm_rcode_t *p_result, module */ RESUME(clear_session) { - eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(rctx, eap_aka_sim_session_t); + eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t); pair_delete_request(attr_session_id); - return eap_aka_sim_session->next(p_result, mctx, request, eap_aka_sim_session); + return eap_aka_sim_session->next(p_result, mctx, request); } /** Resume after 'clear pseudonym { ... }' @@ -858,7 +853,7 @@ RESUME(clear_session) RESUME(clear_pseudonym) { eap_aka_sim_process_conf_t *inst = talloc_get_type_abort(mctx->instance, eap_aka_sim_process_conf_t); - eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(rctx, eap_aka_sim_session_t); + eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t); pair_delete_request(attr_eap_aka_sim_next_pseudonym); @@ -879,7 +874,7 @@ RESUME(clear_pseudonym) return CALL_SECTION(clear_session); } - return eap_aka_sim_session->next(p_result, mctx, request, eap_aka_sim_session); + return eap_aka_sim_session->next(p_result, mctx, request); } /** Implements a set of states for clearing out pseudonym and fastauth identities @@ -897,7 +892,7 @@ RESUME(clear_pseudonym) static unlang_action_t session_and_pseudonym_clear(rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request, eap_aka_sim_session_t *eap_aka_sim_session, - eap_aka_sim_next_t next) + module_method_t next) { eap_aka_sim_process_conf_t *inst = talloc_get_type_abort(mctx->instance, eap_aka_sim_process_conf_t); @@ -920,7 +915,7 @@ static unlang_action_t session_and_pseudonym_clear(rlm_rcode_t *p_result, module return CALL_SECTION(clear_pseudonym); } - return resume_clear_pseudonym(p_result, mctx, request, eap_aka_sim_session); + return resume_clear_pseudonym(p_result, mctx, request); } /** Export EAP-SIM/AKA['] attributes @@ -989,10 +984,11 @@ common_crypto_export(request_t *request, eap_aka_sim_session_t *eap_aka_sim_sess /** Called after 'store session { ... }' and 'store pseudonym { ... }' * */ -static unlang_action_t common_reauthentication_request_send(rlm_rcode_t *p_result, UNUSED module_ctx_t const *mctx, - request_t *request, - eap_aka_sim_session_t *eap_aka_sim_session) +static unlang_action_t common_reauthentication_request_send(rlm_rcode_t *p_result, + module_ctx_t const *mctx, request_t *request) { + eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t); + /* * Return reply attributes - AT_IV is handled automatically by the encoder */ @@ -1032,9 +1028,10 @@ static unlang_action_t common_reauthentication_request_send(rlm_rcode_t *p_resul /** Called after 'store session { ... }' and 'store pseudonym { ... }' * */ -static unlang_action_t aka_challenge_request_send(rlm_rcode_t *p_result, UNUSED module_ctx_t const *mctx, - request_t *request, eap_aka_sim_session_t *eap_aka_sim_session) +static unlang_action_t aka_challenge_request_send(rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request) { + eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t); + /* * Encode the packet - AT_IV is handled automatically * by the encoder. @@ -1061,9 +1058,9 @@ static unlang_action_t aka_challenge_request_send(rlm_rcode_t *p_result, UNUSED /** Called after 'store session { ... }' and 'store pseudonym { ... }' * */ -static unlang_action_t sim_challenge_request_send(rlm_rcode_t *p_result, UNUSED module_ctx_t const *mctx, - request_t *request, eap_aka_sim_session_t *eap_aka_sim_session) +static unlang_action_t sim_challenge_request_send(rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request) { + eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t); uint8_t sres_cat[AKA_SIM_VECTOR_GSM_SRES_SIZE * 3]; uint8_t *p = sres_cat; @@ -1189,7 +1186,7 @@ static int sim_start_nonce_mt_check(request_t *request, eap_aka_sim_session_t *e */ STATE(eap_failure) { - if (!fr_cond_assert(request && mctx && eap_aka_sim_session)) RETURN_MODULE_FAIL; /* unused args */ + if (!fr_cond_assert(request && mctx && mctx->rctx)) RETURN_MODULE_FAIL; /* unused args */ fr_assert(0); /* Should never actually be called */ @@ -1201,7 +1198,7 @@ STATE(eap_failure) */ RESUME(send_eap_failure) { - if (!fr_cond_assert(mctx && rctx)) RETURN_MODULE_FAIL; /* unused args */ + if (!fr_cond_assert(mctx && mctx->rctx)) RETURN_MODULE_FAIL; /* unused args */ SECTION_RCODE_IGNORED; @@ -1216,6 +1213,7 @@ RESUME(send_eap_failure) STATE_GUARD(eap_failure) { eap_aka_sim_process_conf_t *inst = talloc_get_type_abort(mctx->instance, eap_aka_sim_process_conf_t); + eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t); /* * Free anything we were going to send out... @@ -1243,8 +1241,6 @@ STATE_GUARD(eap_failure) */ RESUME(recv_common_failure_notification_ack) { - eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(rctx, eap_aka_sim_session_t); - SECTION_RCODE_IGNORED; /* @@ -1286,7 +1282,7 @@ STATE(common_failure_notification) RESUME(send_common_failure_notification) { fr_pair_t *vp, *notification_vp; - eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(rctx, + eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t); if (!fr_cond_assert(mctx)) RETURN_MODULE_FAIL; /* quiet unused warning */ @@ -1396,6 +1392,7 @@ RESUME(send_common_failure_notification) STATE_GUARD(common_failure_notification) { eap_aka_sim_process_conf_t *inst = talloc_get_type_abort(mctx->instance, eap_aka_sim_process_conf_t); + eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t); /* * If we're failing, then any identities @@ -1432,6 +1429,8 @@ STATE_GUARD(common_failure_notification) */ STATE(eap_success) { + eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t); + if (!fr_cond_assert(request && mctx && eap_aka_sim_session)) RETURN_MODULE_FAIL; /* unused args */ fr_assert(0); /* Should never actually be called */ @@ -1448,7 +1447,7 @@ STATE(eap_success) */ RESUME(send_eap_success) { - eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(rctx, eap_aka_sim_session_t); + eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t); uint8_t *p; RDEBUG2("Sending EAP-Success"); @@ -1513,8 +1512,6 @@ STATE_GUARD(eap_success) */ RESUME(recv_common_success_notification_ack) { - eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(rctx, eap_aka_sim_session_t); - SECTION_RCODE_IGNORED; /* @@ -1550,7 +1547,7 @@ STATE(common_success_notification) */ RESUME(send_common_success_notification) { - eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(rctx, eap_aka_sim_session_t); + eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t); fr_pair_t *vp; SECTION_RCODE_PROCESS; @@ -1622,8 +1619,6 @@ STATE_GUARD(common_success_notification) */ RESUME(recv_common_client_error) { - eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(rctx, eap_aka_sim_session_t); - SECTION_RCODE_IGNORED; return STATE_TRANSITION(eap_failure); @@ -1638,7 +1633,7 @@ RESUME(recv_common_client_error) */ RESUME(recv_common_reauthentication_response) { - eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(rctx, eap_aka_sim_session_t); + eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t); SECTION_RCODE_PROCESS; @@ -1705,6 +1700,7 @@ RESUME(recv_common_reauthentication_response) STATE(common_reauthentication) { eap_aka_sim_process_conf_t *inst = talloc_get_type_abort(mctx->instance, eap_aka_sim_process_conf_t); + eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t); fr_pair_t *subtype_vp = NULL; subtype_vp = fr_pair_find_by_da(&request->request_pairs, attr_eap_aka_sim_subtype, 0); @@ -1887,7 +1883,7 @@ static unlang_action_t common_reauthentication_request_compose(rlm_rcode_t *p_re */ RESUME(send_common_reauthentication_request) { - eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(rctx, eap_aka_sim_session_t); + eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t); switch (unlang_interpret_stack_result(request)) { /* @@ -1945,7 +1941,7 @@ RESUME(send_common_reauthentication_request) RESUME(load_pseudonym) { eap_aka_sim_process_conf_t *inst = talloc_get_type_abort(mctx->instance, eap_aka_sim_process_conf_t); - eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(rctx, eap_aka_sim_session_t); + eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t); pair_delete_request(attr_eap_aka_sim_next_reauth_id); @@ -1955,7 +1951,7 @@ RESUME(load_pseudonym) */ if (!inst->actions.load_pseudonym) { next_state: - return eap_aka_sim_session->next(p_result, mctx, request, eap_aka_sim_session); + return eap_aka_sim_session->next(p_result, mctx, request); } switch (unlang_interpret_stack_result(request)) { @@ -2006,7 +2002,7 @@ RESUME(load_pseudonym) RESUME(load_session) { eap_aka_sim_process_conf_t *inst = talloc_get_type_abort(mctx->instance, eap_aka_sim_process_conf_t); - eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(rctx, eap_aka_sim_session_t); + eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t); pair_delete_request(attr_session_id); @@ -2071,6 +2067,7 @@ RESUME(load_session) STATE_GUARD(common_reauthentication) { eap_aka_sim_process_conf_t *inst = talloc_get_type_abort(mctx->instance, eap_aka_sim_process_conf_t); + eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t); fr_pair_t *vp = NULL; STATE_SET(common_reauthentication); @@ -2099,7 +2096,7 @@ STATE_GUARD(common_reauthentication) RESUME(recv_aka_syncronization_failure) { eap_aka_sim_process_conf_t *inst = talloc_get_type_abort(mctx->instance, eap_aka_sim_process_conf_t); - eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(rctx, eap_aka_sim_session_t); + eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t); fr_pair_t *vp; SECTION_RCODE_PROCESS; @@ -2144,8 +2141,6 @@ RESUME(recv_aka_syncronization_failure) */ RESUME(recv_aka_authentication_reject) { - eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(rctx, eap_aka_sim_session_t); - SECTION_RCODE_IGNORED; /* @@ -2163,7 +2158,7 @@ RESUME(recv_aka_authentication_reject) */ RESUME(recv_aka_challenge_response) { - eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(rctx, eap_aka_sim_session_t); + eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t); fr_pair_t *vp = NULL; SECTION_RCODE_PROCESS; @@ -2240,6 +2235,7 @@ RESUME(recv_aka_challenge_response) STATE(aka_challenge) { eap_aka_sim_process_conf_t *inst = talloc_get_type_abort(mctx->instance, eap_aka_sim_process_conf_t); + eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t); fr_pair_t *subtype_vp = NULL; fr_pair_t *vp; @@ -2330,7 +2326,7 @@ STATE(aka_challenge) */ RESUME(send_aka_challenge_request) { - eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(rctx, eap_aka_sim_session_t); + eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t); fr_pair_t *vp; fr_aka_sim_vector_src_t src = AKA_SIM_VECTOR_SRC_AUTO; @@ -2474,6 +2470,7 @@ RESUME(send_aka_challenge_request) STATE_GUARD(aka_challenge) { eap_aka_sim_process_conf_t *inst = talloc_get_type_abort(mctx->instance, eap_aka_sim_process_conf_t); + eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t); fr_pair_t *vp; /* @@ -2542,7 +2539,7 @@ STATE_GUARD(aka_challenge) */ RESUME(recv_sim_challenge_response) { - eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(rctx, eap_aka_sim_session_t); + eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t); uint8_t sres_cat[AKA_SIM_VECTOR_GSM_SRES_SIZE * 3]; uint8_t *p = sres_cat; @@ -2591,7 +2588,8 @@ RESUME(recv_sim_challenge_response) STATE(sim_challenge) { eap_aka_sim_process_conf_t *inst = talloc_get_type_abort(mctx->instance, eap_aka_sim_process_conf_t); - fr_pair_t *subtype_vp = NULL; + eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t); + fr_pair_t *subtype_vp = NULL; subtype_vp = fr_pair_find_by_da(&request->request_pairs, attr_eap_aka_sim_subtype, 0); if (!subtype_vp) { @@ -2631,7 +2629,7 @@ STATE(sim_challenge) */ RESUME(send_sim_challenge_request) { - eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(rctx, eap_aka_sim_session_t); + eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t); fr_pair_t *vp; fr_aka_sim_vector_src_t src = AKA_SIM_VECTOR_SRC_AUTO; @@ -2712,6 +2710,7 @@ RESUME(send_sim_challenge_request) STATE_GUARD(sim_challenge) { eap_aka_sim_process_conf_t *inst = talloc_get_type_abort(mctx->instance, eap_aka_sim_process_conf_t); + eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t); fr_pair_t *vp; /* @@ -2746,6 +2745,8 @@ STATE_GUARD(sim_challenge) */ STATE_GUARD(common_challenge) { + eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t); + switch (eap_aka_sim_session->type) { case FR_EAP_METHOD_SIM: return STATE_TRANSITION(sim_challenge); @@ -2777,7 +2778,7 @@ STATE_GUARD(common_challenge) RESUME(recv_aka_identity_response) { eap_aka_sim_process_conf_t *inst = talloc_get_type_abort(mctx->instance, eap_aka_sim_process_conf_t); - eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(rctx, eap_aka_sim_session_t); + eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t); bool user_set_id_req; fr_pair_t *identity_type; @@ -2861,6 +2862,7 @@ RESUME(recv_aka_identity_response) STATE(aka_identity) { eap_aka_sim_process_conf_t *inst = talloc_get_type_abort(mctx->instance, eap_aka_sim_process_conf_t); + eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t); fr_pair_t *subtype_vp = NULL; subtype_vp = fr_pair_find_by_da(&request->request_pairs, attr_eap_aka_sim_subtype, 0); @@ -2965,7 +2967,7 @@ STATE(aka_identity) */ RESUME(send_aka_identity_request) { - eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(rctx, eap_aka_sim_session_t); + eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t); SECTION_RCODE_PROCESS; @@ -3004,7 +3006,8 @@ RESUME(send_aka_identity_request) */ STATE_GUARD(aka_identity) { - eap_aka_sim_process_conf_t *inst = talloc_get_type_abort(mctx->instance, eap_aka_sim_process_conf_t); + eap_aka_sim_process_conf_t *inst = talloc_get_type_abort(mctx->instance, eap_aka_sim_process_conf_t); + eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t); STATE_SET(aka_identity); @@ -3041,7 +3044,7 @@ STATE_GUARD(aka_identity) RESUME(recv_sim_start_response) { eap_aka_sim_process_conf_t *inst = talloc_get_type_abort(mctx->instance, eap_aka_sim_process_conf_t); - eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(rctx, eap_aka_sim_session_t); + eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t); bool user_set_id_req; fr_pair_t *identity_type; @@ -3162,6 +3165,7 @@ RESUME(recv_sim_start_response) STATE(sim_start) { eap_aka_sim_process_conf_t *inst = talloc_get_type_abort(mctx->instance, eap_aka_sim_process_conf_t); + eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t); fr_pair_t *subtype_vp = NULL; subtype_vp = fr_pair_find_by_da(&request->request_pairs, attr_eap_aka_sim_subtype, 0); @@ -3263,7 +3267,7 @@ STATE(sim_start) */ RESUME(send_sim_start) { - eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(rctx, eap_aka_sim_session_t); + eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t); fr_pair_t *vp; uint8_t *p, *end; @@ -3334,6 +3338,7 @@ RESUME(send_sim_start) STATE_GUARD(sim_start) { eap_aka_sim_process_conf_t *inst = talloc_get_type_abort(mctx->instance, eap_aka_sim_process_conf_t); + eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t); STATE_SET(sim_start); @@ -3355,6 +3360,8 @@ STATE_GUARD(sim_start) */ STATE_GUARD(common_identity) { + eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t); + switch (eap_aka_sim_session->type) { case FR_EAP_METHOD_SIM: return STATE_TRANSITION(sim_start); @@ -3383,7 +3390,7 @@ STATE_GUARD(common_identity) RESUME(recv_common_identity_response) { eap_aka_sim_process_conf_t *inst = talloc_get_type_abort(mctx->instance, eap_aka_sim_process_conf_t); - eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(rctx, eap_aka_sim_session_t); + eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t); fr_pair_t *eap_type, *method, *identity_type; fr_aka_sim_method_hint_t running, hinted; @@ -3538,6 +3545,7 @@ STATE(init) { eap_session_t *eap_session = eap_session_get(request->parent); eap_aka_sim_process_conf_t *inst = talloc_get_type_abort(mctx->instance, eap_aka_sim_process_conf_t); + eap_aka_sim_session_t *eap_aka_sim_session = talloc_get_type_abort(mctx->rctx, eap_aka_sim_session_t); fr_pair_t *vp; fr_aka_sim_id_type_t type; @@ -3599,10 +3607,13 @@ unlang_action_t eap_aka_sim_state_machine_process(rlm_rcode_t *p_result, module_ eap_aka_sim_session_t *eap_aka_sim_session = request_data_reference(request, (void *)eap_aka_sim_state_machine_process, 0); + module_ctx_t our_mctx = *mctx; + /* * A new EAP-SIM/AKA/AKA' session! */ if (!eap_aka_sim_session) { + /* * Must be allocated in the NULL ctx as this will * need to persist over multiple rounds of EAP. @@ -3626,10 +3637,18 @@ unlang_action_t eap_aka_sim_state_machine_process(rlm_rcode_t *p_result, module_ } eap_aka_sim_session->type = inst->type; - return state_init(p_result, mctx, request, eap_aka_sim_session); + our_mctx.rctx = eap_aka_sim_session; + + return state_init(p_result, &our_mctx, request); } + /* + * This function is called without a resume ctx as it's the + * entry point for each new round of EAP-AKA. + */ + our_mctx.rctx = eap_aka_sim_session; + if (!fr_cond_assert(eap_aka_sim_session->state)) RETURN_MODULE_FAIL; - return eap_aka_sim_session->state(p_result, mctx, request, eap_aka_sim_session); + return eap_aka_sim_session->state(p_result, &our_mctx, request); } diff --git a/src/lib/eap_aka_sim/state_machine.h b/src/lib/eap_aka_sim/state_machine.h index de5140baea0..285dd3d394c 100644 --- a/src/lib/eap_aka_sim/state_machine.h +++ b/src/lib/eap_aka_sim/state_machine.h @@ -34,28 +34,14 @@ extern "C" { typedef struct eap_aka_sim_session_s eap_aka_sim_session_t; -/** The state function which should receive any incoming packets - * - */ -typedef unlang_action_t (*eap_aka_sim_state_t)(rlm_rcode_t *p_result, module_ctx_t const *mctx, - request_t *request, eap_aka_sim_session_t *eap_aka_sim_session); - -/** The function to execute after common code has completed - * - * Mostly used to set functions to run after pseudonym and session - * loading/clearing/storing is complete. - */ -typedef unlang_action_t (*eap_aka_sim_next_t)(rlm_rcode_t *p_result, module_ctx_t const *mctx, - request_t *request, eap_aka_sim_session_t *eap_aka_sim_session); - struct eap_aka_sim_session_s { /* * State machine management */ - eap_aka_sim_state_t state; //!< The process function to run when we + module_method_t state; //!< The process function to run when we ///< receive the next round of EAP-SIM/AKA/AKA'. - eap_aka_sim_next_t next; //!< Resumption function to call after + module_method_t next; //!< Resumption function to call after ///< executing common code. eap_type_t type; //!< Either FR_TYPE_AKA, or FR_TYPE_AKA_PRIME. diff --git a/src/lib/server/process.h b/src/lib/server/process.h index b54cfcb5532..0917b6b8ad3 100644 --- a/src/lib/server/process.h +++ b/src/lib/server/process.h @@ -111,11 +111,11 @@ do { \ static fr_process_state_t const process_state[]; #define RECV(_x) static inline unlang_action_t recv_ ## _x(rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request) -#define SEND(_x) static inline unlang_action_t send_ ## _x(rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request, void *rctx) -#define RESUME(_x) static inline unlang_action_t resume_ ## _x(rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request, void *rctx) -#define SEND_NO_RCTX(_x) static inline unlang_action_t send_ ## _x(rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request, UNUSED void *rctx) -#define RESUME_NO_RCTX(_x) static inline unlang_action_t resume_ ## _x(rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request, UNUSED void *rctx) -#define RESUME_NO_MCTX(_x) static inline unlang_action_t resume_ ## _x(rlm_rcode_t *p_result, UNUSED module_ctx_t const *mctx, request_t *request, UNUSED void *rctx) +#define SEND(_x) static inline unlang_action_t send_ ## _x(rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request) +#define RESUME(_x) static inline unlang_action_t resume_ ## _x(rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request) +#define SEND_NO_RCTX(_x) static inline unlang_action_t send_ ## _x(rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request) +#define RESUME_NO_RCTX(_x) static inline unlang_action_t resume_ ## _x(rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request) +#define RESUME_NO_MCTX(_x) static inline unlang_action_t resume_ ## _x(rlm_rcode_t *p_result, UNUSED module_ctx_t const *mctx, request_t *request) /** Call a named recv function directly */ @@ -123,30 +123,30 @@ static fr_process_state_t const process_state[]; /** Call a named send function directly */ -#define CALL_SEND(_x) send_ ## _x(p_result, mctx, request, rctx) +#define CALL_SEND(_x) send_ ## _x(p_result, mctx, request) /** Call a named resume function directly */ -#define CALL_RESUME(_x) resume_ ## _x(p_result, mctx, request, rctx) +#define CALL_RESUME(_x) resume_ ## _x(p_result, mctx, request) /** Call the send function for the current state */ -#define CALL_SEND_STATE(_state) state->send(p_result, mctx, request, rctx) +#define CALL_SEND_STATE(_state) state->send(p_result, mctx, request) /** Set the current reply code, and call the send function for that state */ -#define CALL_SEND_TYPE(_x) call_send_type(process_state[(request->reply->code = _x)].send, p_result, mctx, request, rctx) +#define CALL_SEND_TYPE(_x) call_send_type(process_state[(request->reply->code = _x)].send, p_result, mctx, request) static inline unlang_action_t call_send_type(unlang_module_resume_t send, \ rlm_rcode_t *p_result, module_ctx_t const *mctx, - request_t *request, void *rctx) + request_t *request) { /* * Stupid hack to stop this being honoured * by send_generic. */ pair_delete_reply(attr_packet_type); - return send(p_result, mctx, request, rctx); + return send(p_result, mctx, request); } RECV(generic) @@ -175,7 +175,7 @@ RECV(generic) if (cs) RDEBUG("Running '%s %s' from file %s", cf_section_name1(cs), cf_section_name2(cs), cf_filename(cs)); return unlang_module_yield_to_section(p_result, request, cs, state->rcode, state->resume, - NULL, NULL); + NULL, mctx->rctx); } RESUME(recv_generic) @@ -204,7 +204,7 @@ RESUME(recv_generic) fr_assert(state->send != NULL); return unlang_module_yield_to_section(p_result, request, cs, state->rcode, state->send, - NULL, rctx); + NULL, mctx->rctx); } RESUME_NO_MCTX(recv_no_send) @@ -288,7 +288,7 @@ SEND(generic) return unlang_module_yield_to_section(p_result, request, cs, state->rcode, state->resume, - NULL, rctx); + NULL, mctx->rctx); } RESUME(send_generic) @@ -343,7 +343,7 @@ RESUME(send_generic) return unlang_module_yield_to_section(p_result, request, cs, state->rcode, state->send, - NULL, rctx); + NULL, mctx->rctx); } fr_assert(!state->packet_type[rcode] || (state->packet_type[rcode] == request->reply->code)); diff --git a/src/lib/unlang/module.c b/src/lib/unlang/module.c index f410b2703f4..f133d628614 100644 --- a/src/lib/unlang/module.c +++ b/src/lib/unlang/module.c @@ -71,7 +71,11 @@ static void unlang_event_fd_read_handler(UNUSED fr_event_list_t *el, int fd, UNU memcpy(&mutable_ctx, &ev->ctx, sizeof(mutable_ctx)); memcpy(&mutable_inst, &ev->inst, sizeof(mutable_inst)); - ev->fd_read(&(module_ctx_t){ .instance = mutable_inst, .thread = ev->thread }, ev->request, mutable_ctx, fd); + ev->fd_read(&(module_ctx_t){ + .instance = mutable_inst, + .thread = ev->thread, + .rctx = mutable_ctx }, + ev->request, fd); } /** Frees an unlang event, removing it from the request's event loop @@ -113,7 +117,11 @@ static void unlang_module_event_timeout_handler(UNUSED fr_event_list_t *el, fr_t memcpy(&mutable_ctx, &ev->ctx, sizeof(mutable_ctx)); memcpy(&mutable_inst, &ev->inst, sizeof(mutable_inst)); - ev->timeout(&(module_ctx_t){ .instance = mutable_inst, .thread = ev->thread }, ev->request, mutable_ctx, now); + ev->timeout(&(module_ctx_t){ + .instance = mutable_inst, + .thread = ev->thread, + .rctx = mutable_ctx + }, ev->request, now); talloc_free(ev); } @@ -209,7 +217,11 @@ static void unlang_event_fd_write_handler(UNUSED fr_event_list_t *el, int fd, UN memcpy(&mutable_ctx, &ev->ctx, sizeof(mutable_ctx)); memcpy(&mutable_inst, &ev->inst, sizeof(mutable_inst)); - ev->fd_write(&(module_ctx_t){ .instance = mutable_inst, .thread = ev->thread }, ev->request, mutable_ctx, fd); + ev->fd_write(&(module_ctx_t){ + .instance = mutable_inst, + .thread = ev->thread, + .rctx = mutable_ctx }, + ev->request, fd); } /** Call the callback registered for an I/O error event @@ -232,7 +244,11 @@ static void unlang_event_fd_error_handler(UNUSED fr_event_list_t *el, int fd, memcpy(&mutable_ctx, &ev->ctx, sizeof(mutable_ctx)); memcpy(&mutable_inst, &ev->inst, sizeof(mutable_inst)); - ev->fd_error(&(module_ctx_t){ .instance = mutable_inst, .thread = ev->thread }, ev->request, mutable_ctx, fd); + ev->fd_error(&(module_ctx_t){ + .instance = mutable_inst, + .thread = ev->thread, + .rctx = mutable_ctx + }, ev->request, fd); } @@ -553,8 +569,9 @@ unlang_action_t unlang_module_yield_to_section(rlm_rcode_t *p_result, return resume(p_result, &(module_ctx_t){ .instance = mc->instance->dl_inst->data, - .thread = module_thread(mc->instance)->data - }, request, rctx); + .thread = module_thread(mc->instance)->data, + .rctx = rctx + }, request); } /* @@ -649,9 +666,10 @@ static void unlang_module_signal(request_t *request, unlang_stack_frame_t *frame safe_lock(mc->instance); state->signal(&(module_ctx_t){ .instance = mc->instance->dl_inst->data, - .thread = state->thread->data + .thread = state->thread->data, + .rctx = state->rctx }, - request, state->rctx, action); + request, action); safe_unlock(mc->instance); request->module = caller; @@ -746,8 +764,9 @@ static unlang_action_t unlang_module_resume(rlm_rcode_t *p_result, request_t *re ua = resume(&state->rcode, &(module_ctx_t){ .instance = mc->instance->dl_inst->data, - .thread = state->thread->data - }, request, state->rctx); + .thread = state->thread->data, + .rctx = state->rctx, + }, request); safe_unlock(mc->instance); request->rcode = state->rcode; diff --git a/src/lib/unlang/module.h b/src/lib/unlang/module.h index 0a0bcd58369..a35bc42ed34 100644 --- a/src/lib/unlang/module.h +++ b/src/lib/unlang/module.h @@ -45,11 +45,10 @@ extern "C" { * * @param[in] mctx calling context for the module. * Contains global, thread-specific, and call-specific data for a module. - * @param[in] rctx a local context for the callback. * @param[in] request the request. * @param[in] fired the time the timeout event actually fired. */ -typedef void (*unlang_module_timeout_t)(module_ctx_t const *mctx, request_t *request, void *rctx, fr_time_t fired); +typedef void (*unlang_module_timeout_t)(module_ctx_t const *mctx, request_t *request, fr_time_t fired); /** A callback when the FD is ready for reading * @@ -61,10 +60,9 @@ typedef void (*unlang_module_timeout_t)(module_ctx_t const *mctx, request_t *req * @param[in] mctx calling context for the module. * Contains global, thread-specific, and call-specific data for a module. * @param[in] request the current request. - * @param[in] rctx a local context for the callback. * @param[in] fd the file descriptor. */ -typedef void (*unlang_module_fd_event_t)(module_ctx_t const *mctx, request_t *request, void *rctx, int fd); +typedef void (*unlang_module_fd_event_t)(module_ctx_t const *mctx, request_t *request, int fd); /** A callback for when the request is resumed. * @@ -74,11 +72,9 @@ typedef void (*unlang_module_fd_event_t)(module_ctx_t const *mctx, request_t *re * @param[in] mctx calling context for the module. * Contains global, thread-specific, and call-specific data for a module. * @param[in] request the current request. - * @param[in] rctx a local context for the callback. * @return an instruction for the interpreter. */ -typedef unlang_action_t (*unlang_module_resume_t)(rlm_rcode_t *p_result, module_ctx_t const *mctx, - request_t *request, void *rctx); +typedef unlang_action_t (*unlang_module_resume_t)(rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request); /** A callback when the request gets a fr_state_signal_t. * @@ -89,12 +85,10 @@ typedef unlang_action_t (*unlang_module_resume_t)(rlm_rcode_t *p_result, module_ * * @param[in] mctx calling context for the module. * Contains global, thread-specific, and call-specific data for a module. - * @param[in] rctx Resume ctx for the callback. * @param[in] request The current request. * @param[in] action which is signalling the request. */ -typedef void (*unlang_module_signal_t)(module_ctx_t const *mctx, request_t *request, - void *rctx, fr_state_signal_t action); +typedef void (*unlang_module_signal_t)(module_ctx_t const *mctx, request_t *request, fr_state_signal_t action); int unlang_module_timeout_add(request_t *request, unlang_module_timeout_t callback, void const *ctx, fr_time_t when); diff --git a/src/modules/rlm_delay/rlm_delay.c b/src/modules/rlm_delay/rlm_delay.c index c19a9fe2c71..65cfbeb4782 100644 --- a/src/modules/rlm_delay/rlm_delay.c +++ b/src/modules/rlm_delay/rlm_delay.c @@ -51,9 +51,9 @@ static const CONF_PARSER module_config[] = { * * Marks the request as resumable, and prints the delayed delay time. */ -static void _delay_done(UNUSED module_ctx_t const *mctx, request_t *request, void *rctx, fr_time_t fired) +static void _delay_done(module_ctx_t const *mctx, request_t *request, fr_time_t fired) { - fr_time_t *yielded = talloc_get_type_abort(rctx, fr_time_t); + fr_time_t *yielded = talloc_get_type_abort(mctx->rctx, fr_time_t); RDEBUG2("Delay done"); @@ -116,10 +116,9 @@ static int delay_add(request_t *request, fr_time_t *resume_at, fr_time_t now, /** Called resume_at the delay is complete, and we're running from the interpreter * */ -static unlang_action_t mod_delay_return(rlm_rcode_t *p_result, UNUSED module_ctx_t const *mctx, - request_t *request, void *rctx) +static unlang_action_t mod_delay_return(rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request) { - fr_time_t *yielded = talloc_get_type_abort(rctx, fr_time_t); + fr_time_t *yielded = talloc_get_type_abort(mctx->rctx, fr_time_t); /* * Print how long the delay *really* was. @@ -130,14 +129,13 @@ static unlang_action_t mod_delay_return(rlm_rcode_t *p_result, UNUSED module_ctx RETURN_MODULE_OK; } -static void mod_delay_cancel(UNUSED module_ctx_t const *mctx, request_t *request, void *rctx, - fr_state_signal_t action) +static void mod_delay_cancel(module_ctx_t const *mctx, request_t *request, fr_state_signal_t action) { if (action != FR_SIGNAL_CANCEL) return; RDEBUG2("Cancelling delay"); - (void) unlang_module_timeout_delete(request, rctx); + (void) unlang_module_timeout_delete(request, mctx->rctx); } static unlang_action_t CC_HINT(nonnull) mod_delay(rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request) diff --git a/src/modules/rlm_dhcpv4/rlm_dhcpv4.c b/src/modules/rlm_dhcpv4/rlm_dhcpv4.c index 45486841b99..ce1197d175f 100644 --- a/src/modules/rlm_dhcpv4/rlm_dhcpv4.c +++ b/src/modules/rlm_dhcpv4/rlm_dhcpv4.c @@ -187,10 +187,9 @@ static int mod_thread_instantiate(CONF_SECTION const *cs, void *instance, fr_eve return 0; } -static unlang_action_t dhcpv4_resume(rlm_rcode_t *p_result, UNUSED module_ctx_t const *mctx, - UNUSED request_t *request, void *rctx) +static unlang_action_t dhcpv4_resume(rlm_rcode_t *p_result, module_ctx_t const *mctx, UNUSED request_t *request) { - rlm_dhcpv4_delay_t *d = talloc_get_type_abort(rctx, rlm_dhcpv4_delay_t); + rlm_dhcpv4_delay_t *d = talloc_get_type_abort(mctx->rctx, rlm_dhcpv4_delay_t); if (!d->sent) { talloc_free(d); diff --git a/src/modules/rlm_eap/rlm_eap.c b/src/modules/rlm_eap/rlm_eap.c index feef54d62ff..0268ff16a27 100644 --- a/src/modules/rlm_eap/rlm_eap.c +++ b/src/modules/rlm_eap/rlm_eap.c @@ -350,11 +350,9 @@ static eap_type_t eap_process_nak(module_ctx_t const *mctx, request_t *request, * * @param[in] mctx module calling ctx. * @param[in] request The current request. - * @param[in] rctx the eap_session_t * @param[in] action to perform. */ -static void mod_authenticate_cancel(UNUSED module_ctx_t const *mctx, request_t *request, void *rctx, - fr_state_signal_t action) +static void mod_authenticate_cancel(module_ctx_t const *mctx, request_t *request, fr_state_signal_t action) { eap_session_t *eap_session; @@ -362,7 +360,7 @@ static void mod_authenticate_cancel(UNUSED module_ctx_t const *mctx, request_t * RDEBUG2("Request cancelled - Destroying EAP-Session"); - eap_session = talloc_get_type_abort(rctx, eap_session_t); + eap_session = talloc_get_type_abort(mctx->rctx, eap_session_t); TALLOC_FREE(eap_session->subrequest); @@ -469,13 +467,12 @@ finish: * @param[out] p_result The result of the operation. * @param[in] mctx module calling ctx. * @param[in] request the current request. - * @param[in] rctx the eap_session_t. * @return The result of this round of authentication. */ static unlang_action_t mod_authenticate_result_async(rlm_rcode_t *p_result, module_ctx_t const *mctx, - request_t *request, void *rctx) + request_t *request) { - eap_session_t *eap_session = talloc_get_type_abort(rctx, eap_session_t); + eap_session_t *eap_session = talloc_get_type_abort(mctx->rctx, eap_session_t); return mod_authenticate_result(p_result, mctx, request, eap_session, eap_session->submodule_rcode); } diff --git a/src/modules/rlm_eap/types/rlm_eap_fast/rlm_eap_fast.c b/src/modules/rlm_eap/types/rlm_eap_fast/rlm_eap_fast.c index 3db6e8813ee..007568a72d0 100644 --- a/src/modules/rlm_eap/types/rlm_eap_fast/rlm_eap_fast.c +++ b/src/modules/rlm_eap/types/rlm_eap_fast/rlm_eap_fast.c @@ -381,10 +381,9 @@ error: return 1; } -static unlang_action_t mod_handshake_resume(rlm_rcode_t *p_result, UNUSED module_ctx_t const *mctx, - request_t *request, void *rctx) +static unlang_action_t mod_handshake_resume(rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request) { - eap_session_t *eap_session = talloc_get_type_abort(rctx, eap_session_t); + eap_session_t *eap_session = talloc_get_type_abort(mctx->rctx, eap_session_t); eap_tls_session_t *eap_tls_session = talloc_get_type_abort(eap_session->opaque, eap_tls_session_t); fr_tls_session_t *tls_session = eap_tls_session->tls_session; diff --git a/src/modules/rlm_eap/types/rlm_eap_peap/rlm_eap_peap.c b/src/modules/rlm_eap/types/rlm_eap_peap/rlm_eap_peap.c index 12baf2bc704..f42c0ba0ed9 100644 --- a/src/modules/rlm_eap/types/rlm_eap_peap/rlm_eap_peap.c +++ b/src/modules/rlm_eap/types/rlm_eap_peap/rlm_eap_peap.c @@ -126,14 +126,13 @@ static peap_tunnel_t *peap_alloc(TALLOC_CTX *ctx, rlm_eap_peap_t *inst) return t; } -static unlang_action_t mod_handshake_resume(rlm_rcode_t *p_result, module_ctx_t const *mctx, - request_t *request, void *rctx) +static unlang_action_t mod_handshake_resume(rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request) { rlm_eap_peap_t *inst = talloc_get_type(mctx->instance, rlm_eap_peap_t); rlm_rcode_t rcode; - eap_session_t *eap_session = talloc_get_type_abort(rctx, eap_session_t); + eap_session_t *eap_session = talloc_get_type_abort(mctx->rctx, eap_session_t); eap_tls_session_t *eap_tls_session = talloc_get_type_abort(eap_session->opaque, eap_tls_session_t); fr_tls_session_t *tls_session = eap_tls_session->tls_session; peap_tunnel_t *peap = talloc_get_type_abort(tls_session->opaque, peap_tunnel_t); diff --git a/src/modules/rlm_eap/types/rlm_eap_tls/rlm_eap_tls.c b/src/modules/rlm_eap/types/rlm_eap_tls/rlm_eap_tls.c index 4bf3bf0602f..baae5d03807 100644 --- a/src/modules/rlm_eap/types/rlm_eap_tls/rlm_eap_tls.c +++ b/src/modules/rlm_eap/types/rlm_eap_tls/rlm_eap_tls.c @@ -71,15 +71,14 @@ fr_dict_attr_autoload_t rlm_eap_tls_dict_attr[] = { }; static unlang_action_t mod_handshake_done(rlm_rcode_t *p_result, UNUSED module_ctx_t const *mctx, - UNUSED request_t *request, UNUSED void *rctx) + UNUSED request_t *request) { RETURN_MODULE_OK; } -static unlang_action_t mod_handshake_resume(rlm_rcode_t *p_result, UNUSED module_ctx_t const *mctx, - request_t *request, void *rctx) +static unlang_action_t mod_handshake_resume(rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request) { - eap_session_t *eap_session = talloc_get_type_abort(rctx, eap_session_t); + eap_session_t *eap_session = talloc_get_type_abort(mctx->rctx, eap_session_t); eap_tls_session_t *eap_tls_session = talloc_get_type_abort(eap_session->opaque, eap_tls_session_t); fr_tls_session_t *tls_session = eap_tls_session->tls_session; @@ -111,7 +110,7 @@ static unlang_action_t mod_handshake_resume(rlm_rcode_t *p_result, UNUSED module * Result is always OK, even if we fail to persist the * session data. */ - unlang_module_yield(request, mod_handshake_done, NULL, NULL); + unlang_module_yield(request, mod_handshake_done, NULL, mctx->rctx); /* * Write the session to the session cache * diff --git a/src/modules/rlm_eap/types/rlm_eap_ttls/rlm_eap_ttls.c b/src/modules/rlm_eap/types/rlm_eap_ttls/rlm_eap_ttls.c index e68ab039139..2ed0908e735 100644 --- a/src/modules/rlm_eap/types/rlm_eap_ttls/rlm_eap_ttls.c +++ b/src/modules/rlm_eap/types/rlm_eap_ttls/rlm_eap_ttls.c @@ -130,10 +130,9 @@ static ttls_tunnel_t *ttls_alloc(TALLOC_CTX *ctx, rlm_eap_ttls_t *inst) return t; } -static unlang_action_t mod_handshake_resume(rlm_rcode_t *p_result, UNUSED module_ctx_t const *mctx, - request_t *request, void *rctx) +static unlang_action_t mod_handshake_resume(rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request) { - eap_session_t *eap_session = talloc_get_type_abort(rctx, eap_session_t); + eap_session_t *eap_session = talloc_get_type_abort(mctx->rctx, eap_session_t); eap_tls_session_t *eap_tls_session = talloc_get_type_abort(eap_session->opaque, eap_tls_session_t); fr_tls_session_t *tls_session = eap_tls_session->tls_session; diff --git a/src/modules/rlm_exec/rlm_exec.c b/src/modules/rlm_exec/rlm_exec.c index e2baf3d717b..908496ed5da 100644 --- a/src/modules/rlm_exec/rlm_exec.c +++ b/src/modules/rlm_exec/rlm_exec.c @@ -280,10 +280,10 @@ static int mod_instantiate(void *instance, CONF_SECTION *conf) * */ static unlang_action_t mod_exec_nowait_resume(rlm_rcode_t *p_result, module_ctx_t const *mctx, - request_t *request, void *rctx) + request_t *request) { rlm_exec_t const *inst = talloc_get_type_abort_const(mctx->instance, rlm_exec_t); - fr_value_box_list_t *box = talloc_get_type_abort(rctx, fr_value_box_list_t); + fr_value_box_list_t *box = talloc_get_type_abort(mctx->rctx, fr_value_box_list_t); fr_pair_list_t *env_pairs = NULL; /* @@ -367,12 +367,11 @@ static rlm_rcode_t rlm_exec_status2rcode(request_t *request, fr_value_box_t *box return rcode; } -static unlang_action_t mod_exec_wait_resume(rlm_rcode_t *p_result, module_ctx_t const *mctx, - request_t *request, void *rctx) +static unlang_action_t mod_exec_wait_resume(rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request) { int status; - rlm_exec_ctx_t *m = talloc_get_type_abort(rctx, rlm_exec_ctx_t); rlm_exec_t const *inst = talloc_get_type_abort_const(mctx->instance, rlm_exec_t); + rlm_exec_ctx_t *m = talloc_get_type_abort(mctx->rctx, rlm_exec_ctx_t); rlm_rcode_t rcode; /* @@ -445,7 +444,8 @@ static unlang_action_t CC_HINT(nonnull) mod_exec_dispatch(rlm_rcode_t *p_result, fr_value_box_list_t *box = talloc_zero(ctx, fr_value_box_list_t); fr_value_box_list_init(box); - return unlang_module_yield_to_xlat(request, box, request, tmpl_xlat(inst->tmpl), mod_exec_nowait_resume, NULL, box); + return unlang_module_yield_to_xlat(request, box, request, tmpl_xlat(inst->tmpl), + mod_exec_nowait_resume, NULL, box); } /* diff --git a/src/modules/rlm_imap/rlm_imap.c b/src/modules/rlm_imap/rlm_imap.c index 0724681166d..a1ba17a1f30 100644 --- a/src/modules/rlm_imap/rlm_imap.c +++ b/src/modules/rlm_imap/rlm_imap.c @@ -73,10 +73,10 @@ static const CONF_PARSER module_config[] = { * If it wasn't we returns REJECT, if it was we returns OK */ static unlang_action_t CC_HINT(nonnull) mod_authenticate_resume(rlm_rcode_t *p_result, module_ctx_t const *mctx, - request_t *request, void *rctx) + request_t *request) { rlm_imap_t const *inst = talloc_get_type_abort_const(mctx->instance, rlm_imap_t); - fr_curl_io_request_t *randle = rctx; + fr_curl_io_request_t *randle = talloc_get_type_abort(mctx->rctx, fr_curl_io_request_t); fr_curl_tls_t const *tls; long curl_out; long curl_out_valid; diff --git a/src/modules/rlm_radius/rlm_radius.c b/src/modules/rlm_radius/rlm_radius.c index bff32ca0a6f..493ea6d0682 100644 --- a/src/modules/rlm_radius/rlm_radius.c +++ b/src/modules/rlm_radius/rlm_radius.c @@ -363,7 +363,7 @@ static int status_check_update_parse(TALLOC_CTX *ctx, void *out, UNUSED void *pa } -static void mod_radius_signal(module_ctx_t const *mctx, request_t *request, void *rctx, fr_state_signal_t action) +static void mod_radius_signal(module_ctx_t const *mctx, request_t *request, fr_state_signal_t action) { rlm_radius_t const *inst = talloc_get_type_abort_const(mctx->instance, rlm_radius_t); rlm_radius_thread_t *t = talloc_get_type_abort(mctx->thread, rlm_radius_thread_t); @@ -377,19 +377,28 @@ static void mod_radius_signal(module_ctx_t const *mctx, request_t *request, void if (!inst->io->signal) return; - inst->io->signal(&(module_ctx_t){.instance = inst->io_instance, .thread = t->io_thread }, request, rctx, action); + inst->io->signal(&(module_ctx_t){ + .instance = inst->io_instance, + .thread = t->io_thread, + .rctx = mctx->rctx + }, request, action); } /** Continue after unlang_interpret_mark_runnable() * */ -static unlang_action_t mod_radius_resume(rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request, void *ctx) +static unlang_action_t mod_radius_resume(rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request) { rlm_radius_t const *inst = talloc_get_type_abort_const(mctx->instance, rlm_radius_t); rlm_radius_thread_t *t = talloc_get_type_abort(mctx->thread, rlm_radius_thread_t); - return inst->io->resume(p_result, &(module_ctx_t){.instance = inst->io_instance, .thread = t->io_thread }, request, ctx); + return inst->io->resume(p_result, + &(module_ctx_t){ + .instance = inst->io_instance, + .thread = t->io_thread, + .rctx = mctx->rctx + }, request); } /** Do any RADIUS-layer fixups for proxying. diff --git a/src/modules/rlm_radius/rlm_radius_udp.c b/src/modules/rlm_radius/rlm_radius_udp.c index 8dbb7538ff1..b5d51e372d0 100644 --- a/src/modules/rlm_radius/rlm_radius_udp.c +++ b/src/modules/rlm_radius/rlm_radius_udp.c @@ -2644,21 +2644,20 @@ static void request_free(UNUSED request_t *request, void *preq_to_free, UNUSED v /** Resume execution of the request, returning the rcode set during trunk execution * */ -static unlang_action_t mod_resume(rlm_rcode_t *p_result, UNUSED module_ctx_t const *mctx, UNUSED request_t *request, void *rctx) +static unlang_action_t mod_resume(rlm_rcode_t *p_result, module_ctx_t const *mctx, UNUSED request_t *request) { - udp_result_t *r = talloc_get_type_abort(rctx, udp_result_t); + udp_result_t *r = talloc_get_type_abort(mctx->rctx, udp_result_t); rlm_rcode_t rcode = r->rcode; - talloc_free(rctx); + talloc_free(r); RETURN_MODULE_RCODE(rcode); } -static void mod_signal(module_ctx_t const *mctx, UNUSED request_t *request, - void *rctx, fr_state_signal_t action) +static void mod_signal(module_ctx_t const *mctx, UNUSED request_t *request, fr_state_signal_t action) { udp_thread_t *t = talloc_get_type_abort(mctx->thread, udp_thread_t); - udp_result_t *r = talloc_get_type_abort(rctx, udp_result_t); + udp_result_t *r = talloc_get_type_abort(mctx->rctx, udp_result_t); /* * If we don't have a treq associated with the @@ -2671,7 +2670,7 @@ static void mod_signal(module_ctx_t const *mctx, UNUSED request_t *request, * (don't use it). */ if (!r->treq) { - talloc_free(rctx); + talloc_free(r); return; } diff --git a/src/modules/rlm_rest/io.c b/src/modules/rlm_rest/io.c index cb70300a050..72e203de40c 100644 --- a/src/modules/rlm_rest/io.c +++ b/src/modules/rlm_rest/io.c @@ -30,9 +30,9 @@ * If we're signalled that the request has been cancelled (FR_SIGNAL_CANCEL). * Cleanup any pending state and release the connection handle back into the pool. */ -void rest_io_module_action(module_ctx_t const *mctx, request_t *request, void *rctx, fr_state_signal_t action) +void rest_io_module_action(module_ctx_t const *mctx, request_t *request, fr_state_signal_t action) { - fr_curl_io_request_t *randle = talloc_get_type_abort(rctx, fr_curl_io_request_t); + fr_curl_io_request_t *randle = talloc_get_type_abort(mctx->rctx, fr_curl_io_request_t); rlm_rest_thread_t *t = talloc_get_type_abort(mctx->thread, rlm_rest_thread_t); CURLMcode ret; @@ -65,5 +65,5 @@ void rest_io_xlat_signal(request_t *request, UNUSED void *instance, void *thread rlm_rest_xlat_rctx_t *our_rctx = talloc_get_type_abort(rctx, rlm_rest_xlat_rctx_t); fr_curl_io_request_t *randle = talloc_get_type_abort(our_rctx->handle, fr_curl_io_request_t); - rest_io_module_action(&(module_ctx_t){ .instance = mod_inst, .thread = t }, request, randle, action); + rest_io_module_action(&(module_ctx_t){ .instance = mod_inst, .thread = t, .rctx = randle }, request, action); } diff --git a/src/modules/rlm_rest/rest.h b/src/modules/rlm_rest/rest.h index e2e4a84a6e4..4069e488de4 100644 --- a/src/modules/rlm_rest/rest.h +++ b/src/modules/rlm_rest/rest.h @@ -320,5 +320,5 @@ ssize_t rest_uri_host_unescape(char **out, UNUSED rlm_rest_t const *mod_inst, re /* * Async IO helpers */ -void rest_io_module_action(module_ctx_t const *mctx, request_t *request, void *rctx, fr_state_signal_t action); +void rest_io_module_action(module_ctx_t const *mctx, request_t *request, fr_state_signal_t action); void rest_io_xlat_signal(request_t *request, void *xlat_inst, void *xlat_thread_inst, void *rctx, fr_state_signal_t action); diff --git a/src/modules/rlm_rest/rlm_rest.c b/src/modules/rlm_rest/rlm_rest.c index 8cd5520e75f..bbe844dc876 100644 --- a/src/modules/rlm_rest/rlm_rest.c +++ b/src/modules/rlm_rest/rlm_rest.c @@ -518,12 +518,12 @@ static xlat_action_t rest_xlat(UNUSED TALLOC_CTX *ctx, UNUSED fr_dcursor_t *out, return unlang_xlat_yield(request, rest_xlat_resume, rest_io_xlat_signal, rctx); } -static unlang_action_t mod_authorize_result(rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request, void *rctx) +static unlang_action_t mod_authorize_result(rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request) { rlm_rest_t const *inst = talloc_get_type_abort_const(mctx->instance, rlm_rest_t); rlm_rest_thread_t *t = talloc_get_type_abort(mctx->thread, rlm_rest_thread_t); rlm_rest_section_t const *section = &inst->authenticate; - fr_curl_io_request_t *handle = talloc_get_type_abort(rctx, fr_curl_io_request_t); + fr_curl_io_request_t *handle = talloc_get_type_abort(mctx->rctx, fr_curl_io_request_t); int hcode; rlm_rcode_t rcode = RLM_MODULE_OK; @@ -633,12 +633,12 @@ static unlang_action_t CC_HINT(nonnull) mod_authorize(rlm_rcode_t *p_result, mod } static unlang_action_t mod_authenticate_result(rlm_rcode_t *p_result, - module_ctx_t const *mctx, request_t *request, void *rctx) + module_ctx_t const *mctx, request_t *request) { rlm_rest_t const *inst = talloc_get_type_abort_const(mctx->instance, rlm_rest_t); rlm_rest_thread_t *t = talloc_get_type_abort(mctx->thread, rlm_rest_thread_t); rlm_rest_section_t const *section = &inst->authenticate; - fr_curl_io_request_t *handle = talloc_get_type_abort(rctx, fr_curl_io_request_t); + fr_curl_io_request_t *handle = talloc_get_type_abort(mctx->rctx, fr_curl_io_request_t); int hcode; int rcode = RLM_MODULE_OK; @@ -782,13 +782,12 @@ static unlang_action_t CC_HINT(nonnull) mod_authenticate(rlm_rcode_t *p_result, return unlang_module_yield(request, mod_authenticate_result, NULL, handle); } -static unlang_action_t mod_accounting_result(rlm_rcode_t *p_result, - module_ctx_t const *mctx, request_t *request, void *rctx) +static unlang_action_t mod_accounting_result(rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request) { rlm_rest_t const *inst = talloc_get_type_abort_const(mctx->instance, rlm_rest_t); rlm_rest_thread_t *t = talloc_get_type_abort(mctx->thread, rlm_rest_thread_t); rlm_rest_section_t const *section = &inst->authenticate; - fr_curl_io_request_t *handle = rctx; + fr_curl_io_request_t *handle = talloc_get_type_abort(mctx->rctx, fr_curl_io_request_t); int hcode; int rcode = RLM_MODULE_OK; @@ -862,13 +861,12 @@ static unlang_action_t CC_HINT(nonnull) mod_accounting(rlm_rcode_t *p_result, mo return unlang_module_yield(request, mod_accounting_result, NULL, handle); } -static unlang_action_t mod_post_auth_result(rlm_rcode_t *p_result, module_ctx_t const *mctx, - request_t *request, void *rctx) +static unlang_action_t mod_post_auth_result(rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request) { rlm_rest_t const *inst = talloc_get_type_abort_const(mctx->instance, rlm_rest_t); rlm_rest_thread_t *t = talloc_get_type_abort(mctx->thread, rlm_rest_thread_t); rlm_rest_section_t const *section = &inst->authenticate; - fr_curl_io_request_t *handle = rctx; + fr_curl_io_request_t *handle = talloc_get_type_abort(mctx->rctx, fr_curl_io_request_t); int hcode; int rcode = RLM_MODULE_OK; diff --git a/src/modules/rlm_smtp/rlm_smtp.c b/src/modules/rlm_smtp/rlm_smtp.c index fd3e1bf999f..f3130c32b5d 100644 --- a/src/modules/rlm_smtp/rlm_smtp.c +++ b/src/modules/rlm_smtp/rlm_smtp.c @@ -97,7 +97,7 @@ typedef struct { fr_time_t time; char time_str[60]; curl_mime *mime; -} fr_mail_ctx; +} fr_mail_ctx_t; /* * Used to ensure that only strings are being set to the tmpl_t ** output @@ -194,9 +194,9 @@ static const CONF_PARSER module_config[] = { /* * Adds every element associated with a dict_attr to a curl_slist */ -static int da_to_slist(fr_mail_ctx *uctx, struct curl_slist **out, const fr_dict_attr_t *dict_attr) +static int da_to_slist(fr_mail_ctx_t *uctx, struct curl_slist **out, const fr_dict_attr_t *dict_attr) { - request_t *request = ((fr_mail_ctx *)uctx)->request; + request_t *request = ((fr_mail_ctx_t *)uctx)->request; fr_pair_t *vp; int elems_added = 0; @@ -217,9 +217,9 @@ static int da_to_slist(fr_mail_ctx *uctx, struct curl_slist **out, const fr_dict /* * Takes a TMPL_TYPE_ATTR and adds it to an slist */ -static int tmpl_attr_to_slist(fr_mail_ctx *uctx, struct curl_slist **out, tmpl_t * const tmpl) +static int tmpl_attr_to_slist(fr_mail_ctx_t *uctx, struct curl_slist **out, tmpl_t * const tmpl) { - request_t *request = ((fr_mail_ctx *)uctx)->request; + request_t *request = ((fr_mail_ctx_t *)uctx)->request; fr_pair_t *vp; tmpl_pair_cursor_ctx_t cc; int count = 0; @@ -239,7 +239,7 @@ static int tmpl_attr_to_slist(fr_mail_ctx *uctx, struct curl_slist **out, tmpl_t /* * Parse through an array of tmpl * elements and add them to an slist */ -static int tmpl_arr_to_slist (rlm_smtp_thread_t *t, fr_mail_ctx *uctx, struct curl_slist **out, tmpl_t ** const tmpl) +static int tmpl_arr_to_slist (rlm_smtp_thread_t *t, fr_mail_ctx_t *uctx, struct curl_slist **out, tmpl_t ** const tmpl) { request_t *request = uctx->request; int count = 0; @@ -266,7 +266,7 @@ static int tmpl_arr_to_slist (rlm_smtp_thread_t *t, fr_mail_ctx *uctx, struct cu /* * Adds every element associated with a tmpl_attr to an sbuff */ -static ssize_t tmpl_attr_to_sbuff (fr_mail_ctx *uctx, fr_sbuff_t *out, tmpl_t const *vpt, char const *delimeter) +static ssize_t tmpl_attr_to_sbuff (fr_mail_ctx_t *uctx, fr_sbuff_t *out, tmpl_t const *vpt, char const *delimeter) { fr_pair_t *vp; tmpl_pair_cursor_ctx_t cc; @@ -290,7 +290,7 @@ static ssize_t tmpl_attr_to_sbuff (fr_mail_ctx *uctx, fr_sbuff_t *out, tmpl_t co /* * Adds every value in a dict_attr to a curl_slist as a comma separated list with a preposition */ -static int tmpl_arr_to_header (rlm_smtp_thread_t *t, fr_mail_ctx *uctx, struct curl_slist **out, tmpl_t ** const tmpl, +static int tmpl_arr_to_header (rlm_smtp_thread_t *t, fr_mail_ctx_t *uctx, struct curl_slist **out, tmpl_t ** const tmpl, const char *preposition) { request_t *request = uctx->request; @@ -339,7 +339,7 @@ static int tmpl_arr_to_header (rlm_smtp_thread_t *t, fr_mail_ctx *uctx, struct c /* * Takes a string value and adds it as a file path to upload as an attachment */ -static int str_to_attachments (fr_mail_ctx *uctx, curl_mime *mime, char const * str, size_t len, +static int str_to_attachments (fr_mail_ctx_t *uctx, curl_mime *mime, char const * str, size_t len, fr_sbuff_t *path_buffer, fr_sbuff_marker_t *m) { int attachments_set = 0; @@ -374,7 +374,7 @@ static int str_to_attachments (fr_mail_ctx *uctx, curl_mime *mime, char const * /* * Parse a tmpl attr into a file attachment path and add it as a mime part */ -static int tmpl_attr_to_attachment (fr_mail_ctx *uctx, curl_mime *mime, const tmpl_t * tmpl, +static int tmpl_attr_to_attachment (fr_mail_ctx_t *uctx, curl_mime *mime, const tmpl_t * tmpl, fr_sbuff_t *path_buffer, fr_sbuff_marker_t *m) { fr_pair_t *vp; @@ -399,7 +399,7 @@ static int tmpl_attr_to_attachment (fr_mail_ctx *uctx, curl_mime *mime, const tm /* * Adds every element in a tmpl** to an attachment path, then adds it to the email */ -static int tmpl_arr_to_attachments (rlm_smtp_thread_t *t, fr_mail_ctx *uctx, curl_mime *mime, tmpl_t ** const tmpl, +static int tmpl_arr_to_attachments (rlm_smtp_thread_t *t, fr_mail_ctx_t *uctx, curl_mime *mime, tmpl_t ** const tmpl, fr_sbuff_t *path_buffer, fr_sbuff_marker_t *m) { request_t *request = uctx->request; @@ -442,7 +442,7 @@ static const char * get_envelope_address(rlm_smtp_t const *inst) /* * Generate the FROM: header */ -static int generate_from_header (rlm_smtp_thread_t *t, fr_mail_ctx *uctx, struct curl_slist **out, rlm_smtp_t const *inst) +static int generate_from_header (rlm_smtp_thread_t *t, fr_mail_ctx_t *uctx, struct curl_slist **out, rlm_smtp_t const *inst) { char const *from = "FROM: "; fr_sbuff_t sbuff; @@ -470,7 +470,7 @@ static int generate_from_header (rlm_smtp_thread_t *t, fr_mail_ctx *uctx, struct /* * Generates a curl_slist of recipients */ -static int recipients_source(rlm_smtp_thread_t *t, fr_mail_ctx *uctx, rlm_smtp_t const *inst) +static int recipients_source(rlm_smtp_thread_t *t, fr_mail_ctx_t *uctx, rlm_smtp_t const *inst) { request_t *request = uctx->request; int recipients_set = 0; @@ -501,7 +501,7 @@ static int recipients_source(rlm_smtp_thread_t *t, fr_mail_ctx *uctx, rlm_smtp_t /* * Generates a curl_slist of header elements header elements */ -static int header_source(rlm_smtp_thread_t *t, fr_mail_ctx *uctx, rlm_smtp_t const *inst) +static int header_source(rlm_smtp_thread_t *t, fr_mail_ctx_t *uctx, rlm_smtp_t const *inst) { fr_sbuff_t time_out; char const *to = "TO: "; @@ -570,7 +570,7 @@ static int header_source(rlm_smtp_thread_t *t, fr_mail_ctx *uctx, rlm_smtp_t con */ static size_t body_source(char *ptr, size_t size, size_t nmemb, void *mail_ctx) { - fr_mail_ctx *uctx = mail_ctx; + fr_mail_ctx_t *uctx = mail_ctx; fr_dbuff_t out; request_t *request = uctx->request; fr_pair_t *vp; @@ -600,7 +600,7 @@ static size_t body_source(char *ptr, size_t size, size_t nmemb, void *mail_ctx) /* * Initialize all the body elements to be uploaded later */ -static int body_init (fr_mail_ctx *uctx, curl_mime *mime) +static int body_init (fr_mail_ctx_t *uctx, curl_mime *mime) { fr_pair_t *vp; request_t *request = uctx->request; @@ -643,7 +643,7 @@ static int body_init (fr_mail_ctx *uctx, curl_mime *mime) /* * Adds every SMTP_Attachments file to the email as a MIME part */ -static int attachments_source(rlm_smtp_thread_t *t, fr_mail_ctx *uctx, curl_mime *mime, rlm_smtp_t const *inst) +static int attachments_source(rlm_smtp_thread_t *t, fr_mail_ctx_t *uctx, curl_mime *mime, rlm_smtp_t const *inst) { request_t *request = uctx->request; int attachments_set = 0; @@ -679,7 +679,7 @@ static int attachments_source(rlm_smtp_thread_t *t, fr_mail_ctx *uctx, curl_mime /* * Free the curl slists */ -static int _free_mail_ctx(fr_mail_ctx *uctx) +static int _free_mail_ctx(fr_mail_ctx_t *uctx) { curl_mime_free(uctx->mime); curl_slist_free_all(uctx->header); @@ -690,9 +690,9 @@ static int _free_mail_ctx(fr_mail_ctx *uctx) /* * Check if the email was successfully sent, and if the certificate information was extracted */ -static unlang_action_t mod_authorize_result(rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request, void *rctx) +static unlang_action_t mod_authorize_result(rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request) { - fr_mail_ctx *mail_ctx = rctx; + fr_mail_ctx_t *mail_ctx = talloc_get_type_abort(mctx->rctx, fr_mail_ctx_t); rlm_smtp_t const *inst = talloc_get_type_abort_const(mctx->instance, rlm_smtp_t); fr_curl_io_request_t *randle = mail_ctx->randle; fr_curl_tls_t const *tls; @@ -737,7 +737,7 @@ static unlang_action_t CC_HINT(nonnull) mod_authorize(rlm_rcode_t *p_result, mod rlm_smtp_t const *inst = talloc_get_type_abort_const(mctx->instance, rlm_smtp_t); rlm_smtp_thread_t *t = talloc_get_type_abort(mctx->thread, rlm_smtp_thread_t); fr_curl_io_request_t *randle; - fr_mail_ctx *mail_ctx; + fr_mail_ctx_t *mail_ctx; const char *envelope_address; fr_pair_t const *smtp_body, *username, *password; @@ -770,8 +770,8 @@ static unlang_action_t CC_HINT(nonnull) mod_authorize(rlm_rcode_t *p_result, mod } /* Initialize the uctx to perform the email */ - mail_ctx = talloc_zero(randle, fr_mail_ctx); - *mail_ctx = (fr_mail_ctx) { + mail_ctx = talloc_zero(randle, fr_mail_ctx_t); + *mail_ctx = (fr_mail_ctx_t) { .request = request, .randle = randle, .mime = curl_mime_init(randle->candle), @@ -858,11 +858,10 @@ error: * If the response was not OK, we REJECT the request * This does not confirm an email may be sent, only that the provided login credentials are valid for the server */ -static unlang_action_t CC_HINT(nonnull) mod_authenticate_resume(rlm_rcode_t *p_result, - module_ctx_t const *mctx, request_t *request, void *rctx) +static unlang_action_t CC_HINT(nonnull) mod_authenticate_resume(rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request) { rlm_smtp_t const *inst = talloc_get_type_abort_const(mctx->instance, rlm_smtp_t); - fr_curl_io_request_t *randle = rctx; + fr_curl_io_request_t *randle = talloc_get_type_abort(mctx->rctx, fr_curl_io_request_t); fr_curl_tls_t const *tls; long curl_out; long curl_out_valid; diff --git a/src/modules/rlm_test/rlm_test.c b/src/modules/rlm_test/rlm_test.c index 98ceec4b4b4..b87d305a1f3 100644 --- a/src/modules/rlm_test/rlm_test.c +++ b/src/modules/rlm_test/rlm_test.c @@ -279,12 +279,12 @@ static unlang_action_t CC_HINT(nonnull) mod_return(rlm_rcode_t *p_result, UNUSED RETURN_MODULE_OK; } -static void mod_retry_signal(module_ctx_t const *mctx, request_t *request, void *rctx, fr_state_signal_t action); +static void mod_retry_signal(module_ctx_t const *mctx, request_t *request, fr_state_signal_t action); /** Continue after marked runnable * */ -static unlang_action_t mod_retry_resume(rlm_rcode_t *p_result, UNUSED module_ctx_t const *mctx, request_t *request, UNUSED void *ctx) +static unlang_action_t mod_retry_resume(rlm_rcode_t *p_result, UNUSED module_ctx_t const *mctx, request_t *request) { RDEBUG("Test called main retry handler - that's a failure"); @@ -294,7 +294,7 @@ static unlang_action_t mod_retry_resume(rlm_rcode_t *p_result, UNUSED module_ctx /** Continue after FR_SIGNAL_RETRY * */ -static unlang_action_t mod_retry_resume_retry(UNUSED rlm_rcode_t *p_result, UNUSED module_ctx_t const *mctx, request_t *request, UNUSED void *ctx) +static unlang_action_t mod_retry_resume_retry(UNUSED rlm_rcode_t *p_result, UNUSED module_ctx_t const *mctx, request_t *request) { RDEBUG("Test retry"); @@ -304,14 +304,14 @@ static unlang_action_t mod_retry_resume_retry(UNUSED rlm_rcode_t *p_result, UNUS /** Continue after FR_SIGNAL_TIMEOUT * */ -static unlang_action_t mod_retry_resume_timeout(rlm_rcode_t *p_result, UNUSED module_ctx_t const *mctx, request_t *request, UNUSED void *ctx) +static unlang_action_t mod_retry_resume_timeout(rlm_rcode_t *p_result, UNUSED module_ctx_t const *mctx, request_t *request) { RDEBUG("Test timed out as expected"); RETURN_MODULE_OK; } -static void mod_retry_signal(UNUSED module_ctx_t const *mctx, request_t *request, UNUSED void *rctx, fr_state_signal_t action) +static void mod_retry_signal(UNUSED module_ctx_t const *mctx, request_t *request, fr_state_signal_t action) { switch (action) { case FR_SIGNAL_RETRY: diff --git a/src/process/dhcpv6/base.c b/src/process/dhcpv6/base.c index 8ca6c22bf7d..b4f69475b64 100644 --- a/src/process/dhcpv6/base.c +++ b/src/process/dhcpv6/base.c @@ -337,7 +337,7 @@ void status_code_add(request_t *request, fr_value_box_t const **code) */ RESUME(send_to_client) { - process_dhcpv6_client_fields_t *fields = talloc_get_type_abort(rctx, process_dhcpv6_client_fields_t); + process_dhcpv6_client_fields_t *fields = talloc_get_type_abort(mctx->rctx, process_dhcpv6_client_fields_t); fr_process_state_t const *state; @@ -445,7 +445,7 @@ RECV(from_relay) */ RESUME(send_to_relay) { - process_dhcpv6_relay_fields_t *fields = talloc_get_type_abort(rctx, process_dhcpv6_relay_fields_t); + process_dhcpv6_relay_fields_t *fields = talloc_get_type_abort(mctx->rctx, process_dhcpv6_relay_fields_t); fr_process_state_t const *state; UPDATE_STATE(reply); diff --git a/src/process/radius/base.c b/src/process/radius/base.c index b501301f58a..bdcf292d2c0 100644 --- a/src/process/radius/base.c +++ b/src/process/radius/base.c @@ -357,7 +357,6 @@ static void CC_HINT(format (printf, 4, 5)) auth_message(process_radius_auth_t co RECV(access_request) { process_radius_t const *inst = talloc_get_type_abort_const(mctx->instance, process_radius_t); - void *rctx = NULL; /* * Only reject if the state has already been thawed. @@ -438,7 +437,7 @@ RESUME(access_request) RDEBUG("Running 'authenticate %s' from file %s", cf_section_name2(cs), cf_filename(cs)); return unlang_module_yield_to_section(p_result, request, cs, RLM_MODULE_NOOP, resume_auth_type, - NULL, rctx); + NULL, mctx->rctx); } RESUME(auth_type) @@ -471,7 +470,7 @@ RESUME(auth_type) fr_table_str_by_value(rcode_table, rcode, "???")); fr_assert(state->send != NULL); - return state->send(p_result, mctx, request, rctx); + return state->send(p_result, mctx, request); } /* @@ -540,7 +539,7 @@ RESUME(auth_type) UPDATE_STATE(reply); fr_assert(state->send != NULL); - return state->send(p_result, mctx, request, rctx); + return state->send(p_result, mctx, request); } RESUME_NO_RCTX(access_accept) @@ -641,14 +640,14 @@ RESUME(acct_type) fr_table_str_by_value(rcode_table, rcode, "???")); fr_assert(state->send != NULL); - return state->send(p_result, mctx, request, rctx); + return state->send(p_result, mctx, request); } request->reply->code = FR_RADIUS_CODE_ACCOUNTING_RESPONSE; UPDATE_STATE(reply); fr_assert(state->send != NULL); - return state->send(p_result, mctx, request, rctx); + return state->send(p_result, mctx, request); } RESUME(accounting_request) @@ -701,7 +700,7 @@ RESUME(accounting_request) */ return unlang_module_yield_to_section(p_result, request, cs, RLM_MODULE_NOOP, resume_acct_type, - NULL, rctx); + NULL, mctx->rctx); } #if 0 diff --git a/src/process/tacacs/base.c b/src/process/tacacs/base.c index 290e8969a28..f598947d3c0 100644 --- a/src/process/tacacs/base.c +++ b/src/process/tacacs/base.c @@ -245,7 +245,7 @@ RESUME(tacacs_type) UPDATE_STATE(reply); fr_assert(state->send != NULL); - return state->send(p_result, mctx, request, rctx); + return state->send(p_result, mctx, request); } RESUME(recv_tacacs) @@ -297,7 +297,7 @@ RESUME(recv_tacacs) return unlang_module_yield_to_section(p_result, request, subcs, RLM_MODULE_NOOP, resume_tacacs_type, - NULL, rctx); + NULL, mctx->rctx); } break; diff --git a/src/process/ttls/base.c b/src/process/ttls/base.c index 3863a22c73f..cedcc2d6e11 100644 --- a/src/process/ttls/base.c +++ b/src/process/ttls/base.c @@ -359,7 +359,7 @@ RESUME(access_request) rlm_rcode_t rcode = request->rcode; fr_pair_t *vp; CONF_SECTION *cs; - fr_dict_enum_value_t const *dv; + fr_dict_enum_value_t const *dv; fr_process_state_t const *state; process_ttls_t const *inst = talloc_get_type_abort_const(mctx->instance, process_ttls_t); @@ -419,7 +419,7 @@ RESUME(access_request) RDEBUG("Running 'authenticate %s' from file %s", cf_section_name2(cs), cf_filename(cs)); return unlang_module_yield_to_section(p_result, request, cs, RLM_MODULE_NOOP, resume_auth_type, - NULL, rctx); + NULL, mctx->rctx); } RESUME(auth_type) @@ -452,7 +452,7 @@ RESUME(auth_type) fr_table_str_by_value(rcode_table, rcode, "???")); fr_assert(state->send != NULL); - return state->send(p_result, mctx, request, rctx); + return state->send(p_result, mctx, request); } /* @@ -521,7 +521,7 @@ RESUME(auth_type) UPDATE_STATE(reply); fr_assert(state->send != NULL); - return state->send(p_result, mctx, request, rctx); + return state->send(p_result, mctx, request); } RESUME_NO_RCTX(access_accept)