From: Arran Cudbard-Bell Date: Sat, 3 Sep 2022 15:10:10 +0000 (-0400) Subject: Use accessors for more tmpl fields X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1a4a3f457267207284fbfa2b88fc3aad350e313c;p=thirdparty%2Ffreeradius-server.git Use accessors for more tmpl fields --- diff --git a/src/lib/server/tmpl.h b/src/lib/server/tmpl.h index 767e32a8023..3f25d91cede 100644 --- a/src/lib/server/tmpl.h +++ b/src/lib/server/tmpl.h @@ -394,15 +394,10 @@ typedef enum { ///< may be resolved later. } tmpl_attr_type_t; -#define tmpl_attr_is_normal(_ar) (_ar->ar_type == TMPL_ATTR_TYPE_NORMAL) -#define tmpl_attr_is_unknown(_ar) (_ar->ar_type == TMPL_ATTR_TYPE_UNKNOWN) -#define tmpl_attr_is_unresolved(_ar) (_ar->ar_type == TMPL_ATTR_TYPE_UNRESOLVED) - - #define NUM_UNSPEC INT16_MIN -#define NUM_ALL (INT16_MIN + 1) -#define NUM_COUNT (INT16_MIN + 2) -#define NUM_LAST (INT16_MIN + 3) +#define NUM_ALL (INT16_MIN + 1) +#define NUM_COUNT (INT16_MIN + 2) +#define NUM_LAST (INT16_MIN + 3) /** Define entry and head types for attribute reference lists * @@ -487,6 +482,11 @@ FR_DLIST_FUNCS(tmpl_request_list, tmpl_request_t, entry) #define ar_unresolved_raw unresolved.is_raw #define ar_unresolved_namespace unresolved.namespace #define ar_num num + +#define ar_is_normal(_ar) ((_ar)->ar_type == TMPL_ATTR_TYPE_NORMAL) +#define ar_is_unspecified(_ar) ((_ar)->ar_type == TMPL_ATTR_TYPE_UNSPEC) +#define ar_is_unknown(_ar) ((_ar)->ar_type == TMPL_ATTR_TYPE_UNKNOWN) +#define ar_is_unresolved(_ar) ((_ar)->ar_type == TMPL_ATTR_TYPE_UNRESOLVED) /** @} */ /** A source or sink of value data. @@ -628,6 +628,8 @@ static inline tmpl_type_t tmpl_type_from_str(char const *type) * * @{ */ + #define tmpl_attr(_tmpl) &(_tmpl)->data.attribute.ar + static inline FR_DLIST_HEAD(tmpl_request_list) const *tmpl_request(tmpl_t const *vpt) { tmpl_assert_type(tmpl_is_attr(vpt) || @@ -655,23 +657,38 @@ static inline size_t tmpl_request_ref_count(tmpl_t const *vpt) */ static inline fr_dict_attr_t const *tmpl_da(tmpl_t const *vpt) { + tmpl_attr_t *ar; + tmpl_assert_type(tmpl_is_attr(vpt)); - return ((tmpl_attr_t *)tmpl_attr_list_tail(&vpt->data.attribute.ar))->ar_da; + ar = tmpl_attr_list_tail(tmpl_attr(vpt)); + if (!ar) return NULL; + + return ar->ar_da; } static inline fr_dict_attr_t const *tmpl_unknown(tmpl_t const *vpt) { + tmpl_attr_t *ar; + tmpl_assert_type(tmpl_is_attr(vpt)); - return ((tmpl_attr_t *)tmpl_attr_list_tail(&vpt->data.attribute.ar))->ar_unknown; + ar = tmpl_attr_list_tail(tmpl_attr(vpt)); + if (!ar) return NULL; + + return ar->ar_unknown; } static inline char const *tmpl_attr_unresolved(tmpl_t const *vpt) { - tmpl_assert_type(vpt->type == TMPL_TYPE_ATTR_UNRESOLVED); + tmpl_attr_t *ar; + + tmpl_assert_type(tmpl_is_attr_unresolved(vpt)); + + ar = tmpl_attr_list_tail(tmpl_attr(vpt)); + if (!ar) return NULL; - return ((tmpl_attr_t *)tmpl_attr_list_tail(&vpt->data.attribute.ar))->ar_unresolved; + return ar->ar_unresolved; } /** The number of attribute references contained within a tmpl @@ -682,7 +699,7 @@ static inline size_t tmpl_attr_count(tmpl_t const *vpt) tmpl_assert_type(tmpl_is_attr(vpt) || tmpl_is_attr_unresolved(vpt)); - return tmpl_attr_list_num_elements(&vpt->data.attribute.ar); + return tmpl_attr_list_num_elements(tmpl_attr(vpt)); } static inline int16_t tmpl_num(tmpl_t const *vpt) @@ -691,9 +708,9 @@ static inline int16_t tmpl_num(tmpl_t const *vpt) tmpl_is_attr_unresolved(vpt) || tmpl_is_list(vpt)); - if (tmpl_is_list(vpt) && (tmpl_attr_list_num_elements(&vpt->data.attribute.ar) == 0)) return NUM_ALL; + if (tmpl_is_list(vpt) && (tmpl_attr_list_num_elements(tmpl_attr(vpt)) == 0)) return NUM_ALL; - return ((tmpl_attr_t *)tmpl_attr_list_tail(&vpt->data.attribute.ar))->ar_num; + return tmpl_attr_list_tail(tmpl_attr(vpt))->ar_num; } static inline tmpl_pair_list_t tmpl_list(tmpl_t const *vpt) diff --git a/src/lib/server/tmpl_dcursor.c b/src/lib/server/tmpl_dcursor.c index 14064858d78..4235ee200a0 100644 --- a/src/lib/server/tmpl_dcursor.c +++ b/src/lib/server/tmpl_dcursor.c @@ -161,7 +161,7 @@ fr_pair_t *_tmpl_cursor_eval(fr_pair_t *curr, tmpl_dcursor_ctx_t *cc) { int16_t i = 0; - while ((i++ < ar->num) && vp) vp = fr_dcursor_next(&ns->cursor); + while ((i++ < ar->ar_num) && vp) vp = fr_dcursor_next(&ns->cursor); pop = true; } break; diff --git a/src/lib/server/tmpl_tokenize.c b/src/lib/server/tmpl_tokenize.c index f6ac9d3cc19..52b5d8dbea2 100644 --- a/src/lib/server/tmpl_tokenize.c +++ b/src/lib/server/tmpl_tokenize.c @@ -204,7 +204,7 @@ void tmpl_attr_ref_debug(const tmpl_attr_t *ar, int i) { char buffer[sizeof(STRINGIFY(INT16_MAX)) + 1]; - snprintf(buffer, sizeof(buffer), "%i", ar->num); + snprintf(buffer, sizeof(buffer), "%i", ar->ar_num); switch (ar->type) { case TMPL_ATTR_TYPE_NORMAL: @@ -213,9 +213,9 @@ void tmpl_attr_ref_debug(const tmpl_attr_t *ar, int i) FR_FAULT_LOG("\t[%u] %s null%s%s%s", i, fr_table_str_by_value(attr_table, ar->type, ""), - ar->num != NUM_UNSPEC ? "[" : "", - ar->num != NUM_UNSPEC ? fr_table_str_by_value(attr_num_table, ar->num, buffer) : "", - ar->num != NUM_UNSPEC ? "]" : ""); + ar->ar_num != NUM_UNSPEC ? "[" : "", + ar->ar_num != NUM_UNSPEC ? fr_table_str_by_value(attr_num_table, ar->ar_num, buffer) : "", + ar->ar_num != NUM_UNSPEC ? "]" : ""); return; } @@ -224,9 +224,9 @@ void tmpl_attr_ref_debug(const tmpl_attr_t *ar, int i) fr_table_str_by_value(attr_table, ar->type, ""), fr_type_to_str(ar->da->type), ar->da->name, - ar->num != NUM_UNSPEC ? "[" : "", - ar->num != NUM_UNSPEC ? fr_table_str_by_value(attr_num_table, ar->num, buffer) : "", - ar->num != NUM_UNSPEC ? "]" : "", + ar->ar_num != NUM_UNSPEC ? "[" : "", + ar->ar_num != NUM_UNSPEC ? fr_table_str_by_value(attr_num_table, ar->ar_num, buffer) : "", + ar->ar_num != NUM_UNSPEC ? "]" : "", ar->da, ar->da->attr ); @@ -245,9 +245,9 @@ void tmpl_attr_ref_debug(const tmpl_attr_t *ar, int i) i, fr_table_str_by_value(attr_table, ar->type, ""), ar->ar_unresolved, - ar->num != NUM_UNSPEC ? "[" : "", - ar->num != NUM_UNSPEC ? fr_table_str_by_value(attr_num_table, ar->num, buffer) : "", - ar->num != NUM_UNSPEC ? "]" : ""); + ar->ar_num != NUM_UNSPEC ? "[" : "", + ar->ar_num != NUM_UNSPEC ? fr_table_str_by_value(attr_num_table, ar->ar_num, buffer) : "", + ar->ar_num != NUM_UNSPEC ? "]" : ""); if (ar->ar_parent) FR_FAULT_LOG("\t parent : %s", ar->ar_parent->name); if (ar->ar_unresolved_namespace) FR_FAULT_LOG("\t namespace : %s", ar->ar_unresolved_namespace->name); break; @@ -311,7 +311,7 @@ void tmpl_attr_debug(tmpl_t const *vpt) } FR_FAULT_LOG("list: %s", fr_table_str_by_value(pair_list_table, vpt->data.attribute.list, "")); - tmpl_attr_ref_list_debug(&vpt->data.attribute.ar); + tmpl_attr_ref_list_debug(tmpl_attr(vpt)); } void tmpl_debug(tmpl_t const *vpt) @@ -747,7 +747,7 @@ static inline CC_HINT(always_inline) void tmpl_type_init(tmpl_t *vpt, tmpl_type_ case TMPL_TYPE_ATTR: case TMPL_TYPE_ATTR_UNRESOLVED: case TMPL_TYPE_LIST: - tmpl_attr_list_talloc_init(&vpt->data.attribute.ar); + tmpl_attr_list_talloc_init(tmpl_attr(vpt)); tmpl_request_list_talloc_init(&vpt->data.attribute.rr); break; @@ -958,10 +958,10 @@ static tmpl_attr_t *tmpl_attr_add(tmpl_t *vpt, tmpl_attr_type_t type) tmpl_attr_t *ar; TALLOC_CTX *ctx; - if (tmpl_attr_list_num_elements(&vpt->data.attribute.ar) == 0) { + if (tmpl_attr_list_num_elements(tmpl_attr(vpt)) == 0) { ctx = vpt; } else { - ctx = tmpl_attr_list_tail(&vpt->data.attribute.ar); + ctx = tmpl_attr_list_tail(tmpl_attr(vpt)); } MEM(ar = talloc(ctx, tmpl_attr_t)); @@ -969,7 +969,7 @@ static tmpl_attr_t *tmpl_attr_add(tmpl_t *vpt, tmpl_attr_type_t type) .type = type, .num = NUM_UNSPEC }; - tmpl_attr_list_insert_tail(&vpt->data.attribute.ar, ar); + tmpl_attr_list_insert_tail(tmpl_attr(vpt), ar); return ar; } @@ -1022,9 +1022,9 @@ int tmpl_attr_copy(tmpl_t *dst, tmpl_t const *src) /* * Clear any existing attribute references */ - if (tmpl_attr_list_num_elements(&dst->data.attribute.ar) > 0) tmpl_attr_list_talloc_reverse_free(&dst->data.attribute.ar); + if (tmpl_attr_list_num_elements(tmpl_attr(dst)) > 0) tmpl_attr_list_talloc_reverse_free(tmpl_attr(dst)); - while ((src_ar = tmpl_attr_list_next(&src->data.attribute.ar, src_ar))) { + while ((src_ar = tmpl_attr_list_next(tmpl_attr(src), src_ar))) { dst_ar = tmpl_attr_add(dst, src_ar->type); switch (src_ar->type) { @@ -1075,8 +1075,8 @@ int tmpl_attr_set_da(tmpl_t *vpt, fr_dict_attr_t const *da) /* * Clear any existing references */ - if (tmpl_attr_list_num_elements(&vpt->data.attribute.ar) > 0) { - tmpl_attr_list_talloc_reverse_free(&vpt->data.attribute.ar); + if (tmpl_attr_list_num_elements(tmpl_attr(vpt)) > 0) { + tmpl_attr_list_talloc_reverse_free(tmpl_attr(vpt)); } /* @@ -1109,17 +1109,17 @@ int tmpl_attr_set_leaf_da(tmpl_t *vpt, fr_dict_attr_t const *da) /* * Clear any existing references */ - if (tmpl_attr_list_num_elements(&vpt->data.attribute.ar) > 0) { - if (tmpl_attr_list_num_elements(&vpt->data.attribute.ar) > 1) { - ref = tmpl_attr_list_tail(&vpt->data.attribute.ar); - parent = tmpl_attr_list_prev(&vpt->data.attribute.ar, ref); + if (tmpl_attr_list_num_elements(tmpl_attr(vpt)) > 0) { + if (tmpl_attr_list_num_elements(tmpl_attr(vpt)) > 1) { + ref = tmpl_attr_list_tail(tmpl_attr(vpt)); + parent = tmpl_attr_list_prev(tmpl_attr(vpt), ref); if (!fr_dict_attr_common_parent(parent->ar_da, da, true)) { fr_strerror_const("New leaf da and old leaf da do not share the same ancestor"); return -1; } } else { - ref = tmpl_attr_list_tail(&vpt->data.attribute.ar); + ref = tmpl_attr_list_tail(tmpl_attr(vpt)); } /* @@ -1153,17 +1153,17 @@ int tmpl_attr_set_leaf_da(tmpl_t *vpt, fr_dict_attr_t const *da) void tmpl_attr_set_leaf_num(tmpl_t *vpt, int16_t num) { - tmpl_attr_t *ref; + tmpl_attr_t *ar; tmpl_assert_type(tmpl_is_attr(vpt) || tmpl_is_list(vpt) || tmpl_is_attr_unresolved(vpt)); - if (tmpl_attr_list_num_elements(&vpt->data.attribute.ar) == 0) { - ref = tmpl_attr_add(vpt, TMPL_ATTR_TYPE_UNKNOWN); + if (tmpl_attr_list_num_elements(tmpl_attr(vpt)) == 0) { + ar = tmpl_attr_add(vpt, TMPL_ATTR_TYPE_UNKNOWN); } else { - ref = tmpl_attr_list_tail(&vpt->data.attribute.ar); + ar = tmpl_attr_list_tail(tmpl_attr(vpt)); } - ref->num = num; + ar->ar_num = num; TMPL_ATTR_VERIFY(vpt); } @@ -1177,9 +1177,9 @@ void tmpl_attr_rewrite_leaf_num(tmpl_t *vpt, int16_t from, int16_t to) tmpl_assert_type(tmpl_is_attr(vpt) || tmpl_is_list(vpt) || tmpl_is_attr_unresolved(vpt)); - if (tmpl_attr_list_num_elements(&vpt->data.attribute.ar) == 0) return; + if (tmpl_attr_list_num_elements(tmpl_attr(vpt)) == 0) return; - ref = tmpl_attr_list_tail(&vpt->data.attribute.ar); + ref = tmpl_attr_list_tail(tmpl_attr(vpt)); if (ref->ar_num == from) ref->ar_num = to; TMPL_ATTR_VERIFY(vpt); @@ -1194,7 +1194,7 @@ void tmpl_attr_rewrite_num(tmpl_t *vpt, int16_t from, int16_t to) tmpl_assert_type(tmpl_is_attr(vpt) || tmpl_is_list(vpt) || tmpl_is_attr_unresolved(vpt)); - while ((ref = tmpl_attr_list_next(&vpt->data.attribute.ar, ref))) if (ref->ar_num == from) ref->ar_num = to; + while ((ref = tmpl_attr_list_next(tmpl_attr(vpt), ref))) if (ref->ar_num == from) ref->ar_num = to; TMPL_ATTR_VERIFY(vpt); } @@ -1295,16 +1295,16 @@ static inline CC_HINT(always_inline) void tmpl_attr_insert(tmpl_t *vpt, tmpl_att /* * Insert the reference into the list. */ - tmpl_attr_list_insert_tail(&vpt->data.attribute.ar, ar); + tmpl_attr_list_insert_tail(tmpl_attr(vpt), ar); - switch (ar->num) { + switch (ar->ar_num) { case 0: case NUM_UNSPEC: break; default: ar->resolve_only = true; - while ((ar = tmpl_attr_list_prev(&vpt->data.attribute.ar, ar))) ar->resolve_only = true; + while ((ar = tmpl_attr_list_prev(tmpl_attr(vpt), ar))) ar->resolve_only = true; break; } } @@ -1337,17 +1337,17 @@ static tmpl_attr_filter_t tmpl_attr_parse_filter(tmpl_attr_error_t *err, tmpl_at switch (*fr_sbuff_current(name)) { case '#': - ar->num = NUM_COUNT; + ar->ar_num = NUM_COUNT; fr_sbuff_next(name); break; case '*': - ar->num = NUM_ALL; + ar->ar_num = NUM_ALL; fr_sbuff_next(name); break; case 'n': - ar->num = NUM_LAST; + ar->ar_num = NUM_LAST; fr_sbuff_next(name); break; @@ -1356,7 +1356,7 @@ static tmpl_attr_filter_t tmpl_attr_parse_filter(tmpl_attr_error_t *err, tmpl_at fr_sbuff_parse_error_t sberr = FR_SBUFF_PARSE_OK; fr_sbuff_t tmp = FR_SBUFF(name); - if (fr_sbuff_out(&sberr, &ar->num, &tmp) < 0) { + if (fr_sbuff_out(&sberr, &ar->ar_num, &tmp) < 0) { if (sberr == FR_SBUFF_PARSE_ERROR_NOT_FOUND) { fr_strerror_const("Invalid array index"); if (err) *err = TMPL_ATTR_ERROR_INVALID_ARRAY_INDEX; @@ -1369,9 +1369,9 @@ static tmpl_attr_filter_t tmpl_attr_parse_filter(tmpl_attr_error_t *err, tmpl_at goto error; } - if ((ar->num > 1000) || (ar->num < 0)) { - fr_strerror_printf("Invalid array index '%hi' (should be between 0-1000)", ar->num); - ar->num = 0; + if ((ar->ar_num > 1000) || (ar->ar_num < 0)) { + fr_strerror_printf("Invalid array index '%hi' (should be between 0-1000)", ar->ar_num); + ar->ar_num = 0; if (err) *err = TMPL_ATTR_ERROR_INVALID_ARRAY_INDEX; goto error; } @@ -2218,7 +2218,7 @@ ssize_t tmpl_afrom_attr_substr(TALLOC_CTX *ctx, tmpl_attr_error_t *err, if (t_attr_rules->list_as_attr) { tmpl_attr_t *ar; - ar = tmpl_attr_list_head(&vpt->data.attribute.ar); + ar = tmpl_attr_list_head(tmpl_attr(vpt)); fr_assert(ar != NULL); if (ar->ar_da == request_attr_request) { @@ -3671,7 +3671,7 @@ static inline CC_HINT(always_inline) int tmpl_attr_resolve(tmpl_t *vpt, tmpl_res * This emulates what's done in the initial * tokenizer function. */ - ar = tmpl_attr_list_head(&vpt->data.attribute.ar); + ar = tmpl_attr_list_head(tmpl_attr(vpt)); if (ar->type == TMPL_ATTR_TYPE_UNRESOLVED) { (void)fr_dict_attr_search_by_name_substr(NULL, &da, @@ -3698,7 +3698,7 @@ static inline CC_HINT(always_inline) int tmpl_attr_resolve(tmpl_t *vpt, tmpl_res * and correct its parent and * namespace. */ - next = tmpl_attr_list_next(&vpt->data.attribute.ar, ar); + next = tmpl_attr_list_next(tmpl_attr(vpt), ar); if (next) { next->ar_parent = da; next->ar_unresolved_namespace = da; @@ -3708,7 +3708,7 @@ static inline CC_HINT(always_inline) int tmpl_attr_resolve(tmpl_t *vpt, tmpl_res /* * Loop, resolving each unresolved attribute in turn */ - while ((ar = tmpl_attr_list_next(&vpt->data.attribute.ar, ar))) { + while ((ar = tmpl_attr_list_next(tmpl_attr(vpt), ar))) { switch (ar->type) { case TMPL_ATTR_TYPE_NORMAL: continue; /* Don't need to resolve */ @@ -3736,7 +3736,7 @@ static inline CC_HINT(always_inline) int tmpl_attr_resolve(tmpl_t *vpt, tmpl_res * in the internal dictionary. */ if (!da) { - prev = tmpl_attr_list_prev(&vpt->data.attribute.ar, ar); + prev = tmpl_attr_list_prev(tmpl_attr(vpt), ar); if (!vpt->rules.attr.disallow_internal && prev && (prev->ar_da->type == FR_TYPE_GROUP)) { (void)fr_dict_attr_by_name_substr(NULL, &da, @@ -3764,7 +3764,7 @@ static inline CC_HINT(always_inline) int tmpl_attr_resolve(tmpl_t *vpt, tmpl_res * Reach into the next reference * and correct its parent. */ - next = tmpl_attr_list_next(&vpt->data.attribute.ar, ar); + next = tmpl_attr_list_next(tmpl_attr(vpt), ar); if (next) { next->ar_parent = da; next->ar_unresolved_namespace = da; @@ -3784,9 +3784,9 @@ static inline CC_HINT(always_inline) int tmpl_attr_resolve(tmpl_t *vpt, tmpl_res * an index, the ar is redundant and should * be removed. */ - prev = tmpl_attr_list_prev(&vpt->data.attribute.ar, ar); + prev = tmpl_attr_list_prev(tmpl_attr(vpt), ar); if (prev && (prev->ar_da->type != FR_TYPE_GROUP) && (prev->ar_num == NUM_UNSPEC)) { - tmpl_attr_list_remove(&vpt->data.attribute.ar, prev); + tmpl_attr_list_remove(tmpl_attr(vpt), prev); ar->ar_parent = prev->ar_parent; talloc_free(prev); } @@ -3988,7 +3988,7 @@ void tmpl_unresolve(tmpl_t *vpt) case TMPL_TYPE_LIST: case TMPL_TYPE_ATTR: case TMPL_TYPE_ATTR_UNRESOLVED: - tmpl_attr_list_talloc_free(&vpt->data.attribute.ar); + tmpl_attr_list_talloc_free(tmpl_attr(vpt)); tmpl_request_list_talloc_free(&vpt->data.attribute.rr); break; @@ -4083,7 +4083,7 @@ static void attr_to_raw(tmpl_t *vpt, tmpl_attr_t *ref) */ void tmpl_attr_to_raw(tmpl_t *vpt) { - attr_to_raw(vpt, tmpl_attr_list_tail(&vpt->data.attribute.ar)); + attr_to_raw(vpt, tmpl_attr_list_tail(tmpl_attr(vpt))); } /** Add an unknown #fr_dict_attr_t specified by a #tmpl_t to the main dictionary @@ -4112,7 +4112,7 @@ int tmpl_attr_unknown_add(tmpl_t *vpt) if (!tmpl_da(vpt)->flags.is_unknown) return 1; /* Ensure at least the leaf is unknown */ - while ((ar = tmpl_attr_list_next(&vpt->data.attribute.ar, ar))) { + while ((ar = tmpl_attr_list_next(tmpl_attr(vpt), ar))) { fr_dict_attr_t const *unknown, *known; switch (ar->type) { @@ -4135,7 +4135,7 @@ int tmpl_attr_unknown_add(tmpl_t *vpt) * Fixup the parent of the next unknown * now it's known. */ - next = tmpl_attr_list_next(&vpt->data.attribute.ar, ar); + next = tmpl_attr_list_next(tmpl_attr(vpt), ar); if (next && (next->type == TMPL_ATTR_TYPE_UNKNOWN) && (next->ar_da->parent == unknown)) { if (fr_dict_attr_unknown_parent_to_known(fr_dict_attr_unconst(next->ar_da), @@ -4345,13 +4345,13 @@ fr_slen_t tmpl_attr_print(fr_sbuff_t *out, tmpl_t const *vpt, tmpl_attr_prefix_t if (printed_rr) FR_SBUFF_IN_CHAR_RETURN(&our_out, '.'); FR_SBUFF_IN_TABLE_STR_RETURN(&our_out, pair_list_table, tmpl_list(vpt), ""); - if (tmpl_attr_list_num_elements(&vpt->data.attribute.ar)) FR_SBUFF_IN_CHAR_RETURN(&our_out, '.'); + if (tmpl_attr_list_num_elements(tmpl_attr(vpt))) FR_SBUFF_IN_CHAR_RETURN(&our_out, '.'); /* * Request qualifier with no list qualifier */ } else if (printed_rr) { - if (tmpl_attr_list_num_elements(&vpt->data.attribute.ar)) FR_SBUFF_IN_CHAR_RETURN(&our_out, '.'); + if (tmpl_attr_list_num_elements(tmpl_attr(vpt))) FR_SBUFF_IN_CHAR_RETURN(&our_out, '.'); } /* @@ -4363,7 +4363,7 @@ fr_slen_t tmpl_attr_print(fr_sbuff_t *out, tmpl_t const *vpt, tmpl_attr_prefix_t * we add the .unknown prefix. * */ - if (!tmpl_is_list(vpt) && (ar = tmpl_attr_list_tail(&vpt->data.attribute.ar))) { + if (!tmpl_is_list(vpt) && (ar = tmpl_attr_list_tail(tmpl_attr(vpt)))) { switch (ar->type) { case TMPL_ATTR_TYPE_NORMAL: case TMPL_ATTR_TYPE_UNKNOWN: @@ -4380,7 +4380,7 @@ fr_slen_t tmpl_attr_print(fr_sbuff_t *out, tmpl_t const *vpt, tmpl_attr_prefix_t * Print attribute identifiers */ ar = NULL; - while ((ar = tmpl_attr_list_next(&vpt->data.attribute.ar, ar))) { + while ((ar = tmpl_attr_list_next(tmpl_attr(vpt), ar))) { if (!tmpl_is_list(vpt)) switch(ar->type) { case TMPL_ATTR_TYPE_NORMAL: case TMPL_ATTR_TYPE_UNKNOWN: @@ -4394,7 +4394,7 @@ fr_slen_t tmpl_attr_print(fr_sbuff_t *out, tmpl_t const *vpt, tmpl_attr_prefix_t /* * First component in the list has everything built */ - if (ar == tmpl_attr_list_head(&vpt->data.attribute.ar)) { + if (ar == tmpl_attr_list_head(tmpl_attr(vpt))) { depth = ar->ar_parent->depth - 1; /* Adjust for array index */ /* * Everything else skips the first component @@ -4681,13 +4681,13 @@ void tmpl_attr_verify(char const *file, int line, tmpl_t const *vpt) /* * Loop detection */ - while ((slow = tmpl_attr_list_next(&vpt->data.attribute.ar, slow)) && - (fast = tmpl_attr_list_next(&vpt->data.attribute.ar, fast))) { + while ((slow = tmpl_attr_list_next(tmpl_attr(vpt), slow)) && + (fast = tmpl_attr_list_next(tmpl_attr(vpt), fast))) { /* * Advances twice as fast as slow... */ - fast = tmpl_attr_list_next(&vpt->data.attribute.ar, fast); + fast = tmpl_attr_list_next(tmpl_attr(vpt), fast); fr_fatal_assert_msg(fast != slow, "CONSISTENCY CHECK FAILED %s[%u]: Looping reference list found. " "Fast pointer hit slow pointer at \"%s\"", @@ -4702,7 +4702,7 @@ void tmpl_attr_verify(char const *file, int line, tmpl_t const *vpt) * Known attribute cannot come after unresolved or unknown attributes * Unknown attributes cannot come after unresolved attributes */ - if (!tmpl_is_list(vpt)) while ((ar = tmpl_attr_list_next(&vpt->data.attribute.ar, ar))) { + if (!tmpl_is_list(vpt)) while ((ar = tmpl_attr_list_next(tmpl_attr(vpt), ar))) { switch (ar->type) { case TMPL_ATTR_TYPE_NORMAL: if (seen_unknown) { @@ -4857,13 +4857,13 @@ void tmpl_verify(char const *file, int line, tmpl_t const *vpt) break; case TMPL_TYPE_ATTR_UNRESOLVED: - if ((tmpl_attr_list_num_elements(&vpt->data.attribute.ar) > 0) && - ((tmpl_attr_t *)tmpl_attr_list_tail(&vpt->data.attribute.ar))->da) { + if ((tmpl_attr_list_num_elements(tmpl_attr(vpt)) > 0) && + ((tmpl_attr_t *)tmpl_attr_list_tail(tmpl_attr(vpt)))->da) { #ifndef NDEBUG tmpl_attr_debug(vpt); #endif fr_fatal_assert_fail("CONSISTENCY CHECK FAILED %s[%u]: TMPL_TYPE_ATTR_UNRESOLVED contains %u " - "references", file, line, tmpl_attr_list_num_elements(&vpt->data.attribute.ar)); + "references", file, line, tmpl_attr_list_num_elements(tmpl_attr(vpt))); } break; @@ -4929,13 +4929,13 @@ void tmpl_verify(char const *file, int line, tmpl_t const *vpt) file, line); } - if ((tmpl_attr_list_num_elements(&vpt->data.attribute.ar) > 0) && - ((tmpl_attr_t *)tmpl_attr_list_tail(&vpt->data.attribute.ar))->da) { + if ((tmpl_attr_list_num_elements(tmpl_attr(vpt)) > 0) && + ((tmpl_attr_t *)tmpl_attr_list_tail(tmpl_attr(vpt)))->da) { #ifndef NDEBUG tmpl_attr_debug(vpt); #endif fr_fatal_assert_fail("CONSISTENCY CHECK FAILED %s[%u]: TMPL_TYPE_LIST contains %u " - "references", file, line, tmpl_attr_list_num_elements(&vpt->data.attribute.ar)); + "references", file, line, tmpl_attr_list_num_elements(tmpl_attr(vpt))); } break;