From d1efe262cf55e4ac2329357a402af737cdc0687c Mon Sep 17 00:00:00 2001 From: "Alan T. DeKok" Date: Mon, 21 Jul 2025 10:27:04 +0200 Subject: [PATCH] it helps to check the result of an xlat 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 | 2 ++ src/lib/unlang/tmpl_priv.h | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/lib/unlang/tmpl.c b/src/lib/unlang/tmpl.c index f16ff49da7..0a640b710a 100644 --- a/src/lib/unlang/tmpl.c +++ b/src/lib/unlang/tmpl.c @@ -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, diff --git a/src/lib/unlang/tmpl_priv.h b/src/lib/unlang/tmpl_priv.h index 940de95182..cff1cb6532 100644 --- a/src/lib/unlang/tmpl_priv.h +++ b/src/lib/unlang/tmpl_priv.h @@ -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 -- 2.47.2