]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
it helps to check the result of an xlat
authorAlan T. DeKok <aland@freeradius.org>
Mon, 21 Jul 2025 08:27:04 +0000 (10:27 +0200)
committerAlan T. DeKok <aland@freeradius.org>
Mon, 21 Jul 2025 08:51:36 +0000 (10:51 +0200)
except that this error check never catches an error, because
something in the interpreter isn't passing the results back to
us.

src/lib/unlang/tmpl.c
src/lib/unlang/tmpl_priv.h

index f16ff49da7c4e8c30fa5e7001634a8a8b0e6f708..0a640b710af5010b446ceb9e8fd7259b5592aec9 100644 (file)
@@ -186,6 +186,8 @@ static unlang_action_t unlang_tmpl_exec_wait_resume(unlang_result_t *p_result, r
 {
        unlang_frame_state_tmpl_t       *state = talloc_get_type_abort(frame->state, unlang_frame_state_tmpl_t);
 
+       if (!XLAT_RESULT_SUCCESS(&state->xlat_result)) RETURN_UNLANG_FAIL;
+
        if (fr_exec_oneshot(state->ctx, &state->exec_result, request,
                          &state->list,
                          state->args.exec.env, false, false,
index 940de95182144a37694e592f3ae396ea937ab830..cff1cb65324afce67a225433ee19d3299a09c4ab 100644 (file)
@@ -43,10 +43,10 @@ typedef struct {
        void                            *rctx;          //!< for resume
        fr_unlang_tmpl_resume_t         resume;         //!< resumption handler
        fr_unlang_tmpl_signal_t         signal;         //!< signal handler
+       unlang_result_t                 xlat_result;    //!< results for xlat
 
        union {
                fr_exec_state_t         exec_result;    //!< results for exec
-               unlang_result_t         xlat_result;    //!< results for xlat
        };
 
        unlang_tmpl_args_t              args;           //!< Arguments that control how the