]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Move rctx into mctx, fixing dhcpv6_process in the process
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Wed, 3 Nov 2021 17:36:03 +0000 (13:36 -0400)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Wed, 3 Nov 2021 17:36:03 +0000 (13:36 -0400)
26 files changed:
src/lib/eap_aka_sim/module.c
src/lib/eap_aka_sim/state_machine.c
src/lib/eap_aka_sim/state_machine.h
src/lib/server/process.h
src/lib/unlang/module.c
src/lib/unlang/module.h
src/modules/rlm_delay/rlm_delay.c
src/modules/rlm_dhcpv4/rlm_dhcpv4.c
src/modules/rlm_eap/rlm_eap.c
src/modules/rlm_eap/types/rlm_eap_fast/rlm_eap_fast.c
src/modules/rlm_eap/types/rlm_eap_peap/rlm_eap_peap.c
src/modules/rlm_eap/types/rlm_eap_tls/rlm_eap_tls.c
src/modules/rlm_eap/types/rlm_eap_ttls/rlm_eap_ttls.c
src/modules/rlm_exec/rlm_exec.c
src/modules/rlm_imap/rlm_imap.c
src/modules/rlm_radius/rlm_radius.c
src/modules/rlm_radius/rlm_radius_udp.c
src/modules/rlm_rest/io.c
src/modules/rlm_rest/rest.h
src/modules/rlm_rest/rlm_rest.c
src/modules/rlm_smtp/rlm_smtp.c
src/modules/rlm_test/rlm_test.c
src/process/dhcpv6/base.c
src/process/radius/base.c
src/process/tacacs/base.c
src/process/ttls/base.c

index e73bf966f895b9809a6081688a52f75cae68444b..ad070172dc17b8d0dca77c1ddc71015de1615206 100644 (file)
@@ -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);
index 60e36155b2a75b076b94891ce6fe4f8c1425d4fd..229c44d63c915dd722849c6b0da17cb92b4256d2 100644 (file)
@@ -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);
 }
index de5140baea09bc6c52f1f675b5800d24c49604d2..285dd3d394c8a86262078625826d2dfca126750d 100644 (file)
@@ -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.
index b54cfcb5532168c72b43cdd4124b99ee750096b2..0917b6b8ad3f8fb7a62e316ee9220188981fc36f 100644 (file)
@@ -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));
index f410b2703f483555047d14b4681298e4c5f0ea0a..f133d6286140f3319385ac628578fedbddfb14ca 100644 (file)
@@ -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;
index 0a0bcd583694d54516c7b91efb83dbcfc5801933..a35bc42ed34e1d2b749d73582f4f269185007118 100644 (file)
@@ -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);
index c19a9fe2c717fc0908704d7e70eafc1549ef2da2..65cfbeb478200b865405da3eb3a7e956fbaa090f 100644 (file)
@@ -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)
index 45486841b997384c1838662a51d0af31f48cfc99..ce1197d175ff5c8c88a17bd172dcfaa2b6e50e22 100644 (file)
@@ -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);
index feef54d62ff4604745376397c1d6cbe665c9b250..0268ff16a271a10cc72a9f944b9884ab9d645177 100644 (file)
@@ -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);
 }
index 3db6e8813eee25c222a477944f888bbf0ff0bd19..007568a72d00b0283dd7d1f37f3ca56dcd7eb13c 100644 (file)
@@ -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;
 
index 12baf2bc70479aedef095ed21e3694436ffc875d..f42c0ba0ed962c7157158ec00b5d1bd6ef7b3fbd 100644 (file)
@@ -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);
index 4bf3bf0602f3a4290eab72258f1279807ccbb89d..baae5d038072614c4ed34f8dad3350cdc55fb2fc 100644 (file)
@@ -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
                 *
index e68ab0391398fa2dd856ca462be28d0f1ec4c147..2ed0908e735ec9ef4943289ca5be6be558d98a9c 100644 (file)
@@ -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;
 
index e2baf3d717bb66be68234e32874070482693a118..908496ed5da0e58dbc262b80838f4ff00c674c11 100644 (file)
@@ -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);
        }
 
        /*
index 0724681166d849fdaba1d95ab4eb9a86fa4f7a19..a1ba17a1f3017f6287d1694624d81beec23d50ef 100644 (file)
@@ -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;
index bff32ca0a6fd5b08281fc6c1e53516f271e50145..493ea6d0682dda5f53d093003d8977fe8c91637f 100644 (file)
@@ -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.
index 8dbb7538ff16280219dd2f44d03354d730b7d039..b5d51e372d03eab6944651b531bc31b2a4aeb530 100644 (file)
@@ -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;
        }
 
index cb70300a050fdc0f7d2703d8ce79de244b49d82e..72e203de40c9709a77f99446f2210295e0a3a40a 100644 (file)
@@ -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);
 }
index e2e4a84a6e440514bc84ec32ee059add8dc3e54a..4069e488de472659d7be37225fa0520ad99462b4 100644 (file)
@@ -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);
index 8cd5520e75fd5333bfab90762544d7e630eecc1b..bbe844dc8763a682a258c3c1b00807685b36eb94 100644 (file)
@@ -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;
index fd3e1bf999ffea44da04c4bd10b5021ac75f8799..f3130c32b5d6f41ad5fea1cf6c82fd11944c89eb 100644 (file)
@@ -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;
index 98ceec4b4b4ce277be931ca068236afb701fab5a..b87d305a1f34ae93b02867a4442b695fda61298e 100644 (file)
@@ -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:
index 8ca6c22bf7dc9f9ce97a42eeb5cd1c31530e91c6..b4f69475b644c005051402bf830460988018f25f 100644 (file)
@@ -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);
index b501301f58aa0ce4d3ba6458308e44439905519f..bdcf292d2c007b05591639beb3d3bb6cdb908cf5 100644 (file)
@@ -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
index 290e8969a280213e6c30adacdf03e98c6164887e..f598947d3c02df6c21c5c03f275da0fa7b970f0b 100644 (file)
@@ -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;
 
index 3863a22c73f85fffa0457f89d8c262e8eedafebb..cedcc2d6e1184a33aaaec71946252704d8d6bde6 100644 (file)
@@ -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)