]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Add tmpl_attr_tail_da_is_leaf() and tmpl_attr_tail_da_is_structural()
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Thu, 9 Feb 2023 17:01:08 +0000 (11:01 -0600)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Thu, 9 Feb 2023 17:01:08 +0000 (11:01 -0600)
src/lib/server/tmpl.h

index d0b14e7a5166c6cf70f24f8558f848ade4b386b6..534f190dcf80b67ae17d7502f5de11415b0a711f 100644 (file)
@@ -818,6 +818,42 @@ static inline fr_dict_attr_t const *tmpl_attr_tail_da(tmpl_t const *vpt)
        return ar->ar_da;
 }
 
+/** Return true if the the last attribute reference is a leaf attribute
+ *
+ * @hidecallergraph
+ */
+static inline bool tmpl_attr_tail_da_is_leaf(tmpl_t const *vpt)
+{
+       tmpl_attr_t *ar;
+
+       tmpl_assert_type(tmpl_contains_attr(vpt));
+
+       ar = tmpl_attr_list_tail(tmpl_attr(vpt));
+       if (!ar) return false;
+
+       fr_assert(ar_is_normal(ar) || ar_is_unknown(ar) || ar_is_unspecified(ar));
+
+       return fr_type_is_leaf(ar->ar_da->type);
+}
+
+/** Return true if the the last attribute reference is a structural attribute
+ *
+ * @hidecallergraph
+ */
+static inline bool tmpl_attr_tail_da_is_structural(tmpl_t const *vpt)
+{
+       tmpl_attr_t *ar;
+
+       tmpl_assert_type(tmpl_contains_attr(vpt));
+
+       ar = tmpl_attr_list_tail(tmpl_attr(vpt));
+       if (!ar) return false;
+
+       fr_assert(ar_is_normal(ar) || ar_is_unknown(ar) || ar_is_unspecified(ar));
+
+       return fr_type_is_structural(ar->ar_da->type);
+}
+
 /** Return the last attribute reference unknown da
  *
  * @hidecallergraph