From: Arran Cudbard-Bell Date: Fri, 8 Oct 2021 21:06:55 +0000 (-0500) Subject: Access the order dlist from fr_pair_list_t explicitly X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bc7825ae447407ee2dabf6f2f88f2a6abc86a2e5;p=thirdparty%2Ffreeradius-server.git Access the order dlist from fr_pair_list_t explicitly Originally fr_pair_list_t was the same as fr_dlist_head_t, but no longer. --- diff --git a/src/bin/dhcpclient.c b/src/bin/dhcpclient.c index 1209f704670..f6bd8d87f22 100644 --- a/src/bin/dhcpclient.c +++ b/src/bin/dhcpclient.c @@ -305,7 +305,7 @@ static fr_radius_packet_t *fr_dhcpv4_recv_raw_loop(int lsockfd, if (fr_debug_lvl > 1) fr_dhcpv4_print_hex(stdout, reply->data, reply->data_len); - fr_dcursor_init(&cursor, &reply_vps); + fr_dcursor_init(&cursor, fr_pair_list_order(&reply_vps)); if (fr_dhcpv4_decode(reply, &reply_vps, reply->data, reply->data_len, &reply->code) < 0) { ERROR("Failed decoding reply"); return NULL; diff --git a/src/bin/radsniff.c b/src/bin/radsniff.c index 3513458ed1e..4a210c201de 100644 --- a/src/bin/radsniff.c +++ b/src/bin/radsniff.c @@ -945,7 +945,7 @@ static int rs_get_pairs(TALLOC_CTX *ctx, fr_pair_list_t *out, fr_pair_list_t *vp last_match = fr_pair_list_head(vps); - fr_dcursor_init(&list_cursor, vps); + fr_dcursor_init(&list_cursor, fr_pair_list_order(vps)); for (i = 0; i < num; i++) { match = fr_dcursor_filter_next(&list_cursor, fr_pair_matches_da, da[i]); if (!match) { diff --git a/src/bin/radsnmp.c b/src/bin/radsnmp.c index b17f6790f1c..27131e8385a 100644 --- a/src/bin/radsnmp.c +++ b/src/bin/radsnmp.c @@ -426,7 +426,7 @@ static int radsnmp_get_response(int fd, * attribute grouping to coalesce all related index * attributes under a single request OID. */ - for (vp = fr_dcursor_init(&cursor, head); + for (vp = fr_dcursor_init(&cursor, fr_pair_list_order(head)); vp; vp = fr_dcursor_next(&cursor)) { fr_dict_attr_t const *common; @@ -661,7 +661,7 @@ static int radsnmp_send_recv(radsnmp_conf_t *conf, int fd) return EXIT_FAILURE; } fr_pair_list_init(&request_vps); - fr_dcursor_init(&cursor, &request_vps); + fr_dcursor_init(&cursor, fr_pair_list_order(&request_vps)); NEXT_LINE(line, buffer); diff --git a/src/bin/unit_test_attribute.c b/src/bin/unit_test_attribute.c index b4cfe5ce4e5..9717c671ff9 100644 --- a/src/bin/unit_test_attribute.c +++ b/src/bin/unit_test_attribute.c @@ -1672,7 +1672,7 @@ static size_t command_encode_pair(command_result_t *result, command_file_ctx_t * #endif } - for (vp = fr_dcursor_talloc_iter_init(&cursor, &head, + for (vp = fr_dcursor_talloc_iter_init(&cursor, fr_pair_list_order(&head), tp->next_encodable ? tp->next_encodable : fr_proto_next_encodable, cc->tmpl_rules.dict_def ? cc->tmpl_rules.dict_def : cc->config->dict, fr_pair_t); vp; @@ -2021,7 +2021,7 @@ static size_t command_pair(command_result_t *result, command_file_ctx_t *cc, ctx.ctx = cc->tmp_ctx; ctx.parent = fr_dict_root(cc->tmpl_rules.dict_def); ctx.cursor = &cursor; - fr_dcursor_init(&cursor, &head); + fr_dcursor_init(&cursor, fr_pair_list_order(&head)); p = in; end = in + inlen; diff --git a/src/bin/unit_test_module.c b/src/bin/unit_test_module.c index d5803aab04a..fae8c1e7a52 100644 --- a/src/bin/unit_test_module.c +++ b/src/bin/unit_test_module.c @@ -216,7 +216,7 @@ static request_t *request_from_file(TALLOC_CTX *ctx, FILE *fp, RADCLIENT *client } }; - for (vp = fr_dcursor_init(&cursor, &request->request_pairs); + for (vp = fr_dcursor_init(&cursor, fr_pair_list_order(&request->request_pairs)); vp; vp = fr_dcursor_next(&cursor)) { /* @@ -245,7 +245,7 @@ static request_t *request_from_file(TALLOC_CTX *ctx, FILE *fp, RADCLIENT *client } /* loop over the VP's we read in */ if (fr_debug_lvl) { - for (vp = fr_dcursor_init(&cursor, &request->request_pairs); + for (vp = fr_dcursor_init(&cursor, fr_pair_list_order(&request->request_pairs)); vp; vp = fr_dcursor_next(&cursor)) { /* @@ -307,7 +307,7 @@ static void print_packet(FILE *fp, fr_radius_packet_t *packet, fr_pair_list_t *l dv = fr_dict_enum_by_value(attr_packet_type, fr_box_uint32(packet->code)); if (dv) fprintf(fp, "%s\n", dv->name); - for (vp = fr_dcursor_init(&cursor, list); + for (vp = fr_dcursor_init(&cursor, fr_pair_list_order(list)); vp; vp = fr_dcursor_next(&cursor)) { /* diff --git a/src/lib/eap/chbind.c b/src/lib/eap/chbind.c index 539fc73bc63..11ca6973f45 100644 --- a/src/lib/eap/chbind.c +++ b/src/lib/eap/chbind.c @@ -89,7 +89,7 @@ static bool chbind_build_response(request_t *request, CHBIND_REQ *chbind) ptr += 4; end = ptr + total; - fr_dcursor_init(&cursor, &request->reply_pairs); + fr_dcursor_init(&cursor, fr_pair_list_order(&request->reply_pairs)); while ((vp = fr_dcursor_current(&cursor)) && (ptr < end)) { /* * Skip things which shouldn't be in channel bindings. diff --git a/src/lib/eap_aka_sim/encode.c b/src/lib/eap_aka_sim/encode.c index 3247cfff033..080817afd30 100644 --- a/src/lib/eap_aka_sim/encode.c +++ b/src/lib/eap_aka_sim/encode.c @@ -893,7 +893,9 @@ ssize_t fr_aka_sim_encode(request_t *request, fr_pair_list_t *to_encode, void *e * Group attributes with similar lineages together */ fr_pair_list_sort(to_encode, fr_pair_cmp_by_parent_num); - if (fr_dcursor_init(&cursor, to_encode) == vp) fr_dcursor_next(&cursor); /* Skip subtype if it came out first */ + if (fr_dcursor_init(&cursor, fr_pair_list_order(to_encode)) == vp) { + fr_dcursor_next(&cursor); /* Skip subtype if it came out first */ + } /* * Will we need to generate a HMAC? diff --git a/src/lib/eap_aka_sim/module.c b/src/lib/eap_aka_sim/module.c index 48335defedf..f69a150dad2 100644 --- a/src/lib/eap_aka_sim/module.c +++ b/src/lib/eap_aka_sim/module.c @@ -306,7 +306,7 @@ unlang_action_t eap_aka_sim_process(rlm_rcode_t *p_result, module_ctx_t const *m case FR_EAP_METHOD_SIM: case FR_EAP_METHOD_AKA: case FR_EAP_METHOD_AKA_PRIME: - fr_dcursor_init(&cursor, &request->request_pairs); + fr_dcursor_init(&cursor, fr_pair_list_order(&request->request_pairs)); decode_ctx = mod_session->ctx; decode_ctx.hmac_extra = mod_session->response_hmac_extra; diff --git a/src/lib/server/exfile.c b/src/lib/server/exfile.c index 1c12e962923..f50a002c581 100644 --- a/src/lib/server/exfile.c +++ b/src/lib/server/exfile.c @@ -87,7 +87,7 @@ static inline void exfile_trigger_exec(exfile_t *ef, exfile_entry_t *entry, char } fr_pair_list_copy(NULL, &args, &ef->trigger_args); - fr_dcursor_init(&cursor, &args); + fr_dcursor_init(&cursor, fr_pair_list_order(&args)); MEM(vp = fr_pair_afrom_da(NULL, da)); fr_pair_value_strdup(vp, entry->filename); diff --git a/src/lib/server/map.c b/src/lib/server/map.c index 49bf6d48f82..09e58c129a2 100644 --- a/src/lib/server/map.c +++ b/src/lib/server/map.c @@ -1280,7 +1280,7 @@ int map_to_vp(TALLOC_CTX *ctx, fr_pair_list_t *out, request_t *request, map_t co */ if (tmpl_copy_pairs(ctx, &found, request, map->rhs) < 0) return 0; - vp = fr_dcursor_init(&from, &found); + vp = fr_dcursor_init(&from, fr_pair_list_order(&found)); /* * Src/Dst attributes don't match, convert src attributes diff --git a/src/lib/server/map_async.c b/src/lib/server/map_async.c index 72337adf7e4..e1b1dc3e24b 100644 --- a/src/lib/server/map_async.c +++ b/src/lib/server/map_async.c @@ -730,7 +730,7 @@ int map_to_list_mod(TALLOC_CTX *ctx, vp_list_mod_t **out, return 0; /* No pairs returned */ } - (void)fr_dcursor_init(&from, &vp_head); + (void)fr_dcursor_init(&from, fr_pair_list_order(&vp_head)); while ((vp = fr_dcursor_remove(&from))) { map_t *mod; tmpl_rules_t rules; @@ -1052,9 +1052,9 @@ int map_list_mod_apply(request_t *request, vp_list_mod_t const *vlm) map_list_mod_to_vps(parent, &vp_from, vlm); if (fr_pair_list_empty(&vp_from)) goto finish; - fr_dcursor_init(&from, &vp_from); - fr_dcursor_init(&to_insert, &vp_to_insert); - fr_dcursor_init(&to, vp_list); + fr_dcursor_init(&from, fr_pair_list_order(&vp_from)); + fr_dcursor_init(&to_insert, fr_pair_list_order(&vp_to_insert)); + fr_dcursor_init(&to, fr_pair_list_order(vp_list)); while ((vp = fr_dcursor_remove(&from))) { for (vp_to = fr_dcursor_head(&to); @@ -1260,7 +1260,7 @@ int map_list_mod_apply(request_t *request, vp_list_mod_t const *vlm) map_list_mod_to_vps(parent, &vp_from, vlm); if (fr_pair_list_empty(&vp_from)) goto finish; - fr_dcursor_init(&from, &vp_from); + fr_dcursor_init(&from, fr_pair_list_order(&vp_from)); fr_dcursor_merge(&list, &from); /* Merge first (insert after current attribute) */ fr_dcursor_free_item(&list); /* Then free the current attribute */ diff --git a/src/lib/server/snmp.c b/src/lib/server/snmp.c index 4f6cce29594..306aad8d844 100644 --- a/src/lib/server/snmp.c +++ b/src/lib/server/snmp.c @@ -934,10 +934,10 @@ int fr_snmp_process(request_t *request) fr_pair_t *op; fr_pair_list_init(&head); - fr_dcursor_init(&request_cursor, &request->request_pairs); + fr_dcursor_init(&request_cursor, fr_pair_list_order(&request->request_pairs)); fr_dcursor_iter_by_da_init(&op_cursor, &request->request_pairs, attr_snmp_operation); - fr_dcursor_init(&reply_cursor, &request->reply_pairs); - fr_dcursor_init(&out_cursor, &head); + fr_dcursor_init(&reply_cursor, fr_pair_list_order(&request->reply_pairs)); + fr_dcursor_init(&out_cursor, fr_pair_list_order(&head)); RDEBUG2("Processing SNMP stats request"); diff --git a/src/lib/server/state.c b/src/lib/server/state.c index 27dd5b7b1c2..3a347a3cfe8 100644 --- a/src/lib/server/state.c +++ b/src/lib/server/state.c @@ -299,7 +299,7 @@ static int _state_entry_free(fr_state_entry_t *entry) * by the state context. */ if (entry->ctx) { - for (vp = fr_dcursor_init(&cursor, &entry->ctx->children); + for (vp = fr_dcursor_init(&cursor, fr_pair_list_order(&entry->ctx->children)); vp; vp = fr_dcursor_next(&cursor)) { fr_assert(entry->ctx == talloc_parent(vp)); diff --git a/src/lib/server/tmpl_eval.c b/src/lib/server/tmpl_eval.c index 1550a278409..a6f6f2c78b9 100644 --- a/src/lib/server/tmpl_eval.c +++ b/src/lib/server/tmpl_eval.c @@ -823,7 +823,7 @@ void _tmpl_cursor_child_init(TALLOC_CTX *list_ctx, fr_pair_list_t *list, tmpl_at .func = _tmpl_cursor_child_eval, .list_ctx = list_ctx }; - fr_dcursor_init(&ns->group.cursor, list); + fr_dcursor_init(&ns->group.cursor, fr_pair_list_order(list)); fr_dlist_insert_tail(&cc->nested, ns); } @@ -1020,7 +1020,7 @@ static void *_tmpl_cursor_next(fr_dlist_head_t *list, void *curr, void *uctx) list_head = &vp->vp_group; _tmpl_pair_cursor_init(vp, list_head, ar, cc); curr = fr_pair_list_head(list_head); - list = &list_head->order; + list = UNCONST(fr_dlist_head_t *, fr_pair_list_order(list_head)); continue; } @@ -1149,7 +1149,7 @@ fr_pair_t *tmpl_pair_cursor_init(int *err, TALLOC_CTX *ctx, tmpl_pair_cursor_ctx /* * Get the first entry from the tmpl */ - vp = fr_dcursor_talloc_iter_init(cursor, list_head, _tmpl_cursor_next, cc, fr_pair_t); + vp = fr_dcursor_talloc_iter_init(cursor, fr_pair_list_order(list_head), _tmpl_cursor_next, cc, fr_pair_t); if (!vp) { if (err) { *err = -1; diff --git a/src/lib/tls/cache.c b/src/lib/tls/cache.c index f465a96b237..7ef3289a75b 100644 --- a/src/lib/tls/cache.c +++ b/src/lib/tls/cache.c @@ -136,7 +136,7 @@ static int tls_cache_app_data_set(request_t *request, SSL_SESSION *sess) * Encode the session-state contents and * add it to the ticket. */ - for (vp = fr_dcursor_init(&dcursor, &request->session_state_pairs); + for (vp = fr_dcursor_init(&dcursor, fr_pair_list_order(&request->session_state_pairs)); vp; vp = fr_dcursor_current(&dcursor)) { slen = fr_internal_encode_pair(&dbuff, &dcursor, NULL); diff --git a/src/lib/unlang/foreach.c b/src/lib/unlang/foreach.c index 2bf55564862..f4c796916c1 100644 --- a/src/lib/unlang/foreach.c +++ b/src/lib/unlang/foreach.c @@ -170,7 +170,7 @@ static unlang_action_t unlang_foreach(rlm_rcode_t *p_result, request_t *request, foreach->request = request; foreach->depth = foreach_depth; fr_pair_list_append(&foreach->vps, &vps); - fr_dcursor_talloc_init(&foreach->cursor, &foreach->vps, fr_pair_t); + fr_dcursor_talloc_init(&foreach->cursor, fr_pair_list_order(&foreach->vps), fr_pair_t); #ifndef NDEBUG foreach->indent = request->log.unlang_indent; #endif diff --git a/src/lib/util/pair.h b/src/lib/util/pair.h index 5e28e68708c..58eb3cafd98 100644 --- a/src/lib/util/pair.h +++ b/src/lib/util/pair.h @@ -78,6 +78,11 @@ typedef struct { fr_dlist_head_t order; //!< Maintains the relative order of pairs in a list. } fr_pair_list_t; +static inline fr_dlist_head_t _CONST *fr_pair_list_order(fr_pair_list_t _CONST *list) +{ + return &list->order; +} + /** Stores an attribute, a value and various bits of other data * * fr_pair_ts are the main data structure used in the server diff --git a/src/lib/util/pair_print.c b/src/lib/util/pair_print.c index 246e1cb19c8..0b299a2c18e 100644 --- a/src/lib/util/pair_print.c +++ b/src/lib/util/pair_print.c @@ -63,7 +63,7 @@ ssize_t fr_pair_print_value_quoted(fr_sbuff_t *out, fr_pair_t const *vp, fr_toke */ our_out = FR_SBUFF_NO_ADVANCE(out); FR_SBUFF_IN_CHAR_RETURN(&our_out, '{', ' '); - for (child = fr_dcursor_init(&cursor, &vp->vp_group); + for (child = fr_dcursor_init(&cursor, fr_pair_list_order(&vp->vp_group)); child != NULL; child = fr_dcursor_next(&cursor)) { FR_SBUFF_RETURN(fr_pair_print, &our_out, vp, child); diff --git a/src/lib/util/pair_tests.c b/src/lib/util/pair_tests.c index 5f468612017..69d94e532c7 100644 --- a/src/lib/util/pair_tests.c +++ b/src/lib/util/pair_tests.c @@ -270,7 +270,7 @@ static void test_fr_pair_append(void) fr_pair_append(&local_pairs, fr_pair_afrom_da(autofree, fr_dict_attr_test_tlv)); /* lets' count */ - for (vp = fr_dcursor_init(&cursor, &local_pairs); + for (vp = fr_dcursor_init(&cursor, fr_pair_list_order(&local_pairs)); vp; vp = fr_dcursor_next(&cursor)) count++; @@ -305,7 +305,7 @@ static void test_fr_pair_prepend_by_da(void) TEST_CHECK(fr_pair_prepend_by_da(ctx, NULL, &local_pairs, fr_dict_attr_test_string) == 0); /* lets' count */ - for (vp = fr_dcursor_init(&cursor, &local_pairs); + for (vp = fr_dcursor_init(&cursor, fr_pair_list_order(&local_pairs)); vp; vp = fr_dcursor_next(&cursor)) { TEST_CASE("Expected (vp->da == fr_dict_attr_test_string)"); @@ -433,7 +433,7 @@ static void test_fr_pair_list_copy_by_da(void) TEST_CHECK(fr_pair_list_copy_by_da(autofree, &local_pairs, &test_pairs, fr_dict_attr_test_string, 0) > 0); TEST_CASE("The 'local_pairs' should have only fr_dict_attr_test_string"); - for (vp = fr_dcursor_init(&cursor, &local_pairs); + for (vp = fr_dcursor_init(&cursor, fr_pair_list_order(&local_pairs)); vp; vp = fr_dcursor_next(&cursor)) { TEST_CASE("Validating VP_VERIFY()"); @@ -458,7 +458,7 @@ static void test_fr_pair_list_copy_by_ancestor(void) TEST_CHECK(fr_pair_list_copy_by_ancestor(autofree, &local_pairs, &test_pairs, fr_dict_attr_test_tlv, 0) > 0); TEST_CASE("The 'local_pairs' should have only fr_dict_attr_test_tlv_string (ancestor of 'Test-TLV-Root'"); - for (vp = fr_dcursor_init(&cursor, &local_pairs); + for (vp = fr_dcursor_init(&cursor, fr_pair_list_order(&local_pairs)); vp; vp = fr_dcursor_next(&cursor)) { TEST_CASE("Validating VP_VERIFY()"); @@ -504,7 +504,7 @@ static void test_fr_pair_list_sort(void) fr_pair_list_sort(&local_pairs, fr_pair_cmp_by_da); TEST_CASE("1st (da == fr_dict_attr_test_string)"); - TEST_CHECK((vp = fr_dcursor_init(&cursor, &local_pairs)) != NULL); + TEST_CHECK((vp = fr_dcursor_init(&cursor, fr_pair_list_order(&local_pairs))) != NULL); TEST_CHECK(vp && vp->da == fr_dict_attr_test_string); TEST_CASE("2nd (da == fr_dict_attr_test_octets)"); diff --git a/src/lib/util/struct.c b/src/lib/util/struct.c index cf17bd8fdb4..877b354e66e 100644 --- a/src/lib/util/struct.c +++ b/src/lib/util/struct.c @@ -498,7 +498,7 @@ ssize_t fr_struct_to_network(fr_dbuff_t *dbuff, fr_pair_t *sorted = fr_dcursor_current(parent_cursor); /* NOT const */ fr_pair_list_sort(&sorted->vp_group, pair_sort_increasing); - fr_dcursor_init(&child_cursor, &sorted->vp_group); + fr_dcursor_init(&child_cursor, fr_pair_list_order(&sorted->vp_group)); /* * Build the da_stack for the new structure. diff --git a/src/listen/detail/proto_detail.c b/src/listen/detail/proto_detail.c index a656abc3715..2f49ca8aa4b 100644 --- a/src/listen/detail/proto_detail.c +++ b/src/listen/detail/proto_detail.c @@ -229,7 +229,7 @@ static int mod_decode(void const *instance, request_t *request, uint8_t *const d } lineno = 1; - fr_dcursor_init(&cursor, &request->request_pairs); + fr_dcursor_init(&cursor, fr_pair_list_order(&request->request_pairs)); fr_dcursor_tail(&cursor); /* Ensure we only free what we add on error */ fr_pair_list_init(&tmp_list); diff --git a/src/listen/vmps/proto_vmps.c b/src/listen/vmps/proto_vmps.c index 3ed4f8fa6e3..f4262d37f9e 100644 --- a/src/listen/vmps/proto_vmps.c +++ b/src/listen/vmps/proto_vmps.c @@ -303,7 +303,7 @@ static ssize_t mod_encode(void const *instance, request_t *request, uint8_t *buf request->reply->socket.inet.src_ipaddr = client->src_ipaddr; } - fr_dcursor_talloc_iter_init(&cursor, &request->reply_pairs, fr_proto_next_encodable, dict_vmps, fr_pair_t); + fr_dcursor_talloc_iter_init(&cursor, fr_pair_list_order(&request->reply_pairs), fr_proto_next_encodable, dict_vmps, fr_pair_t); data_len = fr_vmps_encode(&FR_DBUFF_TMP(buffer, buffer_len), request->packet->data, request->reply->code, request->reply->id, &cursor); diff --git a/src/modules/rlm_cache/rlm_cache.c b/src/modules/rlm_cache/rlm_cache.c index 9270fea691b..b7736adb8b5 100644 --- a/src/modules/rlm_cache/rlm_cache.c +++ b/src/modules/rlm_cache/rlm_cache.c @@ -774,7 +774,7 @@ finish: /* * Clear control attributes */ - for (vp = fr_dcursor_init(&cursor, &request->control_pairs); + for (vp = fr_dcursor_init(&cursor, fr_pair_list_order(&request->control_pairs)); vp; vp = fr_dcursor_next(&cursor)) { again: diff --git a/src/modules/rlm_eap/types/rlm_eap_ttls/ttls.c b/src/modules/rlm_eap/types/rlm_eap_ttls/ttls.c index 9262d9ea272..70eb8535255 100644 --- a/src/modules/rlm_eap/types/rlm_eap_ttls/ttls.c +++ b/src/modules/rlm_eap/types/rlm_eap_ttls/ttls.c @@ -645,7 +645,7 @@ fr_radius_packet_code_t eap_ttls_process(request_t *request, eap_session_t *eap_ /* * Add the tunneled attributes to the request request. */ - fr_dcursor_init(&cursor, &request->request_pairs); + fr_dcursor_init(&cursor, fr_pair_list_order(&request->request_pairs)); if (eap_ttls_decode_pair(request, request->request_ctx, &cursor, fr_dict_root(fr_dict_internal()), data, data_len, tls_session->ssl) < 0) { RPEDEBUG("Decoding TTLS TLVs failed"); diff --git a/src/modules/rlm_logtee/rlm_logtee.c b/src/modules/rlm_logtee/rlm_logtee.c index 76d4cd518a5..3a44d19a2bb 100644 --- a/src/modules/rlm_logtee/rlm_logtee.c +++ b/src/modules/rlm_logtee/rlm_logtee.c @@ -473,7 +473,7 @@ static void logtee_it(fr_log_type_t type, fr_log_lvl_t lvl, request_t *request, t->type->vp_uint32 = (uint32_t) type; t->lvl->vp_uint32 = (uint32_t) lvl; - fr_dcursor_init(&cursor, &request->request_pairs); + fr_dcursor_init(&cursor, fr_pair_list_order(&request->request_pairs)); fr_dcursor_prepend(&cursor, t->msg); fr_dcursor_prepend(&cursor, t->type); fr_dcursor_prepend(&cursor, t->lvl); diff --git a/src/modules/rlm_lua/lua.c b/src/modules/rlm_lua/lua.c index b53c7f19239..f41362cfc7b 100644 --- a/src/modules/rlm_lua/lua.c +++ b/src/modules/rlm_lua/lua.c @@ -506,7 +506,7 @@ static int _lua_list_iterator_init(lua_State *L) REDEBUG("Failed allocating user data to hold cursor"); return -1; } - fr_dcursor_init(cursor, &request->request_pairs); /* @FIXME: Shouldn't use list head */ + fr_dcursor_init(cursor, fr_pair_list_order(&request->request_pairs)); /* @FIXME: Shouldn't use list head */ lua_pushlightuserdata(L, cursor); lua_pushcclosure(L, _lua_list_iterator, 1); @@ -719,7 +719,7 @@ static void _lua_fr_request_register(lua_State *L, request_t *request) /* Attribute list table */ fr_pair_list_sort(&request->request_pairs, fr_pair_cmp_by_da); - fr_dcursor_init(&cursor, &request->request_pairs); + fr_dcursor_init(&cursor, fr_pair_list_order(&request->request_pairs)); /* * Setup the environment diff --git a/src/modules/rlm_perl/rlm_perl.c b/src/modules/rlm_perl/rlm_perl.c index 7bbb8ed0d5a..e4915aac606 100644 --- a/src/modules/rlm_perl/rlm_perl.c +++ b/src/modules/rlm_perl/rlm_perl.c @@ -710,7 +710,7 @@ static void perl_store_vps(UNUSED TALLOC_CTX *ctx, request_t *request, fr_pair_l RINDENT(); fr_pair_list_sort(vps, fr_pair_cmp_by_da); - for (vp = fr_dcursor_init(&cursor, vps); + for (vp = fr_dcursor_init(&cursor, fr_pair_list_order(vps)); vp; vp = fr_dcursor_next(&cursor)) { fr_pair_t *next; diff --git a/src/modules/rlm_rest/rest.c b/src/modules/rlm_rest/rest.c index e6fe25f04f2..c26f78676d2 100644 --- a/src/modules/rlm_rest/rest.c +++ b/src/modules/rlm_rest/rest.c @@ -2031,7 +2031,7 @@ do {\ case REST_HTTP_BODY_POST: rest_request_init(section, request, &ctx->request); - fr_dcursor_init(&(ctx->request.cursor), &request->request_pairs); + fr_dcursor_init(&(ctx->request.cursor), fr_pair_list_order(&request->request_pairs)); if (rest_request_config_body(inst, section, request, randle, rest_encode_post) < 0) return -1; diff --git a/src/protocols/arp/base.c b/src/protocols/arp/base.c index a4c90f06bb8..5b4f66cc4f4 100644 --- a/src/protocols/arp/base.c +++ b/src/protocols/arp/base.c @@ -160,7 +160,7 @@ ssize_t fr_arp_encode(fr_dbuff_t *dbuff, uint8_t const *original, fr_pair_list_t /* * Find the first attribute which is parented by ARP-Packet. */ - for (vp = fr_dcursor_init(&cursor, vps); + for (vp = fr_dcursor_init(&cursor, fr_pair_list_order(vps)); vp; vp = fr_dcursor_next(&cursor)) { if (vp->da->parent == attr_arp_packet) break; diff --git a/src/protocols/dhcpv4/base.c b/src/protocols/dhcpv4/base.c index 3375724b320..d77d40a3cd6 100644 --- a/src/protocols/dhcpv4/base.c +++ b/src/protocols/dhcpv4/base.c @@ -482,7 +482,7 @@ ssize_t fr_dhcpv4_encode_dbuff(fr_dbuff_t *dbuff, dhcp_packet_t *original, int c * operates correctly. This changes the order of the list, but never mind... */ fr_pair_list_sort(vps, fr_dhcpv4_attr_cmp); - fr_dcursor_talloc_iter_init(&cursor, vps, fr_proto_next_encodable, dict_dhcpv4, fr_pair_t); + fr_dcursor_talloc_iter_init(&cursor, fr_pair_list_order(vps), fr_proto_next_encodable, dict_dhcpv4, fr_pair_t); /* * Each call to fr_dhcpv4_encode_option will encode one complete DHCP option, diff --git a/src/protocols/dhcpv4/encode.c b/src/protocols/dhcpv4/encode.c index 5ef8cedd9ce..fef3d2a3ae3 100644 --- a/src/protocols/dhcpv4/encode.c +++ b/src/protocols/dhcpv4/encode.c @@ -329,14 +329,14 @@ static ssize_t encode_option_data(fr_dbuff_t *dbuff, case FR_TYPE_STRUCTURAL: break; - default: + default: fr_strerror_printf("Internal sanity check failed"); return -1; } } do_child: - fr_dcursor_init(&child_cursor, &vp->vp_group); + fr_dcursor_init(&child_cursor, fr_pair_list_order(&vp->vp_group)); work_dbuff = FR_DBUFF(dbuff); while ((vp = fr_dcursor_current(&child_cursor)) != NULL) { diff --git a/src/protocols/dhcpv6/base.c b/src/protocols/dhcpv6/base.c index 6b1908eb470..5dfe76bfdac 100644 --- a/src/protocols/dhcpv6/base.c +++ b/src/protocols/dhcpv6/base.c @@ -862,7 +862,7 @@ ssize_t fr_dhcpv6_encode(fr_dbuff_t *dbuff, uint8_t const *original, size_t leng packet_ctx.original = original; packet_ctx.original_length = length; - fr_dcursor_talloc_iter_init(&cursor, vps, fr_dhcpv6_next_encodable, dict_dhcpv6, fr_pair_t); + fr_dcursor_talloc_iter_init(&cursor, fr_pair_list_order(vps), fr_dhcpv6_next_encodable, dict_dhcpv6, fr_pair_t); while ((fr_dbuff_extend(&frame_dbuff) > 0) && (fr_dcursor_current(&cursor) != NULL)) { slen = fr_dhcpv6_encode_option(&frame_dbuff, &cursor, &packet_ctx); switch (slen) { diff --git a/src/protocols/dhcpv6/encode.c b/src/protocols/dhcpv6/encode.c index b2ee28c36ac..cce544a49a3 100644 --- a/src/protocols/dhcpv6/encode.c +++ b/src/protocols/dhcpv6/encode.c @@ -316,7 +316,7 @@ static ssize_t encode_value(fr_dbuff_t *dbuff, * Encode the child options. */ if (!fr_pair_list_empty(&vp->vp_group)) { - (void) fr_dcursor_init(&child_cursor, &vp->vp_group); + (void) fr_dcursor_init(&child_cursor, fr_pair_list_order(&vp->vp_group)); while (fr_dcursor_current(&child_cursor) != NULL) { slen = fr_dhcpv6_encode_option(&work_dbuff, &child_cursor, encode_ctx); @@ -532,7 +532,7 @@ static ssize_t encode_option_data(fr_dbuff_t *dbuff, } do_child: - fr_dcursor_init(&child_cursor, &vp->vp_group); + fr_dcursor_init(&child_cursor, fr_pair_list_order(&vp->vp_group)); work_dbuff = FR_DBUFF(dbuff); while ((vp = fr_dcursor_current(&child_cursor)) != NULL) { diff --git a/src/protocols/dns/encode.c b/src/protocols/dns/encode.c index 661d44c9eba..ae95335dd32 100644 --- a/src/protocols/dns/encode.c +++ b/src/protocols/dns/encode.c @@ -119,7 +119,7 @@ static ssize_t encode_value(fr_dbuff_t *dbuff, if (vp->da->type == FR_TYPE_STRUCT) { fr_dcursor_t child_cursor; - fr_dcursor_init(&child_cursor, &vp->vp_group); + fr_dcursor_init(&child_cursor, fr_pair_list_order(&vp->vp_group)); slen = fr_struct_to_network(&work_dbuff, da_stack, depth, &child_cursor, encode_ctx, encode_value_trampoline, encode_tlv); if (slen < 0) return slen; @@ -377,7 +377,7 @@ static ssize_t encode_option_data(fr_dbuff_t *dbuff, } do_child: - fr_dcursor_init(&child_cursor, &vp->vp_group); + fr_dcursor_init(&child_cursor, fr_pair_list_order(&vp->vp_group)); work_dbuff = FR_DBUFF(dbuff); while ((vp = fr_dcursor_current(&child_cursor)) != NULL) { @@ -555,7 +555,7 @@ static ssize_t fr_dns_encode_rr(fr_dbuff_t *dbuff, fr_dcursor_t *cursor, void *e if (vp->da->type == FR_TYPE_STRUCT) { fr_dcursor_t child_cursor; - fr_dcursor_init(&child_cursor, &vp->vp_group); + fr_dcursor_init(&child_cursor, fr_pair_list_order(&vp->vp_group)); slen = fr_struct_to_network(&work_dbuff, &da_stack, 0, &child_cursor, encode_ctx, encode_value_trampoline, NULL); if (slen <= 0) return slen; @@ -593,7 +593,7 @@ static ssize_t encode_record(fr_dbuff_t *dbuff, fr_da_stack_t *da_stack, fr_pair ssize_t slen; fr_dcursor_t child_cursor; - fr_dcursor_init(&child_cursor, &vp->vp_group); + fr_dcursor_init(&child_cursor, fr_pair_list_order(&vp->vp_group)); slen = fr_struct_to_network(&work_dbuff, da_stack, 0, &child_cursor, packet_ctx, encode_value_trampoline, NULL); if (slen <= 0) return slen; @@ -638,7 +638,7 @@ ssize_t fr_dns_encode(fr_dbuff_t *dbuff, fr_pair_list_t *vps, void *encode_ctx) /* * Encode the header. */ - fr_dcursor_init(&child_cursor, &vp->vp_group); + fr_dcursor_init(&child_cursor, fr_pair_list_order(&vp->vp_group)); fr_proto_da_stack_build(&da_stack, attr_dns_packet); slen = fr_struct_to_network(&work_dbuff, &da_stack, 0, &cursor, packet_ctx, encode_value_trampoline, NULL); diff --git a/src/protocols/internal/decode.c b/src/protocols/internal/decode.c index 7733cfda41d..41eda2c5a1e 100644 --- a/src/protocols/internal/decode.c +++ b/src/protocols/internal/decode.c @@ -98,7 +98,7 @@ static ssize_t internal_decode_tlv(TALLOC_CTX *ctx, fr_pair_list_t *head, fr_dic * we need to do an intermediary TLV * VP to retain the nesting structure. */ - if (fr_dcursor_init(&cursor, &children) && fr_dcursor_next(&cursor)) { + if (fr_dcursor_init(&cursor, fr_pair_list_order(&children)) && fr_dcursor_next(&cursor)) { fr_pair_t *tlv; tlv = fr_pair_afrom_da(ctx, parent_da); diff --git a/src/protocols/internal/encode.c b/src/protocols/internal/encode.c index 49ec0e1a1c2..8b9cc7e823a 100644 --- a/src/protocols/internal/encode.c +++ b/src/protocols/internal/encode.c @@ -167,7 +167,7 @@ static ssize_t internal_encode(fr_dbuff_t *dbuff, fr_dcursor_t children; fr_pair_t *child; - for (child = fr_dcursor_talloc_init(&children, &vp->vp_group, fr_pair_t); + for (child = fr_dcursor_talloc_init(&children, fr_pair_list_order(&vp->vp_group), fr_pair_t); child; child = fr_dcursor_current(&children)) { @@ -202,7 +202,7 @@ static ssize_t internal_encode(fr_dbuff_t *dbuff, { fr_dcursor_t children; - for (vp = fr_dcursor_talloc_init(&children, &vp->vp_group, fr_pair_t); + for (vp = fr_dcursor_talloc_init(&children, fr_pair_list_order(&vp->vp_group), fr_pair_t); vp; vp = fr_dcursor_current(&children)) { FR_PROTO_TRACE("encode ctx changed %s -> %s", da->name, vp->da->name); diff --git a/src/protocols/radius/base.c b/src/protocols/radius/base.c index 6f87c41a81c..8f5352fd970 100644 --- a/src/protocols/radius/base.c +++ b/src/protocols/radius/base.c @@ -995,7 +995,7 @@ ssize_t fr_radius_encode_dbuff(fr_dbuff_t *dbuff, uint8_t const *original, /* * Loop over the reply attributes for the packet. */ - fr_dcursor_talloc_iter_init(&cursor, vps, fr_radius_next_encodable, dict_radius, fr_pair_t); + fr_dcursor_talloc_iter_init(&cursor, fr_pair_list_order(vps), fr_radius_next_encodable, dict_radius, fr_pair_t); while ((vp = fr_dcursor_current(&cursor))) { VP_VERIFY(vp); diff --git a/src/protocols/radius/encode.c b/src/protocols/radius/encode.c index d7b4291effa..de574b10cf5 100644 --- a/src/protocols/radius/encode.c +++ b/src/protocols/radius/encode.c @@ -263,7 +263,7 @@ static ssize_t encode_tlv_children(fr_dbuff_t *dbuff, return PAIR_ENCODE_SKIPPED; } - fr_dcursor_init(&child_cursor, &vp->vp_group); + fr_dcursor_init(&child_cursor, fr_pair_list_order(&vp->vp_group)); vp = fr_dcursor_current(&child_cursor); fr_proto_da_stack_build(da_stack, vp->da); @@ -313,7 +313,8 @@ static ssize_t encode_tags(fr_dbuff_t *dbuff, fr_pair_list_t const *vps, void *e /* * Note that we skip tags inside of tags! */ - fr_dcursor_talloc_iter_init(&cursor, vps, fr_proto_next_encodable, dict_radius, fr_pair_t); + fr_dcursor_talloc_iter_init(&cursor, fr_pair_list_order(vps), + fr_proto_next_encodable, dict_radius, fr_pair_t); while ((vp = fr_dcursor_current(&cursor))) { VP_VERIFY(vp); @@ -1141,7 +1142,7 @@ static ssize_t encode_vendor(fr_dbuff_t *dbuff, fr_assert(vp->da == da); work_dbuff = FR_DBUFF(dbuff); - fr_dcursor_init(&child_cursor, &vp->vp_group); + fr_dcursor_init(&child_cursor, fr_pair_list_order(&vp->vp_group)); while ((vp = fr_dcursor_current(&child_cursor)) != NULL) { fr_proto_da_stack_build(da_stack, vp->da); @@ -1203,7 +1204,7 @@ static ssize_t encode_vsa(fr_dbuff_t *dbuff, * Loop over the children of this Vendor-Specific * attribute. */ - fr_dcursor_init(&child_cursor, &vp->vp_group); + fr_dcursor_init(&child_cursor, fr_pair_list_order(&vp->vp_group)); while ((vp = fr_dcursor_current(&child_cursor)) != NULL) { fr_proto_da_stack_build(da_stack, vp->da); diff --git a/src/protocols/tacacs/encode.c b/src/protocols/tacacs/encode.c index 0741474164a..ce11a209362 100644 --- a/src/protocols/tacacs/encode.c +++ b/src/protocols/tacacs/encode.c @@ -258,7 +258,7 @@ ssize_t fr_tacacs_encode(fr_dbuff_t *dbuff, uint8_t const *original_packet, char /* * Find the first attribute which is parented by TACACS-Packet. */ - for (vp = fr_dcursor_init(&cursor, vps); + for (vp = fr_dcursor_init(&cursor, fr_pair_list_order(vps)); vp; vp = fr_dcursor_next(&cursor)) { if (vp->da->parent == attr_tacacs_packet) break; diff --git a/src/protocols/vmps/vmps.c b/src/protocols/vmps/vmps.c index 81e12d3bc6d..7517bf9a464 100644 --- a/src/protocols/vmps/vmps.c +++ b/src/protocols/vmps/vmps.c @@ -580,7 +580,7 @@ static ssize_t fr_vmps_encode_proto(UNUSED TALLOC_CTX *ctx, fr_pair_list_t *vps, { fr_dcursor_t cursor; - fr_dcursor_talloc_iter_init(&cursor, vps, fr_proto_next_encodable, dict_vmps, fr_pair_t); + fr_dcursor_talloc_iter_init(&cursor, fr_pair_list_order(vps), fr_proto_next_encodable, dict_vmps, fr_pair_t); return fr_vmps_encode(&FR_DBUFF_TMP(data, data_len), NULL, -1, -1, &cursor); }