From: Alan T. DeKok Date: Wed, 11 May 2022 02:16:54 +0000 (-0400) Subject: start of removing xlat_flags_t from tmpl X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=db7f734bf8018d7c16f42984ee1c04b839c17870;p=thirdparty%2Ffreeradius-server.git start of removing xlat_flags_t from tmpl sometimes go a bit sideways to make progress. --- diff --git a/src/lib/server/tmpl_tokenize.c b/src/lib/server/tmpl_tokenize.c index ed63da35e61..4cae5de9f0b 100644 --- a/src/lib/server/tmpl_tokenize.c +++ b/src/lib/server/tmpl_tokenize.c @@ -3573,12 +3573,17 @@ static inline CC_HINT(always_inline) int tmpl_attr_resolve(tmpl_t *vpt, tmpl_res static inline CC_HINT(always_inline) int tmpl_xlat_resolve(tmpl_t *vpt, tmpl_res_rules_t const *tr_rules) { - if (xlat_resolve(vpt->data.xlat.ex, &vpt->data.xlat.flags, + fr_assert(xlat_needs_resolving(vpt->data.xlat.ex) == vpt->data.xlat.flags.needs_resolving); + + if (xlat_resolve(vpt->data.xlat.ex, NULL, &(xlat_res_rules_t){ .tr_rules = tr_rules, .allow_unresolved = false }) < 0) return -1; + fr_assert(!xlat_needs_resolving(vpt->data.xlat.ex)); + vpt->data.xlat.flags.needs_resolving = false; + RESOLVED_SET(&vpt->type); TMPL_VERIFY(vpt); diff --git a/src/lib/unlang/xlat_tokenize.c b/src/lib/unlang/xlat_tokenize.c index 4d90ee20eda..1e3e0d3223e 100644 --- a/src/lib/unlang/xlat_tokenize.c +++ b/src/lib/unlang/xlat_tokenize.c @@ -1663,11 +1663,11 @@ int xlat_resolve(xlat_exp_head_t *head, xlat_flags_t *flags, xlat_res_rules_t co static xlat_res_rules_t xr_default; xlat_flags_t our_flags; - if (!flags->needs_resolving) return 0; /* Already done */ + if (!head->flags.needs_resolving && flags && !flags->needs_resolving) return 0; /* Already done */ if (!xr_rules) xr_rules = &xr_default; - our_flags = *flags; + our_flags = head->flags; our_flags.needs_resolving = false; /* We flip this if not all resolutions are successful */ xlat_exp_foreach(head, node) { @@ -1833,7 +1833,8 @@ int xlat_resolve(xlat_exp_head_t *head, xlat_flags_t *flags, xlat_res_rules_t co xlat_flags_merge(&our_flags, &node->flags); } - *flags = our_flags; /* Update parent flags - not merge, replacement */ + head->flags = our_flags; + if (flags) *flags = our_flags; /* Update parent flags - not merge, replacement */ return 0; }