]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Don't trash the rcodes in process state machine sections
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Tue, 6 May 2025 17:55:07 +0000 (11:55 -0600)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Tue, 6 May 2025 18:03:53 +0000 (12:03 -0600)
src/lib/server/rcode.h
src/process/radius/base.c
src/process/tacacs/base.c
src/process/ttls/base.c

index 75906303ff66470ff9146f607339956d44068d80..3bca4d4610f74244cb6d7a994ff66f76b61dc5b1 100644 (file)
@@ -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;
 
index 836912674f7a3c90304b64b66fc59c1af4867253..4255bd4f98ed474ceab12a83b3d198f96b249702 100644 (file)
@@ -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
index a80a4d9d586ee6cc14cdf81bd97aaf711c652d3b..8c1b0e9c48c015121156375ac8bbf56a4759e15c 100644 (file)
@@ -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)
index d7f3dc7515cec45e93770072dd03b502ab26d97b..ae8559d5386a9a848c20061123128d5edff229e7 100644 (file)
@@ -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)