if (!map->lhs) goto oom;
tmpl_attr_set_leaf_da(map->lhs, vp->da);
+ tmpl_attr_set_leaf_num(map->lhs, NUM_UNSPEC);
tmpl_attr_set_request_ref(map->lhs, rules->attr.request_def);
tmpl_attr_set_list(map->lhs, rules->attr.list_def);
*ar = (tmpl_attr_t){
.type = type,
.filter = {
- .type = TMPL_ATTR_FILTER_TYPE_NONE,
.num = NUM_UNSPEC
}
};
*/
ref->ar_parent = fr_dict_root(fr_dict_by_da(da)); /* Parent is the root of the dictionary */
- /*
- * Set the filter type to none.
- */
- ref->ar_filter_type = TMPL_ATTR_FILTER_TYPE_NONE;
- ref->ar_num = NUM_UNSPEC;
-
TMPL_ATTR_VERIFY(vpt);
return 0;
}
+void tmpl_attr_set_leaf_num(tmpl_t *vpt, int16_t num)
+{
+ tmpl_attr_t *ar;
+
+ tmpl_assert_type(tmpl_is_attr(vpt) || tmpl_is_attr_unresolved(vpt));
+
+ if (tmpl_attr_list_num_elements(tmpl_attr(vpt)) == 0) {
+ ar = tmpl_attr_add(vpt, TMPL_ATTR_TYPE_UNKNOWN);
+ } else {
+ ar = tmpl_attr_list_tail(tmpl_attr(vpt));
+ }
+
+ ar->ar_num = num;
+
+ TMPL_ATTR_VERIFY(vpt);
+}
+
/** Rewrite the leaf's instance number
*
*/
ar = tmpl_attr_add(vpt, TMPL_ATTR_TYPE_NORMAL);
ar->ar_da = da;
ar->ar_parent = fr_dict_root(fr_dict_by_da(da));
-
- ar->ar_filter_type = TMPL_ATTR_FILTER_TYPE_NONE;
- ar->ar_num = NUM_UNSPEC;
+ tmpl_attr_set_leaf_num(vpt, tmpl_attr_tail_num(list));
/*
* We need to rebuild the attribute name, to be the