From: Arran Cudbard-Bell Date: Tue, 6 May 2025 17:55:07 +0000 (-0600) Subject: Don't trash the rcodes in process state machine sections X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=caef5b2dcd12db87eeb38f70f596692c9cf25066;p=thirdparty%2Ffreeradius-server.git Don't trash the rcodes in process state machine sections --- diff --git a/src/lib/server/rcode.h b/src/lib/server/rcode.h index 75906303ff6..3bca4d4610f 100644 --- a/src/lib/server/rcode.h +++ b/src/lib/server/rcode.h @@ -65,6 +65,14 @@ typedef enum { #define RETURN_MODULE_TIMEOUT do { *p_result = RLM_MODULE_TIMEOUT; return UNLANG_ACTION_CALCULATE_RESULT; } while (0) #define RETURN_MODULE_RCODE(_rcode) do { *p_result = (_rcode); return UNLANG_ACTION_CALCULATE_RESULT; } while (0) +/** Don't modify the current rcode + */ +#define RETURN_MODULE_TRANSPARENT do { \ + rlm_rcode_t _rcode = *p_result; \ + *p_result = _rcode; \ + return UNLANG_ACTION_CALCULATE_RESULT; \ + } while (0) + extern fr_table_num_sorted_t const rcode_table[]; extern size_t rcode_table_len; diff --git a/src/process/radius/base.c b/src/process/radius/base.c index 836912674f7..4255bd4f98e 100644 --- a/src/process/radius/base.c +++ b/src/process/radius/base.c @@ -571,7 +571,7 @@ RESUME(access_accept) fr_state_discard(inst->auth.state_tree, request); radius_request_pairs_to_reply(request, mctx->rctx); - RETURN_MODULE_OK; + RETURN_MODULE_TRANSPARENT; } RESUME(access_reject) @@ -582,7 +582,7 @@ RESUME(access_reject) fr_state_discard(inst->auth.state_tree, request); radius_request_pairs_to_reply(request, mctx->rctx); - RETURN_MODULE_OK; + RETURN_MODULE_TRANSPARENT; } RESUME(access_challenge) @@ -603,7 +603,7 @@ RESUME(access_challenge) fr_assert(request->reply->code == FR_RADIUS_CODE_ACCESS_CHALLENGE); radius_request_pairs_to_reply(request, mctx->rctx); - RETURN_MODULE_OK; + RETURN_MODULE_TRANSPARENT; } /** A wrapper around recv generic which stores fields from the request diff --git a/src/process/tacacs/base.c b/src/process/tacacs/base.c index a80a4d9d586..8c1b0e9c48c 100644 --- a/src/process/tacacs/base.c +++ b/src/process/tacacs/base.c @@ -642,7 +642,7 @@ RESUME(auth_pass) // @todo - worry about user identity existing? fr_state_discard(inst->auth.state_tree, request); - RETURN_MODULE_OK; + RETURN_MODULE_TRANSPARENT; } RESUME(auth_fail) @@ -655,7 +655,7 @@ RESUME(auth_fail) // and also for FAIL fr_state_discard(inst->auth.state_tree, request); - RETURN_MODULE_OK; + RETURN_MODULE_TRANSPARENT; } RESUME(auth_restart) @@ -665,7 +665,7 @@ RESUME(auth_restart) PROCESS_TRACE; fr_state_discard(inst->auth.state_tree, request); - RETURN_MODULE_OK; + RETURN_MODULE_TRANSPARENT; } RESUME(auth_get) @@ -754,7 +754,7 @@ send_reply: return CALL_SEND_TYPE(FR_TACACS_CODE_AUTH_ERROR); } - RETURN_MODULE_OK; + RETURN_MODULE_TRANSPARENT; } RECV(auth_cont) diff --git a/src/process/ttls/base.c b/src/process/ttls/base.c index d7f3dc7515c..ae8559d5386 100644 --- a/src/process/ttls/base.c +++ b/src/process/ttls/base.c @@ -408,7 +408,7 @@ RESUME(access_accept) } fr_state_discard(inst->auth.state_tree, request); - RETURN_MODULE_OK; + RETURN_MODULE_TRANSPARENT; } RESUME(access_reject) @@ -418,7 +418,7 @@ RESUME(access_reject) PROCESS_TRACE; fr_state_discard(inst->auth.state_tree, request); - RETURN_MODULE_OK; + RETURN_MODULE_TRANSPARENT; } RESUME(access_challenge) @@ -441,7 +441,7 @@ RESUME(access_challenge) } fr_assert(request->reply->code == FR_RADIUS_CODE_ACCESS_CHALLENGE); - RETURN_MODULE_OK; + RETURN_MODULE_TRANSPARENT; } RESUME(protocol_error)