]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
start of removing xlat_flags_t from tmpl
authorAlan T. DeKok <aland@freeradius.org>
Wed, 11 May 2022 02:16:54 +0000 (22:16 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Mon, 16 May 2022 19:00:16 +0000 (15:00 -0400)
sometimes go a bit sideways to make progress.

src/lib/server/tmpl_tokenize.c
src/lib/unlang/xlat_tokenize.c

index ed63da35e61beca6019c9e75ad8e032e68f2155b..4cae5de9f0b8dd76c046b14526e82e08c972ffc8 100644 (file)
@@ -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);
 
index 4d90ee20edac1c94e536038d7bab710205aad4f7..1e3e0d3223e1b32dd6a0088b76c6a1c1f76418e3 100644 (file)
@@ -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;
 }