From: Arran Cudbard-Bell Date: Thu, 26 Mar 2020 21:32:51 +0000 (-0600) Subject: s/tlv_stack/da_stack/g X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=22b830050dab4982da07eb2b7359d6701f7a6cfd;p=thirdparty%2Ffreeradius-server.git s/tlv_stack/da_stack/g It's used for more than TLVs --- diff --git a/src/lib/eap_aka_sim/encode.c b/src/lib/eap_aka_sim/encode.c index df07eaa10d5..a5f315d08ee 100644 --- a/src/lib/eap_aka_sim/encode.c +++ b/src/lib/eap_aka_sim/encode.c @@ -55,7 +55,7 @@ RCSID("$Id$") */ static ssize_t encode_tlv_hdr(uint8_t *out, size_t outlen, - fr_dict_attr_t const **tlv_stack, unsigned int depth, + fr_dict_attr_t const **da_stack, unsigned int depth, fr_cursor_t *cursor, void *encoder_ctx); static inline bool is_encodable(fr_dict_attr_t const *root, VALUE_PAIR *vp) @@ -295,18 +295,18 @@ static ssize_t encode_encrypted_value(uint8_t *out, size_t outlen, * < 0, failure. */ static ssize_t encode_value(uint8_t *out, size_t outlen, - fr_dict_attr_t const **tlv_stack, int depth, + fr_dict_attr_t const **da_stack, int depth, fr_cursor_t *cursor, void *encoder_ctx) { ssize_t len; VALUE_PAIR const *vp = fr_cursor_current(cursor); - fr_dict_attr_t const *da = tlv_stack[depth]; + fr_dict_attr_t const *da = da_stack[depth]; fr_aka_sim_encode_ctx_t *packet_ctx = encoder_ctx; VP_VERIFY(vp); - FR_PROTO_STACK_PRINT(tlv_stack, depth); + FR_PROTO_STACK_PRINT(da_stack, depth); - if (unlikely(tlv_stack[depth + 1] != NULL)) { + if (unlikely(da_stack[depth + 1] != NULL)) { fr_strerror_printf("%s: Encoding value but not at top of stack", __FUNCTION__); return PAIR_ENCODE_FATAL_ERROR; } @@ -319,7 +319,7 @@ static ssize_t encode_value(uint8_t *out, size_t outlen, switch (da->type) { case FR_TYPE_STRUCTURAL: fr_strerror_printf("%s: Called with structural type %s", __FUNCTION__, - fr_table_str_by_value(fr_value_box_type_table, tlv_stack[depth]->type, "?Unknown?")); + fr_table_str_by_value(fr_value_box_type_table, da_stack[depth]->type, "?Unknown?")); return PAIR_ENCODE_FATAL_ERROR; default: @@ -583,7 +583,7 @@ done: * Rebuilds the TLV stack for encoding the next attribute */ vp = next_encodable(cursor, encoder_ctx); - fr_proto_tlv_stack_build(tlv_stack, vp ? vp->da : NULL); + fr_proto_da_stack_build(da_stack, vp ? vp->da : NULL); return len; } @@ -607,7 +607,7 @@ done: * */ static ssize_t encode_array(uint8_t *out, size_t outlen, - fr_dict_attr_t const **tlv_stack, int depth, + fr_dict_attr_t const **da_stack, int depth, fr_cursor_t *cursor, void *encoder_ctx) { uint8_t *p = out, *end = p + outlen; @@ -615,7 +615,7 @@ static ssize_t encode_array(uint8_t *out, size_t outlen, size_t pad_len; size_t element_len; uint16_t actual_len; - fr_dict_attr_t const *da = tlv_stack[depth]; + fr_dict_attr_t const *da = da_stack[depth]; rad_assert(da->flags.array); p += 2; @@ -640,7 +640,7 @@ static ssize_t encode_array(uint8_t *out, size_t outlen, VALUE_PAIR *vp; ssize_t slen; - slen = encode_value(p, end - p, tlv_stack, depth, cursor, encoder_ctx); + slen = encode_value(p, end - p, da_stack, depth, cursor, encoder_ctx); if (slen < 0) return slen; p += slen; @@ -684,7 +684,7 @@ static ssize_t encode_array(uint8_t *out, size_t outlen, * If it's a standard attribute, then vp->da->attr == attribute. * Otherwise, attribute may be something else. */ -static ssize_t encode_rfc_hdr(uint8_t *out, size_t outlen, fr_dict_attr_t const **tlv_stack, unsigned int depth, +static ssize_t encode_rfc_hdr(uint8_t *out, size_t outlen, fr_dict_attr_t const **da_stack, unsigned int depth, fr_cursor_t *cursor, void *encoder_ctx) { size_t pad_len; @@ -692,19 +692,19 @@ static ssize_t encode_rfc_hdr(uint8_t *out, size_t outlen, fr_dict_attr_t const fr_dict_attr_t const *da; ssize_t slen; - FR_PROTO_STACK_PRINT(tlv_stack, depth); + FR_PROTO_STACK_PRINT(da_stack, depth); - switch (tlv_stack[depth]->type) { + switch (da_stack[depth]->type) { case FR_TYPE_STRUCTURAL: fr_strerror_printf("%s: Called with structural type %s", __FUNCTION__, - fr_table_str_by_value(fr_value_box_type_table, tlv_stack[depth]->type, "?Unknown?")); + fr_table_str_by_value(fr_value_box_type_table, da_stack[depth]->type, "?Unknown?")); return PAIR_ENCODE_FATAL_ERROR; default: - if (((fr_dict_vendor_num_by_da(tlv_stack[depth]) == 0) && (tlv_stack[depth]->attr == 0)) || - (tlv_stack[depth]->attr > 255)) { + if (((fr_dict_vendor_num_by_da(da_stack[depth]) == 0) && (da_stack[depth]->attr == 0)) || + (da_stack[depth]->attr > 255)) { fr_strerror_printf("%s: Called with non-standard attribute %u", __FUNCTION__, - tlv_stack[depth]->attr); + da_stack[depth]->attr); return PAIR_ENCODE_FATAL_ERROR; } break; @@ -721,13 +721,13 @@ static ssize_t encode_rfc_hdr(uint8_t *out, size_t outlen, fr_dict_attr_t const * zero and fill any subfields like actual * length. */ - da = tlv_stack[depth]; + da = da_stack[depth]; p += 2; /* Leave space for attr + len */ if (da->flags.array) { - slen = encode_array(p, outlen - (p - out), tlv_stack, depth, cursor, encoder_ctx); + slen = encode_array(p, outlen - (p - out), da_stack, depth, cursor, encoder_ctx); } else { - slen = encode_value(p, outlen - (p - out), tlv_stack, depth, cursor, encoder_ctx); + slen = encode_value(p, outlen - (p - out), da_stack, depth, cursor, encoder_ctx); } if (slen <= 0) return slen; p += slen; @@ -752,13 +752,13 @@ static ssize_t encode_rfc_hdr(uint8_t *out, size_t outlen, fr_dict_attr_t const } static inline ssize_t encode_tlv_internal(uint8_t *out, size_t outlen, - fr_dict_attr_t const **tlv_stack, unsigned int depth, + fr_dict_attr_t const **da_stack, unsigned int depth, fr_cursor_t *cursor, void *encoder_ctx) { ssize_t slen; uint8_t *p = out, *end = p + outlen, *value; VALUE_PAIR const *vp = fr_cursor_current(cursor); - fr_dict_attr_t const *da = tlv_stack[depth]; + fr_dict_attr_t const *da = da_stack[depth]; CHECK_FREESPACE(outlen, 2); *p++ = 0; /* Reserved (0) */ @@ -767,7 +767,7 @@ static inline ssize_t encode_tlv_internal(uint8_t *out, size_t outlen, while ((end - p) > 4) { size_t sublen; - FR_PROTO_STACK_PRINT(tlv_stack, depth); + FR_PROTO_STACK_PRINT(da_stack, depth); /* * This attribute carries sub-TLVs. The sub-TLVs @@ -779,10 +779,10 @@ static inline ssize_t encode_tlv_internal(uint8_t *out, size_t outlen, /* * Determine the nested type and call the appropriate encoder */ - if (tlv_stack[depth + 1]->type == FR_TYPE_TLV) { - slen = encode_tlv_hdr(p, sublen, tlv_stack, depth + 1, cursor, encoder_ctx); + if (da_stack[depth + 1]->type == FR_TYPE_TLV) { + slen = encode_tlv_hdr(p, sublen, da_stack, depth + 1, cursor, encoder_ctx); } else { - slen = encode_rfc_hdr(p, sublen, tlv_stack, depth + 1, cursor, encoder_ctx); + slen = encode_rfc_hdr(p, sublen, da_stack, depth + 1, cursor, encoder_ctx); } if (slen <= 0) return slen; @@ -798,7 +798,7 @@ static inline ssize_t encode_tlv_internal(uint8_t *out, size_t outlen, * rebuilding the TLV Stack, the attribute * at this depth is the same. */ - if (da != tlv_stack[depth]) break; + if (da != da_stack[depth]) break; vp = fr_cursor_current(cursor); } @@ -819,7 +819,7 @@ static inline ssize_t encode_tlv_internal(uint8_t *out, size_t outlen, } static ssize_t encode_tlv_hdr(uint8_t *out, size_t outlen, - fr_dict_attr_t const **tlv_stack, unsigned int depth, + fr_dict_attr_t const **da_stack, unsigned int depth, fr_cursor_t *cursor, void *encoder_ctx) { unsigned int total_len; @@ -828,15 +828,15 @@ static ssize_t encode_tlv_hdr(uint8_t *out, size_t outlen, fr_dict_attr_t const *da; VP_VERIFY(fr_cursor_current(cursor)); - FR_PROTO_STACK_PRINT(tlv_stack, depth); + FR_PROTO_STACK_PRINT(da_stack, depth); - if (tlv_stack[depth]->type != FR_TYPE_TLV) { + if (da_stack[depth]->type != FR_TYPE_TLV) { fr_strerror_printf("%s: Expected type \"tlv\" got \"%s\"", __FUNCTION__, - fr_table_str_by_value(fr_value_box_type_table, tlv_stack[depth]->type, "?Unknown?")); + fr_table_str_by_value(fr_value_box_type_table, da_stack[depth]->type, "?Unknown?")); return PAIR_ENCODE_FATAL_ERROR; } - if (!tlv_stack[depth + 1]) { + if (!da_stack[depth + 1]) { fr_strerror_printf("%s: Can't encode empty TLV", __FUNCTION__); return PAIR_ENCODE_FATAL_ERROR; } @@ -846,7 +846,7 @@ static ssize_t encode_tlv_hdr(uint8_t *out, size_t outlen, * The ASCII art in the RFCs the attributes in * this order. */ - if (!tlv_stack[depth]->flags.extra && tlv_stack[depth]->flags.subtype) { + if (!da_stack[depth]->flags.extra && da_stack[depth]->flags.subtype) { len = encode_iv(out, outlen, encoder_ctx); if (len < 0) return len; @@ -857,8 +857,8 @@ static ssize_t encode_tlv_hdr(uint8_t *out, size_t outlen, if (outlen < 4) return 0; if (outlen > SIM_MAX_ATTRIBUTE_VALUE_LEN) outlen = SIM_MAX_ATTRIBUTE_VALUE_LEN; - da = tlv_stack[depth]; - len = encode_tlv_internal(p + 2, outlen - 2, tlv_stack, depth, cursor, encoder_ctx); + da = da_stack[depth]; + len = encode_tlv_internal(p + 2, outlen - 2, da_stack, depth, cursor, encoder_ctx); if (len <= 0) return len; /* @@ -882,7 +882,7 @@ ssize_t fr_aka_sim_encode_pair(uint8_t *out, size_t outlen, fr_cursor_t *cursor, ssize_t slen; size_t attr_len; - fr_dict_attr_t const *tlv_stack[FR_DICT_MAX_TLV_STACK + 1]; + fr_dict_attr_t const *da_stack[FR_DICT_MAX_TLV_STACK + 1]; fr_dict_attr_t const *da = NULL; fr_aka_sim_encode_ctx_t *packet_ctx = encoder_ctx; @@ -916,30 +916,30 @@ ssize_t fr_aka_sim_encode_pair(uint8_t *out, size_t outlen, fr_cursor_t *cursor, * Fast path for the common case. */ if ((vp->da->parent == packet_ctx->root) && !vp->da->flags.concat && (vp->vp_type != FR_TYPE_TLV)) { - tlv_stack[0] = vp->da; - tlv_stack[1] = NULL; - FR_PROTO_STACK_PRINT(tlv_stack, 0); - return encode_rfc_hdr(out, attr_len, tlv_stack, 0, cursor, encoder_ctx); + da_stack[0] = vp->da; + da_stack[1] = NULL; + FR_PROTO_STACK_PRINT(da_stack, 0); + return encode_rfc_hdr(out, attr_len, da_stack, 0, cursor, encoder_ctx); } /* * Do more work to set up the stack for the complex case. */ - fr_proto_tlv_stack_build(tlv_stack, vp->da); - FR_PROTO_STACK_PRINT(tlv_stack, 0); + fr_proto_da_stack_build(da_stack, vp->da); + FR_PROTO_STACK_PRINT(da_stack, 0); - da = tlv_stack[0]; + da = da_stack[0]; switch (da->type) { /* * Supported types */ default: - slen = encode_rfc_hdr(out, attr_len, tlv_stack, 0, cursor, encoder_ctx); + slen = encode_rfc_hdr(out, attr_len, da_stack, 0, cursor, encoder_ctx); break; case FR_TYPE_TLV: - slen = encode_tlv_hdr(out, attr_len, tlv_stack, 0, cursor, encoder_ctx); + slen = encode_tlv_hdr(out, attr_len, da_stack, 0, cursor, encoder_ctx); break; } diff --git a/src/lib/server/snmp.c b/src/lib/server/snmp.c index 72bb03a4554..3b50b966c84 100644 --- a/src/lib/server/snmp.c +++ b/src/lib/server/snmp.c @@ -458,7 +458,7 @@ static fr_snmp_map_t snmp_iso[] = { }; static ssize_t snmp_process(fr_cursor_t *out, REQUEST *request, - fr_dict_attr_t const *tlv_stack[], unsigned int depth, + fr_dict_attr_t const *da_stack[], unsigned int depth, fr_cursor_t *cursor, fr_snmp_map_t const *map, void *snmp_ctx, unsigned int snmp_op); @@ -501,28 +501,28 @@ static fr_snmp_map_t const *snmp_map_search(fr_snmp_map_t const map[], fr_dict_a /** Perform depth first traversal of the tree until we hit a leaf node * - * This is used for building a fake tlv_stack, for findNext, so that if + * This is used for building a fake da_stack, for findNext, so that if * we get a findNext operation on something that's not a leaf, we can * find the first leaf under that branch of the tree. * - * @param[out] tlv_stack to rewrite. + * @param[out] da_stack to rewrite. * @param[in] depth at which to start rewriting. * @param[in] map at this level. */ -static void snmp_next_leaf(fr_dict_attr_t const *tlv_stack[], unsigned int depth, fr_snmp_map_t const *map) +static void snmp_next_leaf(fr_dict_attr_t const *da_stack[], unsigned int depth, fr_snmp_map_t const *map) { uint32_t i; fr_snmp_map_t const *map_p = map; for (i = depth; (i < FR_DICT_MAX_TLV_STACK) && map_p; i++) { - tlv_stack[i] = map_p->da; + da_stack[i] = map_p->da; map_p = map_p->child; } - tlv_stack[i] = NULL; + da_stack[i] = NULL; } static ssize_t snmp_process_index(fr_cursor_t *out, REQUEST *request, - fr_dict_attr_t const *tlv_stack[], unsigned int depth, + fr_dict_attr_t const *da_stack[], unsigned int depth, fr_cursor_t cursor, fr_snmp_map_t const *map, void *snmp_ctx, unsigned int snmp_op, uint32_t index_num) @@ -565,7 +565,7 @@ static ssize_t snmp_process_index(fr_cursor_t *out, REQUEST *request, } ret = snmp_process(out, request, - tlv_stack, depth + 1, + da_stack, depth + 1, &cursor, map->child, this_snmp_ctx, snmp_op); TALLOC_FREE(tmp_ctx); @@ -584,7 +584,7 @@ static ssize_t snmp_process_index(fr_cursor_t *out, REQUEST *request, * entry, not at the end (where we previously * were). */ - fr_proto_tlv_stack_build(tlv_stack, map->da); + fr_proto_da_stack_build(da_stack, map->da); this_snmp_ctx = NULL; continue; } @@ -613,7 +613,7 @@ static ssize_t snmp_process_index(fr_cursor_t *out, REQUEST *request, } static ssize_t snmp_process_index_attr(fr_cursor_t *out, REQUEST *request, - fr_dict_attr_t const *tlv_stack[], unsigned int depth, + fr_dict_attr_t const *da_stack[], unsigned int depth, fr_cursor_t *cursor, fr_snmp_map_t const *map, void *snmp_ctx, unsigned int snmp_op) { @@ -621,7 +621,7 @@ static ssize_t snmp_process_index_attr(fr_cursor_t *out, REQUEST *request, uint32_t index_num; VALUE_PAIR *vp; - FR_PROTO_STACK_PRINT(tlv_stack, depth); + FR_PROTO_STACK_PRINT(da_stack, depth); if (map[0].last < &map[1]) { fr_strerror_printf("Invalid OID: Empty map"); @@ -640,10 +640,10 @@ static ssize_t snmp_process_index_attr(fr_cursor_t *out, REQUEST *request, goto error; } - if (tlv_stack[depth]->type != FR_TYPE_UINT32) { + if (da_stack[depth]->type != FR_TYPE_UINT32) { fr_strerror_printf("Bad index attribute: Index attribute \"%s\" should be a integer, " - "but is a %s", tlv_stack[depth]->name, - fr_table_str_by_value(fr_value_box_type_table, tlv_stack[depth]->type, "?Unknown?")); + "but is a %s", da_stack[depth]->name, + fr_table_str_by_value(fr_value_box_type_table, da_stack[depth]->type, "?Unknown?")); goto error; } @@ -659,33 +659,33 @@ static ssize_t snmp_process_index_attr(fr_cursor_t *out, REQUEST *request, */ next = fr_cursor_next_peek(cursor); if (next && fr_dict_parent_common(vp->da, next->da, true)) { - fr_proto_tlv_stack_build(tlv_stack, next->da); + fr_proto_da_stack_build(da_stack, next->da); while ((next = fr_cursor_next(cursor))) if (fr_dict_parent_common(vp->da, next->da, true)) break; } return snmp_process_index(out, request, - tlv_stack, depth, + da_stack, depth, *cursor, &map[1], snmp_ctx, snmp_op, index_num); } static ssize_t snmp_process_tlv(fr_cursor_t *out, REQUEST *request, - fr_dict_attr_t const *tlv_stack[], unsigned int depth, + fr_dict_attr_t const *da_stack[], unsigned int depth, fr_cursor_t *cursor, fr_snmp_map_t const *map, void *snmp_ctx, unsigned int snmp_op) { fr_snmp_map_t const *map_p; ssize_t ret; - FR_PROTO_STACK_PRINT(tlv_stack, depth); + FR_PROTO_STACK_PRINT(da_stack, depth); /* * Return element in map that matches the da at this - * level in the tlv_stack. + * level in the da_stack. */ - map_p = snmp_map_search(map, tlv_stack[depth]); + map_p = snmp_map_search(map, da_stack[depth]); if (!map_p) { invalid: fr_strerror_printf("Invalid OID: Match stopped here"); @@ -706,21 +706,21 @@ static ssize_t snmp_process_tlv(fr_cursor_t *out, REQUEST *request, * as a single attribute (with index 1 being used for * each traversal). * - * The real purpose is to allow the fake tlv_stack + * The real purpose is to allow the fake da_stack * code to work correctly without needing to add * fake index attributes */ if (map_p->index) { return snmp_process_index(out, request, - tlv_stack, depth, + da_stack, depth, *cursor, map_p, snmp_ctx, snmp_op, - tlv_stack[depth]->attr); + da_stack[depth]->attr); } for (;;) { ret = snmp_process(out, request, - tlv_stack, depth + 1, + da_stack, depth + 1, cursor, map_p->child, snmp_ctx, snmp_op); if (ret < 0) return ret; /* error */ @@ -734,22 +734,22 @@ static ssize_t snmp_process_tlv(fr_cursor_t *out, REQUEST *request, } static ssize_t snmp_process_leaf(fr_cursor_t *out, REQUEST *request, - fr_dict_attr_t const *tlv_stack[], unsigned int depth, + fr_dict_attr_t const *da_stack[], unsigned int depth, fr_cursor_t *cursor, fr_snmp_map_t const *map, void *snmp_ctx, unsigned int snmp_op) { VALUE_PAIR *vp; fr_snmp_map_t const *map_p; - FR_PROTO_STACK_PRINT(tlv_stack, depth); + FR_PROTO_STACK_PRINT(da_stack, depth); vp = fr_cursor_current(cursor); /* * Return element in map that matches the da at this - * level in the tlv_stack. + * level in the da_stack. */ - map_p = snmp_map_search(map, tlv_stack[depth]); + map_p = snmp_map_search(map, da_stack[depth]); if (!map_p) { fr_strerror_printf("Invalid OID: Match stopped here"); error: @@ -773,7 +773,7 @@ static ssize_t snmp_process_leaf(fr_cursor_t *out, REQUEST *request, */ if (map_p->type == FR_FREERADIUS_SNMP_TYPE_OBJECT) { return snmp_process(out, request, - tlv_stack, depth + 1, + da_stack, depth + 1, cursor, map_p->child, snmp_ctx, snmp_op); } @@ -859,10 +859,10 @@ static ssize_t snmp_process_leaf(fr_cursor_t *out, REQUEST *request, * * @param[out] out Where to write response attributes. * @param[in] request The current request. - * @param[in,out] tlv_stack we're traversing. - * @param[in] depth we're currently at in the tlv_stack. + * @param[in,out] da_stack we're traversing. + * @param[in] depth we're currently at in the da_stack. * @param[in] cursor representing the current attribute we're processing. - * @param[in] map matching the current depth in the tlv_stack. + * @param[in] map matching the current depth in the da_stack. * @param[in] snmp_ctx allocated by the previous index traversal function. * @param[in] snmp_op we're performing. * @return @@ -872,43 +872,43 @@ static ssize_t snmp_process_leaf(fr_cursor_t *out, REQUEST *request, * - <0 the depth at which an error occurred, as a negative integer. */ static ssize_t snmp_process(fr_cursor_t *out, REQUEST *request, - fr_dict_attr_t const *tlv_stack[], unsigned int depth, + fr_dict_attr_t const *da_stack[], unsigned int depth, fr_cursor_t *cursor, fr_snmp_map_t const *map, void *snmp_ctx, unsigned int snmp_op) { rad_assert(map); - FR_PROTO_STACK_PRINT(tlv_stack, depth); + FR_PROTO_STACK_PRINT(da_stack, depth); /* * We've run out of stack... This is an error unless * we're performing a getNext operation, in which * case we fake the rest of the stack. */ - if (!tlv_stack[depth]) { + if (!da_stack[depth]) { if (snmp_op != FR_FREERADIUS_SNMP_OPERATION_VALUE_GETNEXT) { fr_strerror_printf("Invalid OID: Not a leaf"); return -(ssize_t)(depth - 1); } - snmp_next_leaf(tlv_stack, depth, &map[1]); + snmp_next_leaf(da_stack, depth, &map[1]); } /* * It's an index attribute, use the value of * the index attribute to traverse the index. */ - if (tlv_stack[depth]->attr == 0) return snmp_process_index_attr(out, request, - tlv_stack, depth, + if (da_stack[depth]->attr == 0) return snmp_process_index_attr(out, request, + da_stack, depth, cursor, map, snmp_ctx, snmp_op); /* * It's a TLV, recurse, and locate the map * matching the next deepest DA in the - * tlv_stack. + * da_stack. */ - if (tlv_stack[depth]->type == FR_TYPE_TLV) return snmp_process_tlv(out, request, - tlv_stack, depth, + if (da_stack[depth]->type == FR_TYPE_TLV) return snmp_process_tlv(out, request, + da_stack, depth, cursor, map, snmp_ctx, snmp_op); @@ -917,7 +917,7 @@ static ssize_t snmp_process(fr_cursor_t *out, REQUEST *request, * and create attributes for the response. */ return snmp_process_leaf(out, request, - tlv_stack, depth, + da_stack, depth, cursor, map, snmp_ctx, snmp_op); } @@ -930,7 +930,7 @@ int fr_snmp_process(REQUEST *request) char oid_str[FR_DICT_MAX_TLV_STACK * 4]; /* .{1,3} */ size_t oid_len, len; - fr_dict_attr_t const *tlv_stack[FR_DICT_MAX_TLV_STACK + 1]; + fr_dict_attr_t const *da_stack[FR_DICT_MAX_TLV_STACK + 1]; unsigned int depth; ssize_t ret; @@ -986,20 +986,20 @@ int fr_snmp_process(REQUEST *request) for (vp = fr_cursor_iter_by_ancestor_init(&request_cursor, &request->packet->vps, attr_snmp_root); vp; vp = fr_cursor_next(&request_cursor)) { - fr_proto_tlv_stack_build(tlv_stack, vp->da); + fr_proto_da_stack_build(da_stack, vp->da); /* * Wind to the frame in the TLV stack that matches our * SNMP root. */ - for (depth = 0; tlv_stack[depth]; depth++) if (attr_snmp_root == tlv_stack[depth]) break; + for (depth = 0; da_stack[depth]; depth++) if (attr_snmp_root == da_stack[depth]) break; /* * Any attribute returned by fr_cursor_next_by_ancestor * should have the SNMP root attribute as an ancestor. */ - rad_assert(tlv_stack[depth]); - rad_assert(tlv_stack[depth] == attr_snmp_root); + rad_assert(da_stack[depth]); + rad_assert(da_stack[depth] == attr_snmp_root); /* * Operator attribute acts as a request delimiter @@ -1027,7 +1027,7 @@ int fr_snmp_process(REQUEST *request) * Returns depth (as negative integer) at which the error occurred */ ret = snmp_process(&out_cursor, request, - tlv_stack, depth, + da_stack, depth, &request_cursor, snmp_iso, NULL, op->vp_uint32); if (ret < 0) { @@ -1036,11 +1036,11 @@ int fr_snmp_process(REQUEST *request) oid_str[0] = '.'; /* Get the length of the matching part */ - oid_len = fr_dict_print_attr_oid(NULL, oid_str + 1, sizeof(oid_str) - 1, attr_snmp_root, tlv_stack[-(ret)]); + oid_len = fr_dict_print_attr_oid(NULL, oid_str + 1, sizeof(oid_str) - 1, attr_snmp_root, da_stack[-(ret)]); /* Get the last frame in the current stack */ - for (depth = 0; tlv_stack[depth + 1]; depth++); - len = fr_dict_print_attr_oid(NULL, oid_str + 1, sizeof(oid_str) - 1, attr_snmp_root, tlv_stack[depth]); + for (depth = 0; da_stack[depth + 1]; depth++); + len = fr_dict_print_attr_oid(NULL, oid_str + 1, sizeof(oid_str) - 1, attr_snmp_root, da_stack[depth]); /* Use the difference in OID string length to place the marker */ REMARKER(oid_str, oid_len - (len - oid_len), "%s", fr_strerror()); diff --git a/src/lib/util/dict_print.c b/src/lib/util/dict_print.c index 64b5fddd4c4..67fb33878b8 100644 --- a/src/lib/util/dict_print.c +++ b/src/lib/util/dict_print.c @@ -100,7 +100,7 @@ do { \ return len; } -/** Build the tlv_stack for the specified DA and encode the path in OID form +/** Build the da_stack for the specified DA and encode the path in OID form * * @param[out] need How many bytes we would need to print the * next part of the string. @@ -120,7 +120,7 @@ size_t fr_dict_print_attr_oid(size_t *need, char *out, size_t outlen, char *p = out, *end = p + outlen; int i; int depth = 0; - fr_dict_attr_t const *tlv_stack[FR_DICT_MAX_TLV_STACK + 1]; + fr_dict_attr_t const *da_stack[FR_DICT_MAX_TLV_STACK + 1]; RETURN_IF_NO_SPACE_INIT(need, 1, p, out, end); @@ -133,10 +133,10 @@ size_t fr_dict_print_attr_oid(size_t *need, char *out, size_t outlen, return 0; } - fr_proto_tlv_stack_build(tlv_stack, da); + fr_proto_da_stack_build(da_stack, da); if (ancestor) { - if (tlv_stack[ancestor->depth - 1] != ancestor) { + if (da_stack[ancestor->depth - 1] != ancestor) { fr_strerror_printf("Attribute \"%s\" is not a descendent of \"%s\"", da->name, ancestor->name); return -1; } @@ -147,11 +147,11 @@ size_t fr_dict_print_attr_oid(size_t *need, char *out, size_t outlen, * We don't print the ancestor, we print the OID * between it and the da. */ - len = snprintf(p, end - p, "%u", tlv_stack[depth]->attr); + len = snprintf(p, end - p, "%u", da_stack[depth]->attr); RETURN_IF_TRUNCATED(need, len, p, out, end); for (i = depth + 1; i < (int)da->depth; i++) { - len = snprintf(p, end - p, ".%u", tlv_stack[i]->attr); + len = snprintf(p, end - p, ".%u", da_stack[i]->attr); RETURN_IF_TRUNCATED(need, len, p, out, end); } diff --git a/src/lib/util/pair.c b/src/lib/util/pair.c index 19ef23d21d3..d8d99c18e88 100644 --- a/src/lib/util/pair.c +++ b/src/lib/util/pair.c @@ -831,8 +831,8 @@ int8_t fr_pair_cmp_by_parent_num_tag(void const *a, void const *b) VALUE_PAIR const *vp_b = b; fr_dict_attr_t const *da_a = vp_a->da; fr_dict_attr_t const *da_b = vp_b->da; - fr_dict_attr_t const *tlv_stack_a[FR_DICT_MAX_TLV_STACK + 1]; - fr_dict_attr_t const *tlv_stack_b[FR_DICT_MAX_TLV_STACK + 1]; + fr_dict_attr_t const *da_stack_a[FR_DICT_MAX_TLV_STACK + 1]; + fr_dict_attr_t const *da_stack_b[FR_DICT_MAX_TLV_STACK + 1]; int i; /* @@ -841,10 +841,10 @@ int8_t fr_pair_cmp_by_parent_num_tag(void const *a, void const *b) */ if ((da_a->parent->flags.is_root) && (da_b->parent->flags.is_root)) return pair_cmp_by_num_tag(vp_a, vp_b); - fr_proto_tlv_stack_build(tlv_stack_a, da_a); - fr_proto_tlv_stack_build(tlv_stack_b, da_b); + fr_proto_da_stack_build(da_stack_a, da_a); + fr_proto_da_stack_build(da_stack_b, da_b); - for (i = 0; (da_a = tlv_stack_a[i]) && (da_b = tlv_stack_b[i]); i++) { + for (i = 0; (da_a = da_stack_a[i]) && (da_b = da_stack_b[i]); i++) { if (da_a->attr > da_b->attr) return +1; if (da_a->attr < da_b->attr) return -1; } diff --git a/src/lib/util/proto.c b/src/lib/util/proto.c index 6992492f7ca..e7414141cf1 100644 --- a/src/lib/util/proto.c +++ b/src/lib/util/proto.c @@ -54,11 +54,11 @@ void fr_proto_print_hex_data(char const *file, int line, uint8_t const *data, si } DIAG_ON(format-nonliteral) -void fr_proto_tlv_stack_print(char const *file, int line, char const *func, fr_dict_attr_t const **tlv_stack, unsigned int depth) +void fr_proto_da_stack_print(char const *file, int line, char const *func, fr_dict_attr_t const **da_stack, unsigned int depth) { int i; - for (i = 0; (i < FR_DICT_MAX_TLV_STACK) && tlv_stack[i]; i++); + for (i = 0; (i < FR_DICT_MAX_TLV_STACK) && da_stack[i]; i++); if (!i) return; fr_log(&default_log, L_DBG, file, line, "stk: Currently in %s", func); @@ -66,29 +66,29 @@ void fr_proto_tlv_stack_print(char const *file, int line, char const *func, fr_d fr_log(&default_log, L_DBG, file, line, "stk: %s [%i] %s: %s, vendor: 0x%x (%u), attr: 0x%x (%u)", (i == (int)depth) ? ">" : " ", i, - fr_table_str_by_value(fr_value_box_type_table, tlv_stack[i]->type, "?Unknown?"), - tlv_stack[i]->name, - fr_dict_vendor_num_by_da(tlv_stack[i]), fr_dict_vendor_num_by_da(tlv_stack[i]), - tlv_stack[i]->attr, tlv_stack[i]->attr); + fr_table_str_by_value(fr_value_box_type_table, da_stack[i]->type, "?Unknown?"), + da_stack[i]->name, + fr_dict_vendor_num_by_da(da_stack[i]), fr_dict_vendor_num_by_da(da_stack[i]), + da_stack[i]->attr, da_stack[i]->attr); } fr_log(&default_log, L_DBG, file, line, "stk:"); } -void fr_proto_tlv_stack_build(fr_dict_attr_t const **tlv_stack, fr_dict_attr_t const *da) +void fr_proto_da_stack_build(fr_dict_attr_t const **da_stack, fr_dict_attr_t const *da) { int i; fr_dict_attr_t const *da_p; - memset(tlv_stack, 0, sizeof(*tlv_stack) * (FR_DICT_MAX_TLV_STACK + 1)); + memset(da_stack, 0, sizeof(*da_stack) * (FR_DICT_MAX_TLV_STACK + 1)); if (!da) return; /* * We've finished encoding one nested structure - * now we need to rebuild the tlv_stack and determine + * now we need to rebuild the da_stack and determine * where the common point is. */ for (i = da->depth, da_p = da; da_p->parent && (i >= 0); - i--, da_p = da_p->parent) tlv_stack[i - 1] = da_p; + i--, da_p = da_p->parent) da_stack[i - 1] = da_p; } diff --git a/src/lib/util/proto.h b/src/lib/util/proto.h index 01485e90c4c..47c0b910843 100644 --- a/src/lib/util/proto.h +++ b/src/lib/util/proto.h @@ -39,7 +39,7 @@ do { \ #ifndef NDEBUG # define FR_PROTO_TRACE(_fmt, ...) if (fr_debug_lvl > L_DBG_LVL_3) fr_proto_print(__FILE__, __LINE__, _fmt, ## __VA_ARGS__) # define FR_PROTO_HEX_DUMP(_data, _data_len, _fmt, ...) if (fr_debug_lvl > L_DBG_LVL_3) fr_proto_print_hex_data(__FILE__, __LINE__, _data, _data_len, _fmt, ## __VA_ARGS__) -# define FR_PROTO_STACK_PRINT(_x, _y) if (fr_debug_lvl > L_DBG_LVL_3) fr_proto_tlv_stack_print( __FILE__, __LINE__, __FUNCTION__, _x, _y) +# define FR_PROTO_STACK_PRINT(_x, _y) if (fr_debug_lvl > L_DBG_LVL_3) fr_proto_da_stack_print( __FILE__, __LINE__, __FUNCTION__, _x, _y) #else # define FR_PROTO_TRACE(_fmt, ...) # define FR_PROTO_HEX_DUMP(_data, _data_len, _fmt, ...) @@ -50,9 +50,9 @@ void fr_proto_print(char const *file, int line, char const *fmt, ...) CC_HINT(fo void fr_proto_print_hex_data(char const *file, int line, uint8_t const *data, size_t data_len, char const *fmt, ...); -void fr_proto_tlv_stack_print(char const *file, int line, char const *func, fr_dict_attr_t const **tlv_stack, unsigned int depth); +void fr_proto_da_stack_print(char const *file, int line, char const *func, fr_dict_attr_t const **da_stack, unsigned int depth); -void fr_proto_tlv_stack_build(fr_dict_attr_t const **tlv_stack, fr_dict_attr_t const *da); +void fr_proto_da_stack_build(fr_dict_attr_t const **da_stack, fr_dict_attr_t const *da); #ifdef __cplusplus } diff --git a/src/lib/util/struct.c b/src/lib/util/struct.c index 055d2a0a5f8..08fe7774fc3 100644 --- a/src/lib/util/struct.c +++ b/src/lib/util/struct.c @@ -411,7 +411,7 @@ static int put_bits(uint8_t *p, uint8_t const *end, int start_bit, int num_bits, ssize_t fr_struct_to_network(uint8_t *out, size_t outlen, - fr_dict_attr_t const **tlv_stack, unsigned int depth, + fr_dict_attr_t const **da_stack, unsigned int depth, fr_cursor_t *cursor, void *encoder_ctx, fr_encode_value_t encode_value) { @@ -429,7 +429,7 @@ ssize_t fr_struct_to_network(uint8_t *out, size_t outlen, } VP_VERIFY(vp); - parent = tlv_stack[depth]; + parent = da_stack[depth]; if (parent->type != FR_TYPE_STRUCT) { fr_strerror_printf("%s: Expected type \"struct\" got \"%s\"", __FUNCTION__, @@ -591,8 +591,8 @@ ssize_t fr_struct_to_network(uint8_t *out, size_t outlen, /* * Call the protocol encoder for non-bit fields. */ - fr_proto_tlv_stack_build(tlv_stack, child); - slen = encode_value(p, outlen, tlv_stack, depth + 1, cursor, encoder_ctx); + fr_proto_da_stack_build(da_stack, child); + slen = encode_value(p, outlen, da_stack, depth + 1, cursor, encoder_ctx); if (slen < 0) return slen; len = slen; vp = fr_cursor_current(cursor); @@ -653,8 +653,8 @@ ssize_t fr_struct_to_network(uint8_t *out, size_t outlen, */ if ((vp->da->parent->parent == key_da) && (vp->da->parent->type == FR_TYPE_STRUCT)) { - fr_proto_tlv_stack_build(tlv_stack, vp->da->parent); - len = fr_struct_to_network(p, outlen, tlv_stack, depth + 2, /* note + 2 !!! */ + fr_proto_da_stack_build(da_stack, vp->da->parent); + len = fr_struct_to_network(p, outlen, da_stack, depth + 2, /* note + 2 !!! */ cursor, encoder_ctx, encode_value); if (len < 0) return len; p += len; diff --git a/src/lib/util/struct.h b/src/lib/util/struct.h index 99e57e15ad2..31c815bf206 100644 --- a/src/lib/util/struct.h +++ b/src/lib/util/struct.h @@ -40,10 +40,10 @@ ssize_t fr_struct_from_network(TALLOC_CTX *ctx, fr_cursor_t *cursor, fr_dict_attr_t const **child, fr_decode_value_t decode_value, void *decoder_ctx) CC_HINT(nonnull(2,3,4)); -typedef ssize_t (*fr_encode_value_t)(uint8_t *out, size_t outlen, fr_dict_attr_t const **tlv_stack, unsigned int depth, +typedef ssize_t (*fr_encode_value_t)(uint8_t *out, size_t outlen, fr_dict_attr_t const **da_stack, unsigned int depth, fr_cursor_t *cursor, void *encoder_ctx); -ssize_t fr_struct_to_network(uint8_t *out, size_t outlen, fr_dict_attr_t const **tlv_stack, unsigned int depth, +ssize_t fr_struct_to_network(uint8_t *out, size_t outlen, fr_dict_attr_t const **da_stack, unsigned int depth, fr_cursor_t *cursor, void *encoder_ctx, fr_encode_value_t encode_value) CC_HINT(nonnull(1,3,5)); diff --git a/src/protocols/dhcpv4/encode.c b/src/protocols/dhcpv4/encode.c index 207d435006a..600cc7fc531 100644 --- a/src/protocols/dhcpv4/encode.c +++ b/src/protocols/dhcpv4/encode.c @@ -85,8 +85,8 @@ static inline VALUE_PAIR *first_encodable(fr_cursor_t *cursor, void *encoder_ctx * * @param[out] out buffer to write the option to. * @param[in] outlen length of the output buffer. - * @param[in] tlv_stack Describing nesting of options. - * @param[in] depth in tlv_stack. + * @param[in] da_stack Describing nesting of options. + * @param[in] depth in da_stack. * @param[in,out] cursor Current attribute we're encoding. * @param[in] encoder_ctx Containing DHCPv4 dictionary. * @return @@ -95,7 +95,7 @@ static inline VALUE_PAIR *first_encodable(fr_cursor_t *cursor, void *encoder_ctx * - -2 if unsupported type. */ static ssize_t encode_value(uint8_t *out, size_t outlen, - fr_dict_attr_t const **tlv_stack, unsigned int depth, + fr_dict_attr_t const **da_stack, unsigned int depth, fr_cursor_t *cursor, fr_dhcpv4_ctx_t *encoder_ctx) { VALUE_PAIR *vp = fr_cursor_current(cursor); @@ -103,12 +103,12 @@ static ssize_t encode_value(uint8_t *out, size_t outlen, size_t need = 0; ssize_t len; - FR_PROTO_STACK_PRINT(tlv_stack, depth); + FR_PROTO_STACK_PRINT(da_stack, depth); FR_PROTO_TRACE("%zu byte(s) available for value", outlen); if (outlen < vp->vp_length) return -1; /* Not enough output buffer space. */ - switch (tlv_stack[depth]->type) { + switch (da_stack[depth]->type) { case FR_TYPE_BOOL: case FR_TYPE_UINT8: case FR_TYPE_UINT16: @@ -148,9 +148,9 @@ static ssize_t encode_value(uint8_t *out, size_t outlen, return -2; } vp = next_encodable(cursor, encoder_ctx); /* We encoded a leaf, advance the cursor */ - fr_proto_tlv_stack_build(tlv_stack, vp ? vp->da : NULL); + fr_proto_da_stack_build(da_stack, vp ? vp->da : NULL); - FR_PROTO_STACK_PRINT(tlv_stack, depth); + FR_PROTO_STACK_PRINT(da_stack, depth); FR_PROTO_HEX_DUMP(out, (p - out), "Value"); return p - out; @@ -240,8 +240,8 @@ static uint8_t *extend_option(uint8_t *start, uint8_t *end, uint8_t *p, int len) * * @param[out] out buffer to write the TLV to. * @param[in] outlen length of the output buffer. - * @param[in] tlv_stack Describing nesting of options. - * @param[in] depth in the tlv_stack. + * @param[in] da_stack Describing nesting of options. + * @param[in] depth in the da_stack. * @param[in,out] cursor Current attribute we're encoding. * @param[in] encoder_ctx Containing DHCPv4 dictionary. * @return @@ -250,18 +250,18 @@ static uint8_t *extend_option(uint8_t *start, uint8_t *end, uint8_t *p, int len) * - < 0 on error. */ static ssize_t encode_rfc_hdr(uint8_t *out, ssize_t outlen, - fr_dict_attr_t const **tlv_stack, unsigned int depth, + fr_dict_attr_t const **da_stack, unsigned int depth, fr_cursor_t *cursor, fr_dhcpv4_ctx_t *encoder_ctx) { ssize_t len; uint8_t *p = out; uint8_t *start, *end; - fr_dict_attr_t const *da = tlv_stack[depth]; + fr_dict_attr_t const *da = da_stack[depth]; VALUE_PAIR *vp = fr_cursor_current(cursor); if (outlen < 3) return 0; /* No space */ - FR_PROTO_STACK_PRINT(tlv_stack, depth); + FR_PROTO_STACK_PRINT(da_stack, depth); /* * Write out the option number @@ -297,7 +297,7 @@ static ssize_t encode_rfc_hdr(uint8_t *out, ssize_t outlen, break; } - len = encode_value(p, end - p, tlv_stack, depth, cursor, encoder_ctx); + len = encode_value(p, end - p, da_stack, depth, cursor, encoder_ctx); if (len < -1) return len; if (len == -1) { FR_PROTO_TRACE("No more space in option"); @@ -308,7 +308,7 @@ static ssize_t encode_rfc_hdr(uint8_t *out, ssize_t outlen, break; /* Packed as much as we can */ } - FR_PROTO_STACK_PRINT(tlv_stack, depth); + FR_PROTO_STACK_PRINT(da_stack, depth); FR_PROTO_TRACE("Encoded value is %zu byte(s)", len); FR_PROTO_HEX_DUMP(start, (p - start), NULL); @@ -336,8 +336,8 @@ static ssize_t encode_rfc_hdr(uint8_t *out, ssize_t outlen, * * @param[out] out buffer to write the TLV to. * @param[in] outlen length of the output buffer. - * @param[in] tlv_stack Describing nesting of options. - * @param[in] depth in the tlv_stack. + * @param[in] da_stack Describing nesting of options. + * @param[in] depth in the da_stack. * @param[in,out] cursor Current attribute we're encoding. * @param[in] encoder_ctx Containing DHCPv4 dictionary. * @return @@ -346,18 +346,18 @@ static ssize_t encode_rfc_hdr(uint8_t *out, ssize_t outlen, * - < 0 on error. */ static ssize_t encode_tlv_hdr(uint8_t *out, ssize_t outlen, - fr_dict_attr_t const **tlv_stack, unsigned int depth, + fr_dict_attr_t const **da_stack, unsigned int depth, fr_cursor_t *cursor, fr_dhcpv4_ctx_t *encoder_ctx) { ssize_t len; uint8_t *p = out; uint8_t *start, *end; VALUE_PAIR const *vp = fr_cursor_current(cursor); - fr_dict_attr_t const *da = tlv_stack[depth]; + fr_dict_attr_t const *da = da_stack[depth]; if (outlen < 5) return 0; /* No space */ - FR_PROTO_STACK_PRINT(tlv_stack, depth); + FR_PROTO_STACK_PRINT(da_stack, depth); /* * Write out the option number @@ -376,10 +376,10 @@ static ssize_t encode_tlv_hdr(uint8_t *out, ssize_t outlen, /* * Determine the nested type and call the appropriate encoder */ - if (tlv_stack[depth + 1]->type == FR_TYPE_TLV) { - len = encode_tlv_hdr(p, end - p, tlv_stack, depth + 1, cursor, encoder_ctx); + if (da_stack[depth + 1]->type == FR_TYPE_TLV) { + len = encode_tlv_hdr(p, end - p, da_stack, depth + 1, cursor, encoder_ctx); } else { - len = encode_rfc_hdr(p, end - p, tlv_stack, depth + 1, cursor, encoder_ctx); + len = encode_rfc_hdr(p, end - p, da_stack, depth + 1, cursor, encoder_ctx); } if (len < 0) return len; if (len == 0) break; /* Insufficient space */ @@ -439,7 +439,7 @@ static ssize_t encode_tlv_hdr(uint8_t *out, ssize_t outlen, } } - FR_PROTO_STACK_PRINT(tlv_stack, depth); + FR_PROTO_STACK_PRINT(da_stack, depth); FR_PROTO_HEX_DUMP(out, (p - start), "TLV header and sub TLVs"); /* @@ -452,7 +452,7 @@ static ssize_t encode_tlv_hdr(uint8_t *out, ssize_t outlen, * rebuilding the TLV Stack, the attribute * at this depth is the same. */ - if (da != tlv_stack[depth]) break; + if (da != da_stack[depth]) break; vp = fr_cursor_current(cursor); } @@ -475,7 +475,7 @@ ssize_t fr_dhcpv4_encode_option(uint8_t *out, size_t outlen, fr_cursor_t *cursor { VALUE_PAIR *vp; unsigned int depth = 0; - fr_dict_attr_t const *tlv_stack[FR_DICT_MAX_TLV_STACK + 1]; + fr_dict_attr_t const *da_stack[FR_DICT_MAX_TLV_STACK + 1]; ssize_t len; vp = first_encodable(cursor, encoder_ctx); @@ -489,20 +489,20 @@ ssize_t fr_dhcpv4_encode_option(uint8_t *out, size_t outlen, fr_cursor_t *cursor return 0; } - fr_proto_tlv_stack_build(tlv_stack, vp->da); + fr_proto_da_stack_build(da_stack, vp->da); - FR_PROTO_STACK_PRINT(tlv_stack, depth); + FR_PROTO_STACK_PRINT(da_stack, depth); /* * We only have two types of options in DHCPv4 */ - switch (tlv_stack[depth]->type) { + switch (da_stack[depth]->type) { case FR_TYPE_TLV: - len = encode_tlv_hdr(out, outlen, tlv_stack, depth, cursor, encoder_ctx); + len = encode_tlv_hdr(out, outlen, da_stack, depth, cursor, encoder_ctx); break; default: - len = encode_rfc_hdr(out, outlen, tlv_stack, depth, cursor, encoder_ctx); + len = encode_rfc_hdr(out, outlen, da_stack, depth, cursor, encoder_ctx); break; } diff --git a/src/protocols/dhcpv6/encode.c b/src/protocols/dhcpv6/encode.c index 2b62a5771cb..f3cf3e9271d 100644 --- a/src/protocols/dhcpv6/encode.c +++ b/src/protocols/dhcpv6/encode.c @@ -39,15 +39,15 @@ #include "attrs.h" static ssize_t encode_value(uint8_t *out, size_t outlen, - fr_dict_attr_t const **tlv_stack, unsigned int depth, + fr_dict_attr_t const **da_stack, unsigned int depth, fr_cursor_t *cursor, void *encoder_ctx); static ssize_t encode_rfc_hdr(uint8_t *out, size_t outlen, - fr_dict_attr_t const **tlv_stack, unsigned int depth, + fr_dict_attr_t const **da_stack, unsigned int depth, fr_cursor_t *cursor, void *encoder_ctx); static ssize_t encode_tlv_hdr(uint8_t *out, size_t outlen, - fr_dict_attr_t const **tlv_stack, unsigned int depth, + fr_dict_attr_t const **da_stack, unsigned int depth, fr_cursor_t *cursor, void *encoder_ctx); static inline bool is_encodable(fr_dict_attr_t const *root, VALUE_PAIR const *vp) @@ -133,37 +133,37 @@ static inline ssize_t encode_option_hdr(uint8_t *out, size_t outlen, uint16_t op } static ssize_t encode_struct(uint8_t *out, size_t outlen, - fr_dict_attr_t const **tlv_stack, unsigned int depth, + fr_dict_attr_t const **da_stack, unsigned int depth, fr_cursor_t *cursor, void *encoder_ctx) { VP_VERIFY(fr_cursor_current(cursor)); - FR_PROTO_STACK_PRINT(tlv_stack, depth); + FR_PROTO_STACK_PRINT(da_stack, depth); - if (tlv_stack[depth]->type != FR_TYPE_STRUCT) { + if (da_stack[depth]->type != FR_TYPE_STRUCT) { fr_strerror_printf("%s: Expected type \"struct\" got \"%s\"", __FUNCTION__, - fr_table_str_by_value(fr_value_box_type_table, tlv_stack[depth]->type, "?Unknown?")); + fr_table_str_by_value(fr_value_box_type_table, da_stack[depth]->type, "?Unknown?")); return PAIR_ENCODE_FATAL_ERROR; } - if (!tlv_stack[depth + 1]) { + if (!da_stack[depth + 1]) { fr_strerror_printf("%s: Can't encode empty struct", __FUNCTION__); return PAIR_ENCODE_FATAL_ERROR; } - return fr_struct_to_network(out, outlen, tlv_stack, depth, cursor, encoder_ctx, encode_value); + return fr_struct_to_network(out, outlen, da_stack, depth, cursor, encoder_ctx, encode_value); } static ssize_t encode_value(uint8_t *out, size_t outlen, - fr_dict_attr_t const **tlv_stack, unsigned int depth, + fr_dict_attr_t const **da_stack, unsigned int depth, fr_cursor_t *cursor, void *encoder_ctx) { ssize_t slen; uint8_t *p = out, *end = p + outlen; VALUE_PAIR const *vp = fr_cursor_current(cursor); - fr_dict_attr_t const *da = tlv_stack[depth]; + fr_dict_attr_t const *da = da_stack[depth]; VP_VERIFY(vp); - FR_PROTO_STACK_PRINT(tlv_stack, depth); + FR_PROTO_STACK_PRINT(da_stack, depth); /* * Pack multiple attributes into into a single option @@ -171,7 +171,7 @@ static ssize_t encode_value(uint8_t *out, size_t outlen, if (da->type == FR_TYPE_STRUCT) { fr_dhcpv6_encode_ctx_t *packet_ctx = encoder_ctx; - slen = encode_struct(out, outlen, tlv_stack, depth, cursor, encoder_ctx); + slen = encode_struct(out, outlen, da_stack, depth, cursor, encoder_ctx); if (slen < 0) return slen; /* @@ -185,7 +185,7 @@ static ssize_t encode_value(uint8_t *out, size_t outlen, if (!is_encodable(packet_ctx->root, vp)) { vp = next_encodable(cursor, packet_ctx); } - fr_proto_tlv_stack_build(tlv_stack, vp ? vp->da : NULL); + fr_proto_da_stack_build(da_stack, vp ? vp->da : NULL); return slen; } @@ -193,7 +193,7 @@ static ssize_t encode_value(uint8_t *out, size_t outlen, * If it's not a TLV, it should be a value type RFC * attribute make sure that it is. */ - if (tlv_stack[depth + 1] != NULL) { + if (da_stack[depth + 1] != NULL) { fr_strerror_printf("%s: Encoding value but not at top of stack", __FUNCTION__); return PAIR_ENCODE_FATAL_ERROR; } @@ -473,20 +473,20 @@ static ssize_t encode_value(uint8_t *out, size_t outlen, * Rebuilds the TLV stack for encoding the next attribute */ vp = next_encodable(cursor, encoder_ctx); - fr_proto_tlv_stack_build(tlv_stack, vp ? vp->da : NULL); + fr_proto_da_stack_build(da_stack, vp ? vp->da : NULL); return p - out; } static inline ssize_t encode_array(uint8_t *out, size_t outlen, - fr_dict_attr_t const **tlv_stack, int depth, + fr_dict_attr_t const **da_stack, int depth, fr_cursor_t *cursor, void *encoder_ctx) { uint8_t *p = out, *end = p + outlen; ssize_t slen; size_t element_len; VALUE_PAIR *vp; - fr_dict_attr_t const *da = tlv_stack[depth]; + fr_dict_attr_t const *da = da_stack[depth]; if (!fr_cond_assert_msg(da->flags.array, "%s: Internal sanity check failed, attribute \"%s\" does not have array bit set", @@ -535,7 +535,7 @@ static inline ssize_t encode_array(uint8_t *out, size_t outlen, p += sizeof(uint16_t); /* Make room for the length field */ } - slen = encode_value(p, end - p, tlv_stack, depth, cursor, encoder_ctx); + slen = encode_value(p, end - p, da_stack, depth, cursor, encoder_ctx); if (slen < 0) return slen; if (!fr_cond_assert(slen < UINT16_MAX)) return PAIR_ENCODE_FATAL_ERROR; @@ -568,26 +568,26 @@ static inline ssize_t encode_array(uint8_t *out, size_t outlen, } static ssize_t encode_tlv(uint8_t *out, size_t outlen, - fr_dict_attr_t const **tlv_stack, unsigned int depth, + fr_dict_attr_t const **da_stack, unsigned int depth, fr_cursor_t *cursor, void *encoder_ctx) { ssize_t slen; uint8_t *p = out, *end = p + outlen; VALUE_PAIR const *vp = fr_cursor_current(cursor); - fr_dict_attr_t const *da = tlv_stack[depth]; + fr_dict_attr_t const *da = da_stack[depth]; CHECK_FREESPACE(outlen, OPT_HDR_LEN); while ((size_t)(end - p) > OPT_HDR_LEN) { - FR_PROTO_STACK_PRINT(tlv_stack, depth); + FR_PROTO_STACK_PRINT(da_stack, depth); /* * Determine the nested type and call the appropriate encoder */ - if (tlv_stack[depth + 1]->type == FR_TYPE_TLV) { - slen = encode_tlv_hdr(p, end - p, tlv_stack, depth + 1, cursor, encoder_ctx); + if (da_stack[depth + 1]->type == FR_TYPE_TLV) { + slen = encode_tlv_hdr(p, end - p, da_stack, depth + 1, cursor, encoder_ctx); } else { - slen = encode_rfc_hdr(p, end - p, tlv_stack, depth + 1, cursor, encoder_ctx); + slen = encode_rfc_hdr(p, end - p, da_stack, depth + 1, cursor, encoder_ctx); } if (slen < 0) return slen; @@ -603,7 +603,7 @@ static ssize_t encode_tlv(uint8_t *out, size_t outlen, * rebuilding the TLV Stack, the attribute * at this depth is the same. */ - if (da != tlv_stack[depth]) break; + if (da != da_stack[depth]) break; vp = fr_cursor_current(cursor); } @@ -621,14 +621,14 @@ static ssize_t encode_tlv(uint8_t *out, size_t outlen, * Otherwise, attribute may be something else. */ static ssize_t encode_rfc_hdr(uint8_t *out, size_t outlen, - fr_dict_attr_t const **tlv_stack, unsigned int depth, + fr_dict_attr_t const **da_stack, unsigned int depth, fr_cursor_t *cursor, void *encoder_ctx) { uint8_t *p = out, *end = p + outlen; ssize_t slen; - fr_dict_attr_t const *da = tlv_stack[depth]; + fr_dict_attr_t const *da = da_stack[depth]; - FR_PROTO_STACK_PRINT(tlv_stack, depth); + FR_PROTO_STACK_PRINT(da_stack, depth); CHECK_FREESPACE(outlen, OPT_HDR_LEN); @@ -641,9 +641,9 @@ static ssize_t encode_rfc_hdr(uint8_t *out, size_t outlen, * Write out the option's value */ if (da->flags.array) { - slen = encode_array(p, end - p, tlv_stack, depth, cursor, encoder_ctx); + slen = encode_array(p, end - p, da_stack, depth, cursor, encoder_ctx); } else { - slen = encode_value(p, end - p, tlv_stack, depth, cursor, encoder_ctx); + slen = encode_value(p, end - p, da_stack, depth, cursor, encoder_ctx); } if (slen < 0) return slen; p += slen; @@ -662,23 +662,23 @@ static ssize_t encode_rfc_hdr(uint8_t *out, size_t outlen, } static ssize_t encode_tlv_hdr(uint8_t *out, size_t outlen, - fr_dict_attr_t const **tlv_stack, unsigned int depth, + fr_dict_attr_t const **da_stack, unsigned int depth, fr_cursor_t *cursor, void *encoder_ctx) { ssize_t slen; uint8_t *p = out, *end = p + outlen; - fr_dict_attr_t const *da = tlv_stack[depth]; + fr_dict_attr_t const *da = da_stack[depth]; VP_VERIFY(fr_cursor_current(cursor)); - FR_PROTO_STACK_PRINT(tlv_stack, depth); + FR_PROTO_STACK_PRINT(da_stack, depth); - if (tlv_stack[depth]->type != FR_TYPE_TLV) { + if (da_stack[depth]->type != FR_TYPE_TLV) { fr_strerror_printf("%s: Expected type \"tlv\" got \"%s\"", __FUNCTION__, - fr_table_str_by_value(fr_value_box_type_table, tlv_stack[depth]->type, "?Unknown?")); + fr_table_str_by_value(fr_value_box_type_table, da_stack[depth]->type, "?Unknown?")); return PAIR_ENCODE_FATAL_ERROR; } - if (!tlv_stack[depth + 1]) { + if (!da_stack[depth + 1]) { fr_strerror_printf("%s: Can't encode empty TLV", __FUNCTION__); return PAIR_ENCODE_FATAL_ERROR; } @@ -686,7 +686,7 @@ static ssize_t encode_tlv_hdr(uint8_t *out, size_t outlen, CHECK_FREESPACE(outlen, OPT_HDR_LEN); p += OPT_HDR_LEN; /* Make room for option header */ - slen = encode_tlv(p, end - p, tlv_stack, depth, cursor, encoder_ctx); + slen = encode_tlv(p, end - p, da_stack, depth, cursor, encoder_ctx); if (slen < 0) return slen; p += slen; @@ -722,16 +722,16 @@ static ssize_t encode_tlv_hdr(uint8_t *out, size_t outlen, * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */ static ssize_t encode_vsio_hdr(uint8_t *out, size_t outlen, - fr_dict_attr_t const **tlv_stack, unsigned int depth, + fr_dict_attr_t const **da_stack, unsigned int depth, fr_cursor_t *cursor, void *encoder_ctx) { ssize_t slen; uint32_t pen; uint8_t *p = out, *end = p + outlen; - fr_dict_attr_t const *da = tlv_stack[depth]; + fr_dict_attr_t const *da = da_stack[depth]; fr_dict_attr_t const *dv; - FR_PROTO_STACK_PRINT(tlv_stack, depth); + FR_PROTO_STACK_PRINT(da_stack, depth); /* * DA should be a VSA type with the value of OPTION_VENDOR_OPTS. @@ -751,8 +751,8 @@ static ssize_t encode_vsio_hdr(uint8_t *out, size_t outlen, /* * Now process the vendor ID part (which is one attribute deeper) */ - dv = tlv_stack[++depth]; - FR_PROTO_STACK_PRINT(tlv_stack, depth); + dv = da_stack[++depth]; + FR_PROTO_STACK_PRINT(da_stack, depth); if (dv->type != FR_TYPE_VENDOR) { fr_strerror_printf("%s: Expected type \"vsa\" got \"%s\"", __FUNCTION__, @@ -792,13 +792,13 @@ static ssize_t encode_vsio_hdr(uint8_t *out, size_t outlen, * Encode the different data types */ if (da->type == FR_TYPE_TLV) { - slen = encode_tlv_hdr(p, end - p, tlv_stack, depth + 1, cursor, encoder_ctx); + slen = encode_tlv_hdr(p, end - p, da_stack, depth + 1, cursor, encoder_ctx); } else { /* * Normal vendor option */ - slen = encode_rfc_hdr(p, end - p, tlv_stack, depth + 1, cursor, encoder_ctx); + slen = encode_rfc_hdr(p, end - p, da_stack, depth + 1, cursor, encoder_ctx); } if (slen < 0) return slen; @@ -828,7 +828,7 @@ ssize_t fr_dhcpv6_encode_option(uint8_t *out, size_t outlen, fr_cursor_t *cursor { VALUE_PAIR *vp; unsigned int depth = 0; - fr_dict_attr_t const *tlv_stack[FR_DICT_MAX_TLV_STACK + 1]; + fr_dict_attr_t const *da_stack[FR_DICT_MAX_TLV_STACK + 1]; ssize_t slen; vp = first_encodable(cursor, encoder_ctx); @@ -840,9 +840,9 @@ ssize_t fr_dhcpv6_encode_option(uint8_t *out, size_t outlen, fr_cursor_t *cursor return PAIR_ENCODE_SKIPPED; } - fr_proto_tlv_stack_build(tlv_stack, vp->da); + fr_proto_da_stack_build(da_stack, vp->da); - FR_PROTO_STACK_PRINT(tlv_stack, depth); + FR_PROTO_STACK_PRINT(da_stack, depth); /* * Trim output buffer size for sanity @@ -852,17 +852,17 @@ ssize_t fr_dhcpv6_encode_option(uint8_t *out, size_t outlen, fr_cursor_t *cursor /* * Deal with nested options */ - switch (tlv_stack[depth]->type) { + switch (da_stack[depth]->type) { case FR_TYPE_TLV: - slen = encode_tlv_hdr(out, outlen, tlv_stack, depth, cursor, encoder_ctx); + slen = encode_tlv_hdr(out, outlen, da_stack, depth, cursor, encoder_ctx); break; case FR_TYPE_VSA: - slen = encode_vsio_hdr(out, outlen, tlv_stack, depth, cursor, encoder_ctx); + slen = encode_vsio_hdr(out, outlen, da_stack, depth, cursor, encoder_ctx); break; default: - slen = encode_rfc_hdr(out, outlen, tlv_stack, depth, cursor, encoder_ctx); + slen = encode_rfc_hdr(out, outlen, da_stack, depth, cursor, encoder_ctx); break; } diff --git a/src/protocols/radius/encode.c b/src/protocols/radius/encode.c index 255507ae1db..e7b115d8c42 100644 --- a/src/protocols/radius/encode.c +++ b/src/protocols/radius/encode.c @@ -31,15 +31,15 @@ RCSID("$Id$") #include "attrs.h" static ssize_t encode_value(uint8_t *out, size_t outlen, - fr_dict_attr_t const **tlv_stack, unsigned int depth, + fr_dict_attr_t const **da_stack, unsigned int depth, fr_cursor_t *cursor, void *encoder_ctx); static ssize_t encode_rfc_hdr_internal(uint8_t *out, size_t outlen, - fr_dict_attr_t const **tlv_stack, unsigned int depth, + fr_dict_attr_t const **da_stack, unsigned int depth, fr_cursor_t *cursor, void *encoder_ctx); static ssize_t encode_tlv_hdr(uint8_t *out, size_t outlen, - fr_dict_attr_t const **tlv_stack, unsigned int depth, + fr_dict_attr_t const **da_stack, unsigned int depth, fr_cursor_t *cursor, void *encoder_ctx); @@ -266,17 +266,17 @@ static void encode_tunnel_password(uint8_t *out, ssize_t *outlen, } static ssize_t encode_tlv_hdr_internal(uint8_t *out, size_t outlen, - fr_dict_attr_t const **tlv_stack, unsigned int depth, + fr_dict_attr_t const **da_stack, unsigned int depth, fr_cursor_t *cursor, void *encoder_ctx) { ssize_t len; uint8_t *p = out; VALUE_PAIR const *vp = fr_cursor_current(cursor); - fr_dict_attr_t const *da = tlv_stack[depth]; + fr_dict_attr_t const *da = da_stack[depth]; while (outlen >= 5) { size_t sublen; - FR_PROTO_STACK_PRINT(tlv_stack, depth); + FR_PROTO_STACK_PRINT(da_stack, depth); /* * This attribute carries sub-TLVs. The sub-TLVs @@ -288,10 +288,10 @@ static ssize_t encode_tlv_hdr_internal(uint8_t *out, size_t outlen, /* * Determine the nested type and call the appropriate encoder */ - if (tlv_stack[depth + 1]->type == FR_TYPE_TLV) { - len = encode_tlv_hdr(p, sublen, tlv_stack, depth + 1, cursor, encoder_ctx); + if (da_stack[depth + 1]->type == FR_TYPE_TLV) { + len = encode_tlv_hdr(p, sublen, da_stack, depth + 1, cursor, encoder_ctx); } else { - len = encode_rfc_hdr_internal(p, sublen, tlv_stack, depth + 1, cursor, encoder_ctx); + len = encode_rfc_hdr_internal(p, sublen, da_stack, depth + 1, cursor, encoder_ctx); } if (len <= 0) return len; @@ -309,7 +309,7 @@ static ssize_t encode_tlv_hdr_internal(uint8_t *out, size_t outlen, * rebuilding the TLV Stack, the attribute * at this depth is the same. */ - if (da != tlv_stack[depth]) break; + if (da != da_stack[depth]) break; vp = fr_cursor_current(cursor); } @@ -317,21 +317,21 @@ static ssize_t encode_tlv_hdr_internal(uint8_t *out, size_t outlen, } static ssize_t encode_tlv_hdr(uint8_t *out, size_t outlen, - fr_dict_attr_t const **tlv_stack, unsigned int depth, + fr_dict_attr_t const **da_stack, unsigned int depth, fr_cursor_t *cursor, void *encoder_ctx) { ssize_t len; VP_VERIFY(fr_cursor_current(cursor)); - FR_PROTO_STACK_PRINT(tlv_stack, depth); + FR_PROTO_STACK_PRINT(da_stack, depth); - if (tlv_stack[depth]->type != FR_TYPE_TLV) { + if (da_stack[depth]->type != FR_TYPE_TLV) { fr_strerror_printf("%s: Expected type \"tlv\" got \"%s\"", __FUNCTION__, - fr_table_str_by_value(fr_value_box_type_table, tlv_stack[depth]->type, "?Unknown?")); + fr_table_str_by_value(fr_value_box_type_table, da_stack[depth]->type, "?Unknown?")); return -1; } - if (!tlv_stack[depth + 1]) { + if (!da_stack[depth + 1]) { fr_strerror_printf("%s: Can't encode empty TLV", __FUNCTION__); return -1; } @@ -341,12 +341,12 @@ static ssize_t encode_tlv_hdr(uint8_t *out, size_t outlen, /* * Encode the first level of TLVs */ - out[0] = tlv_stack[depth]->attr & 0xff; + out[0] = da_stack[depth]->attr & 0xff; out[1] = 2; /* TLV header */ if (outlen > 255) outlen = 255; - len = encode_tlv_hdr_internal(out + out[1], outlen - out[1], tlv_stack, depth, cursor, encoder_ctx); + len = encode_tlv_hdr_internal(out + out[1], outlen - out[1], da_stack, depth, cursor, encoder_ctx); if (len <= 0) return len; out[1] += len; @@ -362,7 +362,7 @@ static ssize_t encode_tlv_hdr(uint8_t *out, size_t outlen, * < 0, failure. */ static ssize_t encode_value(uint8_t *out, size_t outlen, - fr_dict_attr_t const **tlv_stack, unsigned int depth, + fr_dict_attr_t const **da_stack, unsigned int depth, fr_cursor_t *cursor, void *encoder_ctx) { size_t offset; @@ -371,11 +371,11 @@ static ssize_t encode_value(uint8_t *out, size_t outlen, uint8_t *ptr = out; uint8_t buffer[64]; VALUE_PAIR const *vp = fr_cursor_current(cursor); - fr_dict_attr_t const *da = tlv_stack[depth]; + fr_dict_attr_t const *da = da_stack[depth]; fr_radius_ctx_t *packet_ctx = encoder_ctx; VP_VERIFY(vp); - FR_PROTO_STACK_PRINT(tlv_stack, depth); + FR_PROTO_STACK_PRINT(da_stack, depth); /* * Catch errors early on. @@ -390,7 +390,7 @@ static ssize_t encode_value(uint8_t *out, size_t outlen, * but it seems to work OK. */ if (da->type == FR_TYPE_TLV) { - return encode_tlv_hdr(out, outlen, tlv_stack, depth, cursor, encoder_ctx); + return encode_tlv_hdr(out, outlen, da_stack, depth, cursor, encoder_ctx); } /* @@ -399,11 +399,11 @@ static ssize_t encode_value(uint8_t *out, size_t outlen, if (da->type == FR_TYPE_STRUCT) { ssize_t struct_len; - struct_len = fr_struct_to_network(out, outlen, tlv_stack, depth, cursor, encoder_ctx, encode_value); + struct_len = fr_struct_to_network(out, outlen, da_stack, depth, cursor, encoder_ctx, encode_value); if (struct_len <= 0) return struct_len; vp = fr_cursor_current(cursor); - fr_proto_tlv_stack_build(tlv_stack, vp ? vp->da : NULL); + fr_proto_da_stack_build(da_stack, vp ? vp->da : NULL); out += struct_len; outlen -= struct_len; @@ -413,21 +413,21 @@ static ssize_t encode_value(uint8_t *out, size_t outlen, * * The fr_struct_to_network() function can't do * this work, as it's not protocol aware, and - * doesn't have the tlv_stack or encoder_ctx. + * doesn't have the da_stack or encoder_ctx. * * Note that we call the "internal" encode * function, as we don't want the encapsulating * TLV to be encoded here. It's number is just * the field number in the struct. */ - while (vp && (tlv_stack[depth] == da) && (outlen > 0)) { - len = encode_tlv_hdr_internal(out, outlen, tlv_stack, depth + 1, cursor, encoder_ctx); + while (vp && (da_stack[depth] == da) && (outlen > 0)) { + len = encode_tlv_hdr_internal(out, outlen, da_stack, depth + 1, cursor, encoder_ctx); if (len < 0) return len; struct_len += len; vp = fr_cursor_current(cursor); - fr_proto_tlv_stack_build(tlv_stack, vp ? vp->da : NULL); + fr_proto_da_stack_build(da_stack, vp ? vp->da : NULL); } return struct_len; @@ -437,7 +437,7 @@ static ssize_t encode_value(uint8_t *out, size_t outlen, * If it's not a TLV, it should be a value type RFC * attribute make sure that it is. */ - if (tlv_stack[depth + 1] != NULL) { + if (da_stack[depth + 1] != NULL) { fr_strerror_printf("%s: Encoding value but not at top of stack", __FUNCTION__); return -1; } @@ -450,7 +450,7 @@ static ssize_t encode_value(uint8_t *out, size_t outlen, switch (da->type) { case FR_TYPE_STRUCTURAL: fr_strerror_printf("%s: Called with structural type %s", __FUNCTION__, - fr_table_str_by_value(fr_value_box_type_table, tlv_stack[depth]->type, "?Unknown?")); + fr_table_str_by_value(fr_value_box_type_table, da_stack[depth]->type, "?Unknown?")); return -1; default: @@ -552,7 +552,7 @@ static ssize_t encode_value(uint8_t *out, size_t outlen, */ if (!data || (len == 0)) { vp = next_encodable(cursor); - fr_proto_tlv_stack_build(tlv_stack, vp ? vp->da : NULL); + fr_proto_da_stack_build(da_stack, vp ? vp->da : NULL); return 0; } @@ -629,7 +629,7 @@ static ssize_t encode_value(uint8_t *out, size_t outlen, * Rebuilds the TLV stack for encoding the next attribute */ vp = next_encodable(cursor); - fr_proto_tlv_stack_build(tlv_stack, vp ? vp->da : NULL); + fr_proto_da_stack_build(da_stack, vp ? vp->da : NULL); return len + (ptr - out); } @@ -693,7 +693,7 @@ static ssize_t attr_shift(uint8_t const *start, uint8_t const *end, * */ static int encode_extended_hdr(uint8_t *out, size_t outlen, - fr_dict_attr_t const **tlv_stack, unsigned int depth, + fr_dict_attr_t const **da_stack, unsigned int depth, fr_cursor_t *cursor, void *encoder_ctx) { int len; @@ -707,16 +707,16 @@ static int encode_extended_hdr(uint8_t *out, size_t outlen, VALUE_PAIR const *vp = fr_cursor_current(cursor); VP_VERIFY(vp); - FR_PROTO_STACK_PRINT(tlv_stack, depth); + FR_PROTO_STACK_PRINT(da_stack, depth); - extra = (!tlv_stack[0]->flags.extra && (tlv_stack[0]->flags.subtype == FLAG_EXTENDED_ATTR)); + extra = (!da_stack[0]->flags.extra && (da_stack[0]->flags.subtype == FLAG_EXTENDED_ATTR)); /* * @fixme: check depth of stack */ - attr_type = tlv_stack[0]->type; + attr_type = da_stack[0]->type; #ifndef NDEBUG - vsa_type = tlv_stack[1]->type; + vsa_type = da_stack[1]->type; if (fr_debug_lvl > 3) { jump += extra; } @@ -732,9 +732,9 @@ static int encode_extended_hdr(uint8_t *out, size_t outlen, /* * Encode which extended attribute it is. */ - out[0] = tlv_stack[depth++]->attr & 0xff; + out[0] = da_stack[depth++]->attr & 0xff; out[1] = 3 + extra; - out[2] = tlv_stack[depth]->attr & 0xff; + out[2] = da_stack[depth]->attr & 0xff; if (extra) out[3] = 0; /* flags start off at zero */ break; @@ -742,16 +742,16 @@ static int encode_extended_hdr(uint8_t *out, size_t outlen, default: fr_strerror_printf("%s : Called for non-extended attribute type %s", __FUNCTION__, fr_table_str_by_value(fr_value_box_type_table, - tlv_stack[depth]->type, "?Unknown?")); + da_stack[depth]->type, "?Unknown?")); return -1; } - FR_PROTO_STACK_PRINT(tlv_stack, depth); + FR_PROTO_STACK_PRINT(da_stack, depth); /* * Handle VSA as "VENDOR + attr" */ - if (tlv_stack[depth]->type == FR_TYPE_VSA) { + if (da_stack[depth]->type == FR_TYPE_VSA) { uint8_t *evs = out + out[1]; uint32_t lvalue; @@ -759,14 +759,14 @@ static int encode_extended_hdr(uint8_t *out, size_t outlen, depth++; - lvalue = htonl(tlv_stack[depth++]->attr); + lvalue = htonl(da_stack[depth++]->attr); memcpy(evs, &lvalue, 4); - evs[4] = tlv_stack[depth]->attr & 0xff; + evs[4] = da_stack[depth]->attr & 0xff; out[1] += 5; - FR_PROTO_STACK_PRINT(tlv_stack, depth); + FR_PROTO_STACK_PRINT(da_stack, depth); FR_PROTO_HEX_DUMP(out, out[1], "header extended vendor specific"); } else { FR_PROTO_HEX_DUMP(out, out[1], "header extended"); @@ -778,10 +778,10 @@ static int encode_extended_hdr(uint8_t *out, size_t outlen, */ if ((attr_type == FR_TYPE_EXTENDED) && !extra && (outlen > 255)) outlen = 255; - if (tlv_stack[depth]->type == FR_TYPE_TLV) { - len = encode_tlv_hdr_internal(out + out[1], outlen - out[1], tlv_stack, depth, cursor, encoder_ctx); + if (da_stack[depth]->type == FR_TYPE_TLV) { + len = encode_tlv_hdr_internal(out + out[1], outlen - out[1], da_stack, depth, cursor, encoder_ctx); } else { - len = encode_value(out + out[1], outlen - out[1], tlv_stack, depth, cursor, encoder_ctx); + len = encode_value(out + out[1], outlen - out[1], da_stack, depth, cursor, encoder_ctx); } if (len <= 0) return len; @@ -817,7 +817,7 @@ static int encode_extended_hdr(uint8_t *out, size_t outlen, * prepended to each chunk. */ static ssize_t encode_concat(uint8_t *out, size_t outlen, - fr_dict_attr_t const **tlv_stack, unsigned int depth, + fr_dict_attr_t const **da_stack, unsigned int depth, fr_cursor_t *cursor, UNUSED void *encoder_ctx) { uint8_t *ptr = out; @@ -825,7 +825,7 @@ static ssize_t encode_concat(uint8_t *out, size_t outlen, size_t len, left; VALUE_PAIR const *vp = fr_cursor_current(cursor); - FR_PROTO_STACK_PRINT(tlv_stack, depth); + FR_PROTO_STACK_PRINT(da_stack, depth); p = vp->vp_octets; len = fr_radius_attr_len(vp); @@ -833,7 +833,7 @@ static ssize_t encode_concat(uint8_t *out, size_t outlen, while (len > 0) { if (outlen <= 2) break; - ptr[0] = tlv_stack[depth]->attr & 0xff; + ptr[0] = da_stack[depth]->attr & 0xff; ptr[1] = 2; left = len; @@ -862,7 +862,7 @@ static ssize_t encode_concat(uint8_t *out, size_t outlen, * @fixme: attributes with 'concat' MUST of type * 'octets', and therefore CANNOT have any TLV data in them. */ - fr_proto_tlv_stack_build(tlv_stack, vp ? vp->da : NULL); + fr_proto_da_stack_build(da_stack, vp ? vp->da : NULL); return ptr - out; } @@ -874,25 +874,25 @@ static ssize_t encode_concat(uint8_t *out, size_t outlen, * Otherwise, attribute may be something else. */ static ssize_t encode_rfc_hdr_internal(uint8_t *out, size_t outlen, - fr_dict_attr_t const **tlv_stack, unsigned int depth, + fr_dict_attr_t const **da_stack, unsigned int depth, fr_cursor_t *cursor, void *encoder_ctx) { ssize_t len; - FR_PROTO_STACK_PRINT(tlv_stack, depth); + FR_PROTO_STACK_PRINT(da_stack, depth); - switch (tlv_stack[depth]->type) { + switch (da_stack[depth]->type) { default: fr_strerror_printf("%s: Called with structural type %s", __FUNCTION__, - fr_table_str_by_value(fr_value_box_type_table, tlv_stack[depth]->type, "?Unknown?")); + fr_table_str_by_value(fr_value_box_type_table, da_stack[depth]->type, "?Unknown?")); return -1; case FR_TYPE_STRUCT: case FR_TYPE_VALUES: - if (((fr_dict_vendor_num_by_da(tlv_stack[depth]) == 0) && (tlv_stack[depth]->attr == 0)) || - (tlv_stack[depth]->attr > 255)) { + if (((fr_dict_vendor_num_by_da(da_stack[depth]) == 0) && (da_stack[depth]->attr == 0)) || + (da_stack[depth]->attr > 255)) { fr_strerror_printf("%s: Called with non-standard attribute %u", __FUNCTION__, - tlv_stack[depth]->attr); + da_stack[depth]->attr); return -1; } break; @@ -900,12 +900,12 @@ static ssize_t encode_rfc_hdr_internal(uint8_t *out, size_t outlen, if (outlen <= 2) return 0; - out[0] = tlv_stack[depth]->attr & 0xff; + out[0] = da_stack[depth]->attr & 0xff; out[1] = 2; if (outlen > 255) outlen = 255; - len = encode_value(out + out[1], outlen - out[1], tlv_stack, depth, cursor, encoder_ctx); + len = encode_value(out + out[1], outlen - out[1], da_stack, depth, cursor, encoder_ctx); if (len <= 0) return len; out[1] += len; @@ -921,26 +921,26 @@ static ssize_t encode_rfc_hdr_internal(uint8_t *out, size_t outlen, * If it's in the RFC format, call encode_rfc_hdr_internal. Otherwise, encode it here. */ static ssize_t encode_vendor_attr_hdr(uint8_t *out, size_t outlen, - fr_dict_attr_t const **tlv_stack, unsigned int depth, + fr_dict_attr_t const **da_stack, unsigned int depth, fr_cursor_t *cursor, void *encoder_ctx) { ssize_t len; size_t hdr_len; fr_dict_attr_t const *da, *dv; - FR_PROTO_STACK_PRINT(tlv_stack, depth); + FR_PROTO_STACK_PRINT(da_stack, depth); - dv = tlv_stack[depth++]; + dv = da_stack[depth++]; if (dv->type != FR_TYPE_VENDOR) { fr_strerror_printf("Expected Vendor"); return -1; } - da = tlv_stack[depth]; + da = da_stack[depth]; if ((da->type != FR_TYPE_TLV) && (dv->flags.type_size == 1) && (dv->flags.length == 1)) { - return encode_rfc_hdr_internal(out, outlen, tlv_stack, depth, cursor, encoder_ctx); + return encode_rfc_hdr_internal(out, outlen, da_stack, depth, cursor, encoder_ctx); } hdr_len = dv->flags.type_size + dv->flags.length; @@ -997,10 +997,10 @@ static ssize_t encode_vendor_attr_hdr(uint8_t *out, size_t outlen, * if this is a TLV, we must process it via the * internal tlv function, else we get a double TLV header. */ - if (tlv_stack[depth]->type == FR_TYPE_TLV) { - len = encode_tlv_hdr_internal(out + hdr_len, outlen - hdr_len, tlv_stack, depth, cursor, encoder_ctx); + if (da_stack[depth]->type == FR_TYPE_TLV) { + len = encode_tlv_hdr_internal(out + hdr_len, outlen - hdr_len, da_stack, depth, cursor, encoder_ctx); } else { - len = encode_value(out + hdr_len, outlen - hdr_len, tlv_stack, depth, cursor, encoder_ctx); + len = encode_value(out + hdr_len, outlen - hdr_len, da_stack, depth, cursor, encoder_ctx); } if (len <= 0) return len; @@ -1015,7 +1015,7 @@ static ssize_t encode_vendor_attr_hdr(uint8_t *out, size_t outlen, * */ static int encode_wimax_hdr(uint8_t *out, size_t outlen, - fr_dict_attr_t const **tlv_stack, unsigned int depth, + fr_dict_attr_t const **da_stack, unsigned int depth, fr_cursor_t *cursor, void *encoder_ctx) { int len; @@ -1024,7 +1024,7 @@ static int encode_wimax_hdr(uint8_t *out, size_t outlen, VALUE_PAIR const *vp = fr_cursor_current(cursor); VP_VERIFY(vp); - FR_PROTO_STACK_PRINT(tlv_stack, depth); + FR_PROTO_STACK_PRINT(da_stack, depth); /* * Not enough freespace for: @@ -1032,19 +1032,19 @@ static int encode_wimax_hdr(uint8_t *out, size_t outlen, */ if (outlen < 9) return 0; - if (tlv_stack[depth++]->attr != FR_VENDOR_SPECIFIC) { - fr_strerror_printf("%s: level[1] of tlv_stack is incorrect, must be Vendor-Specific (26)", + if (da_stack[depth++]->attr != FR_VENDOR_SPECIFIC) { + fr_strerror_printf("%s: level[1] of da_stack is incorrect, must be Vendor-Specific (26)", __FUNCTION__); return -1; } - FR_PROTO_STACK_PRINT(tlv_stack, depth); + FR_PROTO_STACK_PRINT(da_stack, depth); - if (tlv_stack[depth++]->attr != VENDORPEC_WIMAX) { - fr_strerror_printf("%s: level[2] of tlv_stack is incorrect, must be Wimax vendor %i", __FUNCTION__, + if (da_stack[depth++]->attr != VENDORPEC_WIMAX) { + fr_strerror_printf("%s: level[2] of da_stack is incorrect, must be Wimax vendor %i", __FUNCTION__, VENDORPEC_WIMAX); return -1; } - FR_PROTO_STACK_PRINT(tlv_stack, depth); + FR_PROTO_STACK_PRINT(da_stack, depth); /* * Build the Vendor-Specific header @@ -1058,7 +1058,7 @@ static int encode_wimax_hdr(uint8_t *out, size_t outlen, /* * Encode the first attribute */ - out[6] = tlv_stack[depth]->attr; + out[6] = da_stack[depth]->attr; out[7] = 3; out[8] = 0; /* continuation byte */ @@ -1066,11 +1066,11 @@ static int encode_wimax_hdr(uint8_t *out, size_t outlen, * "outlen" can be larger than 255 because of the "continuation" byte. */ - if (tlv_stack[depth]->type == FR_TYPE_TLV) { - len = encode_tlv_hdr_internal(out + out[1], outlen - out[1], tlv_stack, depth, cursor, encoder_ctx); + if (da_stack[depth]->type == FR_TYPE_TLV) { + len = encode_tlv_hdr_internal(out + out[1], outlen - out[1], da_stack, depth, cursor, encoder_ctx); if (len <= 0) return len; } else { - len = encode_value(out + out[1], outlen - out[1], tlv_stack, depth, cursor, encoder_ctx); + len = encode_value(out + out[1], outlen - out[1], da_stack, depth, cursor, encoder_ctx); if (len <= 0) return len; } @@ -1096,14 +1096,14 @@ static int encode_wimax_hdr(uint8_t *out, size_t outlen, * */ static int encode_vsa_hdr(uint8_t *out, size_t outlen, - fr_dict_attr_t const **tlv_stack, unsigned int depth, + fr_dict_attr_t const **da_stack, unsigned int depth, fr_cursor_t *cursor, void *encoder_ctx) { ssize_t len; uint32_t lvalue; - fr_dict_attr_t const *da = tlv_stack[depth]; + fr_dict_attr_t const *da = da_stack[depth]; - FR_PROTO_STACK_PRINT(tlv_stack, depth); + FR_PROTO_STACK_PRINT(da_stack, depth); if (da->type != FR_TYPE_VSA) { fr_strerror_printf("%s: Expected type \"vsa\" got \"%s\"", __FUNCTION__, @@ -1114,8 +1114,8 @@ static int encode_vsa_hdr(uint8_t *out, size_t outlen, /* * Double-check for WiMAX format */ - if (fr_dict_vendor_num_by_da(tlv_stack[depth + 1]) == VENDORPEC_WIMAX) { - return encode_wimax_hdr(out, outlen, tlv_stack, depth, cursor, encoder_ctx); + if (fr_dict_vendor_num_by_da(da_stack[depth + 1]) == VENDORPEC_WIMAX) { + return encode_wimax_hdr(out, outlen, da_stack, depth, cursor, encoder_ctx); } /* @@ -1132,8 +1132,8 @@ static int encode_vsa_hdr(uint8_t *out, size_t outlen, /* * Now process the vendor ID part (which is one attribute deeper) */ - da = tlv_stack[++depth]; - FR_PROTO_STACK_PRINT(tlv_stack, depth); + da = da_stack[++depth]; + FR_PROTO_STACK_PRINT(da_stack, depth); if (da->type != FR_TYPE_VENDOR) { fr_strerror_printf("%s: Expected type \"vsa\" got \"%s\"", __FUNCTION__, @@ -1146,7 +1146,7 @@ static int encode_vsa_hdr(uint8_t *out, size_t outlen, if (outlen > 255) outlen = 255; - len = encode_vendor_attr_hdr(out + out[1], outlen - out[1], tlv_stack, depth, cursor, encoder_ctx); + len = encode_vendor_attr_hdr(out + out[1], outlen - out[1], da_stack, depth, cursor, encoder_ctx); if (len < 0) return len; out[1] += len; @@ -1159,7 +1159,7 @@ static int encode_vsa_hdr(uint8_t *out, size_t outlen, /** Encode an RFC standard attribute 1..255 * */ -static int encode_rfc_hdr(uint8_t *out, size_t outlen, fr_dict_attr_t const **tlv_stack, unsigned int depth, +static int encode_rfc_hdr(uint8_t *out, size_t outlen, fr_dict_attr_t const **da_stack, unsigned int depth, fr_cursor_t *cursor, void *encoder_ctx) { VALUE_PAIR const *vp = fr_cursor_current(cursor); @@ -1168,16 +1168,16 @@ static int encode_rfc_hdr(uint8_t *out, size_t outlen, fr_dict_attr_t const **tl * Sanity checks */ VP_VERIFY(vp); - FR_PROTO_STACK_PRINT(tlv_stack, depth); + FR_PROTO_STACK_PRINT(da_stack, depth); - switch (tlv_stack[depth]->type) { + switch (da_stack[depth]->type) { case FR_TYPE_EXTENDED: case FR_TYPE_TLV: case FR_TYPE_VSA: case FR_TYPE_VENDOR: /* FR_TYPE_STRUCT is actually allowed... */ fr_strerror_printf("%s: Expected leaf type got \"%s\"", __FUNCTION__, - fr_table_str_by_value(fr_value_box_type_table, tlv_stack[depth]->type, "?Unknown?")); + fr_table_str_by_value(fr_value_box_type_table, da_stack[depth]->type, "?Unknown?")); return -1; default: @@ -1185,8 +1185,8 @@ static int encode_rfc_hdr(uint8_t *out, size_t outlen, fr_dict_attr_t const **tl * Attribute 0 is fine as a TLV leaf, or VSA, but not * in the original standards space. */ - if (((fr_dict_vendor_num_by_da(tlv_stack[depth]) == 0) && (tlv_stack[depth]->attr == 0)) || - (tlv_stack[depth]->attr > 255)) { + if (((fr_dict_vendor_num_by_da(da_stack[depth]) == 0) && (da_stack[depth]->attr == 0)) || + (da_stack[depth]->attr > 255)) { fr_strerror_printf("%s: Called with non-standard attribute %u", __FUNCTION__, vp->da->attr); return -1; } @@ -1204,7 +1204,7 @@ static int encode_rfc_hdr(uint8_t *out, size_t outlen, fr_dict_attr_t const **tl FR_PROTO_HEX_DUMP(out, 2, "header rfc"); vp = next_encodable(cursor); - fr_proto_tlv_stack_build(tlv_stack, vp ? vp->da : NULL); + fr_proto_da_stack_build(da_stack, vp ? vp->da : NULL); return out[1]; } @@ -1222,11 +1222,11 @@ static int encode_rfc_hdr(uint8_t *out, size_t outlen, fr_dict_attr_t const **tl FR_PROTO_HEX_DUMP(out, 2, "header rfc"); vp = next_encodable(cursor); - fr_proto_tlv_stack_build(tlv_stack, vp ? vp->da : NULL); + fr_proto_da_stack_build(da_stack, vp ? vp->da : NULL); return out[1]; } - return encode_rfc_hdr_internal(out, outlen, tlv_stack, depth, cursor, encoder_ctx); + return encode_rfc_hdr_internal(out, outlen, da_stack, depth, cursor, encoder_ctx); } /** Encode a data structure into a RADIUS attribute @@ -1250,7 +1250,7 @@ ssize_t fr_radius_encode_pair(uint8_t *out, size_t outlen, fr_cursor_t *cursor, int ret; size_t attr_len; - fr_dict_attr_t const *tlv_stack[FR_DICT_MAX_TLV_STACK + 1]; + fr_dict_attr_t const *da_stack[FR_DICT_MAX_TLV_STACK + 1]; fr_dict_attr_t const *da = NULL; if (!cursor || !out || (outlen <= 2)) return -1; @@ -1291,19 +1291,19 @@ ssize_t fr_radius_encode_pair(uint8_t *out, size_t outlen, fr_cursor_t *cursor, * Fast path for the common case. */ if (vp->da->parent->flags.is_root && !vp->da->flags.concat && (vp->vp_type != FR_TYPE_TLV)) { - tlv_stack[0] = vp->da; - tlv_stack[1] = NULL; - FR_PROTO_STACK_PRINT(tlv_stack, 0); - return encode_rfc_hdr(out, attr_len, tlv_stack, 0, cursor, encoder_ctx); + da_stack[0] = vp->da; + da_stack[1] = NULL; + FR_PROTO_STACK_PRINT(da_stack, 0); + return encode_rfc_hdr(out, attr_len, da_stack, 0, cursor, encoder_ctx); } /* * Do more work to set up the stack for the complex case. */ - fr_proto_tlv_stack_build(tlv_stack, vp->da); - FR_PROTO_STACK_PRINT(tlv_stack, 0); + fr_proto_da_stack_build(da_stack, vp->da); + FR_PROTO_STACK_PRINT(da_stack, 0); - da = tlv_stack[0]; + da = da_stack[0]; switch (da->type) { default: if (da->flags.concat) { @@ -1313,10 +1313,10 @@ ssize_t fr_radius_encode_pair(uint8_t *out, size_t outlen, fr_cursor_t *cursor, * using a different scheme than the "long * extended" one. */ - ret = encode_concat(out, outlen, tlv_stack, 0, cursor, encoder_ctx); + ret = encode_concat(out, outlen, da_stack, 0, cursor, encoder_ctx); break; } - ret = encode_rfc_hdr(out, attr_len, tlv_stack, 0, cursor, encoder_ctx); + ret = encode_rfc_hdr(out, attr_len, da_stack, 0, cursor, encoder_ctx); break; case FR_TYPE_VSA: @@ -1327,18 +1327,18 @@ ssize_t fr_radius_encode_pair(uint8_t *out, size_t outlen, fr_cursor_t *cursor, * attributes by fragmenting them inside * of the WiMAX VSA space. */ - ret = encode_wimax_hdr(out, outlen, tlv_stack, 0, cursor, encoder_ctx); + ret = encode_wimax_hdr(out, outlen, da_stack, 0, cursor, encoder_ctx); break; } - ret = encode_vsa_hdr(out, attr_len, tlv_stack, 0, cursor, encoder_ctx); + ret = encode_vsa_hdr(out, attr_len, da_stack, 0, cursor, encoder_ctx); break; case FR_TYPE_TLV: - ret = encode_tlv_hdr(out, attr_len, tlv_stack, 0, cursor, encoder_ctx); + ret = encode_tlv_hdr(out, attr_len, da_stack, 0, cursor, encoder_ctx); break; case FR_TYPE_EXTENDED: - ret = encode_extended_hdr(out, attr_len, tlv_stack, 0, cursor, encoder_ctx); + ret = encode_extended_hdr(out, attr_len, da_stack, 0, cursor, encoder_ctx); break; case FR_TYPE_INVALID: