From: Alan T. DeKok Date: Sat, 31 Aug 2024 14:02:46 +0000 (-0400) Subject: if we're setting a leaf num, ensure the filter type is correct X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4d88ce798c631347975a647fead04dff4c69e137;p=thirdparty%2Ffreeradius-server.git if we're setting a leaf num, ensure the filter type is correct --- diff --git a/src/lib/server/tmpl.h b/src/lib/server/tmpl.h index 7c4dc72848..3199681b6a 100644 --- a/src/lib/server/tmpl.h +++ b/src/lib/server/tmpl.h @@ -1177,8 +1177,6 @@ void tmpl_attr_set_leaf_num(tmpl_t *vpt, int16_t num) CC_HINT(nonnull); void tmpl_attr_rewrite_leaf_num(tmpl_t *vpt, int16_t from, int16_t to) CC_HINT(nonnull); -void tmpl_attr_rewrite_num(tmpl_t *vpt, int16_t from, int16_t to) CC_HINT(nonnull); - void tmpl_attr_set_request_ref(tmpl_t *vpt, FR_DLIST_HEAD(tmpl_request_list) const *request_def) CC_HINT(nonnull); void tmpl_attr_set_list(tmpl_t *vpt, fr_dict_attr_t const *list) CC_HINT(nonnull); diff --git a/src/lib/server/tmpl_tokenize.c b/src/lib/server/tmpl_tokenize.c index f365147b1c..f2e50862b3 100644 --- a/src/lib/server/tmpl_tokenize.c +++ b/src/lib/server/tmpl_tokenize.c @@ -1197,21 +1197,27 @@ 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; - TMPL_ATTR_VERIFY(vpt); -} + switch (ref->ar_filter_type) { + case TMPL_ATTR_FILTER_TYPE_NONE: + if (from != NUM_UNSPEC) 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_filter_type = TMPL_ATTR_FILTER_TYPE_INDEX; + ref->ar_num = to; + break; - tmpl_assert_type(tmpl_is_attr(vpt) || tmpl_is_attr_unresolved(vpt)); + case TMPL_ATTR_FILTER_TYPE_INDEX: + if (ref->ar_num != from) break; - while ((ref = tmpl_attr_list_next(tmpl_attr(vpt), ref))) if (ref->ar_num == from) ref->ar_num = to; + ref->ar_num = to; + break; + + /* + * Don't rewrite non-index types. + */ + default: + break; + } TMPL_ATTR_VERIFY(vpt); }