]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
revert everything related to attribute leaf indexes
authorAlan T. DeKok <aland@freeradius.org>
Sun, 1 Sep 2024 11:50:56 +0000 (07:50 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Sun, 1 Sep 2024 11:51:03 +0000 (07:51 -0400)
as we add different types of indexes, we should really audit
the use of ar->ar_num

src/lib/server/tmpl_tokenize.c

index f2e50862b366dfd98b905ac8f82bc8afbd044331..f365147b1c15fe9c98d21fd1a0d20931f915615b 100644 (file)
@@ -1197,27 +1197,21 @@ void tmpl_attr_rewrite_leaf_num(tmpl_t *vpt, int16_t from, int16_t to)
        if (tmpl_attr_list_num_elements(tmpl_attr(vpt)) == 0) return;
 
        ref = tmpl_attr_list_tail(tmpl_attr(vpt));
+       if (ref->ar_num == from) ref->ar_num = to;
 
-       switch (ref->ar_filter_type) {
-       case TMPL_ATTR_FILTER_TYPE_NONE:
-               if (from != NUM_UNSPEC) break;
-
-               ref->ar_filter_type = TMPL_ATTR_FILTER_TYPE_INDEX;
-               ref->ar_num = to;
-               break;
+       TMPL_ATTR_VERIFY(vpt);
+}
 
-       case TMPL_ATTR_FILTER_TYPE_INDEX:
-               if (ref->ar_num != from) break;
+/** Rewrite all instances of an array number
+ *
+ */
+void tmpl_attr_rewrite_num(tmpl_t *vpt, int16_t from, int16_t to)
+{
+       tmpl_attr_t *ref = NULL;
 
-               ref->ar_num = to;
-               break;
+       tmpl_assert_type(tmpl_is_attr(vpt) || tmpl_is_attr_unresolved(vpt));
 
-               /*
-                *      Don't rewrite non-index types.
-                */
-       default:
-               break;
-       }
+       while ((ref = tmpl_attr_list_next(tmpl_attr(vpt), ref))) if (ref->ar_num == from) ref->ar_num = to;
 
        TMPL_ATTR_VERIFY(vpt);
 }