From: Alan T. DeKok Date: Mon, 21 Jul 2025 08:27:04 +0000 (+0200) Subject: it helps to check the result of an xlat X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d1efe262cf55e4ac2329357a402af737cdc0687c;p=thirdparty%2Ffreeradius-server.git 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. --- 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