From: Arran Cudbard-Bell Date: Tue, 12 Oct 2021 02:24:03 +0000 (-0500) Subject: Add fr_pair_list_dcursor_init and fr_pair_list_dcursor_talloc_init X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fc98ab7cdfadc1a3209ece317b28b832689f6078;p=thirdparty%2Ffreeradius-server.git Add fr_pair_list_dcursor_init and fr_pair_list_dcursor_talloc_init Use pair list specific iterators for initialising pair dcursors --- diff --git a/src/bin/dhcpclient.c b/src/bin/dhcpclient.c index 5a00a284f83..2360d6f88fa 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, fr_pair_list_order(&reply_vps)); + fr_pair_dcursor_init(&cursor, &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 4a210c201de..28b8c8e47f5 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, fr_pair_list_order(vps)); + fr_pair_dcursor_init(&list_cursor, vps); for (i = 0; i < num; i++) { match = fr_dcursor_filter_next(&list_cursor, fr_pair_matches_da, da[i]); if (!match) { @@ -2672,7 +2672,7 @@ int main(int argc, char *argv[]) if (rs_build_filter(&conf->filter_request_vps, conf->filter_request) < 0) usage(64); - type = fr_dcursor_iter_by_da_init(&cursor, &conf->filter_request_vps, attr_packet_type); + type = fr_pair_dcursor_by_da_init(&cursor, &conf->filter_request_vps, attr_packet_type); if (type) { fr_dcursor_remove(&cursor); conf->filter_request_code = type->vp_uint32; @@ -2686,7 +2686,7 @@ int main(int argc, char *argv[]) if (rs_build_filter(&conf->filter_response_vps, conf->filter_response) < 0) usage(64); - type = fr_dcursor_iter_by_da_init(&cursor, &conf->filter_response_vps, attr_packet_type); + type = fr_pair_dcursor_by_da_init(&cursor, &conf->filter_response_vps, attr_packet_type); if (type) { fr_dcursor_remove(&cursor); conf->filter_response_code = type->vp_uint32; diff --git a/src/bin/radsnmp.c b/src/bin/radsnmp.c index 27131e8385a..4c827c87b7d 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, fr_pair_list_order(head)); + for (vp = fr_pair_dcursor_init(&cursor, 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, fr_pair_list_order(&request_vps)); + fr_pair_dcursor_init(&cursor, &request_vps); NEXT_LINE(line, buffer); diff --git a/src/bin/unit_test_attribute.c b/src/bin/unit_test_attribute.c index da29f47a4c2..b661721850d 100644 --- a/src/bin/unit_test_attribute.c +++ b/src/bin/unit_test_attribute.c @@ -1672,9 +1672,9 @@ static size_t command_encode_pair(command_result_t *result, command_file_ctx_t * #endif } - 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); + for (vp = fr_pair_dcursor_iter_init(&cursor, &head, + tp->next_encodable ? tp->next_encodable : fr_proto_next_encodable, + cc->tmpl_rules.dict_def ? cc->tmpl_rules.dict_def : cc->config->dict); vp; vp = fr_dcursor_current(&cursor)) { slen = tp->func(&FR_DBUFF_TMP(enc_p, enc_end), &cursor, encode_ctx); diff --git a/src/bin/unit_test_module.c b/src/bin/unit_test_module.c index fae8c1e7a52..6ea17b23735 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, fr_pair_list_order(&request->request_pairs)); + for (vp = fr_pair_dcursor_init(&cursor, &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, fr_pair_list_order(&request->request_pairs)); + for (vp = fr_pair_dcursor_init(&cursor, &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, fr_pair_list_order(list)); + for (vp = fr_pair_dcursor_init(&cursor, list); vp; vp = fr_dcursor_next(&cursor)) { /* diff --git a/src/lib/eap/base.c b/src/lib/eap/base.c index 24d776b2bae..90e795f122c 100644 --- a/src/lib/eap/base.c +++ b/src/lib/eap/base.c @@ -288,7 +288,7 @@ eap_packet_raw_t *eap_packet_from_vp(TALLOC_CTX *ctx, fr_pair_list_t *vps) /* * Get only EAP-Message attribute list */ - vp = fr_dcursor_iter_by_da_init(&cursor, vps, attr_eap_message); + vp = fr_pair_dcursor_by_da_init(&cursor, vps, attr_eap_message); if (!vp) { fr_strerror_const("EAP-Message not found"); return NULL; diff --git a/src/lib/eap/chbind.c b/src/lib/eap/chbind.c index 11ca6973f45..ad73659e7ac 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, fr_pair_list_order(&request->reply_pairs)); + fr_pair_dcursor_init(&cursor, &request->reply_pairs); while ((vp = fr_dcursor_current(&cursor)) && (ptr < end)) { /* * Skip things which shouldn't be in channel bindings. @@ -272,7 +272,7 @@ chbind_packet_t *eap_chbind_vp2packet(TALLOC_CTX *ctx, fr_pair_list_t *vps) chbind_packet_t *packet; fr_dcursor_t cursor; - if (!fr_dcursor_iter_by_da_init(&cursor, vps, attr_eap_channel_binding_message)) return NULL; + if (!fr_pair_dcursor_by_da_init(&cursor, vps, attr_eap_channel_binding_message)) return NULL; /* * Compute the total length of the channel binding data. diff --git a/src/lib/eap_aka_sim/encode.c b/src/lib/eap_aka_sim/encode.c index 3cc9aa4b7ee..d2bc51cba03 100644 --- a/src/lib/eap_aka_sim/encode.c +++ b/src/lib/eap_aka_sim/encode.c @@ -893,7 +893,7 @@ 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, fr_pair_list_order(to_encode)) == vp) { + if (fr_pair_dcursor_init(&cursor, to_encode) == vp) { fr_dcursor_next(&cursor); /* Skip subtype if it came out first */ } diff --git a/src/lib/eap_aka_sim/module.c b/src/lib/eap_aka_sim/module.c index f69a150dad2..e73bf966f89 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, fr_pair_list_order(&request->request_pairs)); + fr_pair_dcursor_init(&cursor, &request->request_pairs); decode_ctx = mod_session->ctx; decode_ctx.hmac_extra = mod_session->response_hmac_extra; diff --git a/src/lib/eap_aka_sim/vector.c b/src/lib/eap_aka_sim/vector.c index b60fa5cfde6..29505a2a5ba 100644 --- a/src/lib/eap_aka_sim/vector.c +++ b/src/lib/eap_aka_sim/vector.c @@ -180,7 +180,7 @@ static int vector_gsm_from_triplets(request_t *request, fr_pair_list_t *vps, fr_dcursor_t cursor; int i; - for (i = 0, (kc = fr_dcursor_iter_by_da_init(&cursor, vps, attr_eap_aka_sim_kc)); + for (i = 0, (kc = fr_pair_dcursor_by_da_init(&cursor, vps, attr_eap_aka_sim_kc)); (i < idx) && (kc = fr_dcursor_next(&cursor)); i++); if (!kc) { @@ -194,7 +194,7 @@ static int vector_gsm_from_triplets(request_t *request, fr_pair_list_t *vps, return -1; } - for (i = 0, (rand = fr_dcursor_iter_by_da_init(&cursor, vps, attr_eap_aka_sim_rand)); + for (i = 0, (rand = fr_pair_dcursor_by_da_init(&cursor, vps, attr_eap_aka_sim_rand)); (i < idx) && (rand = fr_dcursor_next(&cursor)); i++); if (!rand) { @@ -208,7 +208,7 @@ static int vector_gsm_from_triplets(request_t *request, fr_pair_list_t *vps, return -1; } - for (i = 0, (sres = fr_dcursor_iter_by_da_init(&cursor, vps, attr_eap_aka_sim_sres)); + for (i = 0, (sres = fr_pair_dcursor_by_da_init(&cursor, vps, attr_eap_aka_sim_sres)); (i < idx) && (sres = fr_dcursor_next(&cursor)); i++); if (!sres) { @@ -245,7 +245,7 @@ static int vector_gsm_from_quintuplets(request_t *request, fr_pair_list_t *vps, /* * Fetch CK */ - for (i = 0, (ck = fr_dcursor_iter_by_da_init(&cursor, vps, attr_eap_aka_sim_ck)); + for (i = 0, (ck = fr_pair_dcursor_by_da_init(&cursor, vps, attr_eap_aka_sim_ck)); (i < idx) && (ck = fr_dcursor_next(&cursor)); i++); if (!ck) { @@ -257,7 +257,7 @@ static int vector_gsm_from_quintuplets(request_t *request, fr_pair_list_t *vps, /* * Fetch IK */ - for (i = 0, (ik = fr_dcursor_iter_by_da_init(&cursor, vps, attr_eap_aka_sim_ik)); + for (i = 0, (ik = fr_pair_dcursor_by_da_init(&cursor, vps, attr_eap_aka_sim_ik)); (i < idx) && (ik = fr_dcursor_next(&cursor)); i++); if (!ik) { @@ -269,7 +269,7 @@ static int vector_gsm_from_quintuplets(request_t *request, fr_pair_list_t *vps, /* * Fetch RAND */ - for (i = 0, (rand = fr_dcursor_iter_by_da_init(&cursor, vps, attr_eap_aka_sim_rand)); + for (i = 0, (rand = fr_pair_dcursor_by_da_init(&cursor, vps, attr_eap_aka_sim_rand)); (i < idx) && (rand = fr_dcursor_next(&cursor)); i++); if (!rand) { @@ -288,7 +288,7 @@ static int vector_gsm_from_quintuplets(request_t *request, fr_pair_list_t *vps, /* * Fetch XRES */ - for (i = 0, (xres = fr_dcursor_iter_by_da_init(&cursor, vps, attr_eap_aka_sim_xres)); + for (i = 0, (xres = fr_pair_dcursor_by_da_init(&cursor, vps, attr_eap_aka_sim_xres)); (i < idx) && (xres = fr_dcursor_next(&cursor)); i++); if (!xres) { diff --git a/src/lib/server/exec.c b/src/lib/server/exec.c index 42074794ea6..325e1b1b0b1 100644 --- a/src/lib/server/exec.c +++ b/src/lib/server/exec.c @@ -213,7 +213,7 @@ static int exec_pair_to_env(char **env_p, size_t env_len, fr_sbuff_t *env_sbuff, if (request) { da = fr_dict_attr_child_by_num(fr_dict_root(fr_dict_internal()), FR_EXEC_EXPORT); if (da) { - for (vp = fr_dcursor_iter_by_da_init(&cursor, &request->control_pairs, da); + for (vp = fr_pair_dcursor_by_da_init(&cursor, &request->control_pairs, da); vp && (i < (env_len - 1)); vp = fr_dcursor_next(&cursor)) { env_p[i++] = UNCONST(char *, vp->vp_strvalue); diff --git a/src/lib/server/exec_legacy.c b/src/lib/server/exec_legacy.c index f2a8e4ce715..a37cda435f0 100644 --- a/src/lib/server/exec_legacy.c +++ b/src/lib/server/exec_legacy.c @@ -105,7 +105,7 @@ static void exec_pair_to_env_legacy(request_t *request, fr_pair_list_t *input_pa if (request) { da = fr_dict_attr_child_by_num(fr_dict_root(fr_dict_internal()), FR_EXEC_EXPORT); if (da) { - for (vp = fr_dcursor_iter_by_da_init(&cursor, &request->control_pairs, da); + for (vp = fr_pair_dcursor_by_da_init(&cursor, &request->control_pairs, da); vp && (i < (envlen - 1)); vp = fr_dcursor_next(&cursor)) { DEBUG3("export %pV", &vp->data); diff --git a/src/lib/server/exfile.c b/src/lib/server/exfile.c index e0609c74a74..4323f4741ad 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, fr_pair_list_order(&args)); + fr_pair_dcursor_init(&cursor, &args); MEM(vp = fr_pair_afrom_da(NULL, da)); fr_pair_value_strdup(vp, entry->filename, false); diff --git a/src/lib/server/map.c b/src/lib/server/map.c index 9a8ed723ee4..201e3e5a51a 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, fr_pair_list_order(&found)); + vp = fr_pair_dcursor_init(&from, &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 2df0fb917c6..5a042e84107 100644 --- a/src/lib/server/map_async.c +++ b/src/lib/server/map_async.c @@ -722,7 +722,7 @@ int map_to_list_mod(TALLOC_CTX *ctx, vp_list_mod_t **out, return 0; /* No pairs returned */ } - (void)fr_dcursor_init(&from, fr_pair_list_order(&vp_head)); + (void)fr_pair_dcursor_init(&from, &vp_head); while ((vp = fr_dcursor_remove(&from))) { map_t *mod; tmpl_rules_t rules; @@ -1222,7 +1222,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, fr_pair_list_order(&vp_from)); + fr_pair_dcursor_init(&from, &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/password.c b/src/lib/server/password.c index 3b784da47b7..0256e8fd6fa 100644 --- a/src/lib/server/password.c +++ b/src/lib/server/password.c @@ -867,7 +867,7 @@ int password_normalise_and_replace(request_t *request, bool normify) int replaced = 0; fr_pair_t *known_good, *new; - for (known_good = fr_dcursor_iter_by_ancestor_init(&cursor, &request->control_pairs, attr_root); + for (known_good = fr_pair_dcursor_by_ancestor_init(&cursor, &request->control_pairs, attr_root); known_good; known_good = fr_dcursor_next(&cursor)) { if (!fr_cond_assert(known_good->da->attr < NUM_ELEMENTS(password_info))) return -1; @@ -963,7 +963,7 @@ fr_pair_t *password_find(bool *ephemeral, TALLOC_CTX *ctx, request_t *request, fr_dcursor_t cursor; fr_pair_t *known_good; - for (known_good = fr_dcursor_iter_by_ancestor_init(&cursor, &request->control_pairs, attr_root); + for (known_good = fr_pair_dcursor_by_ancestor_init(&cursor, &request->control_pairs, attr_root); known_good; known_good = fr_dcursor_next(&cursor)) { password_info_t *info; diff --git a/src/lib/server/snmp.c b/src/lib/server/snmp.c index a28684d4349..60e8b918644 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, 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, fr_pair_list_order(&request->reply_pairs)); - fr_dcursor_init(&out_cursor, fr_pair_list_order(&head)); + fr_pair_dcursor_init(&request_cursor, &request->request_pairs); + fr_pair_dcursor_by_da_init(&op_cursor, &request->request_pairs, attr_snmp_operation); + fr_pair_dcursor_init(&reply_cursor, &request->reply_pairs); + fr_pair_dcursor_init(&out_cursor, &head); RDEBUG2("Processing SNMP stats request"); @@ -975,7 +975,7 @@ int fr_snmp_process(request_t *request) } } - for (vp = fr_dcursor_iter_by_ancestor_init(&request_cursor, &request->request_pairs, attr_snmp_root); + for (vp = fr_pair_dcursor_by_ancestor_init(&request_cursor, &request->request_pairs, attr_snmp_root); vp; vp = fr_dcursor_next(&request_cursor)) { fr_proto_da_stack_build(&da_stack, vp->da); diff --git a/src/lib/server/state.c b/src/lib/server/state.c index 3a347a3cfe8..007a9bb0717 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, fr_pair_list_order(&entry->ctx->children)); + for (vp = fr_pair_dcursor_init(&cursor, &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 b3462a485c7..d8ca18f0218 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, fr_pair_list_order(list)); + fr_pair_dcursor_init(&ns->group.cursor, list); fr_dlist_insert_tail(&cc->nested, ns); } @@ -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, fr_pair_list_order(list_head), _tmpl_cursor_next, cc, fr_pair_t); + vp = fr_pair_dcursor_iter_init(cursor, list_head, _tmpl_cursor_next, cc); if (!vp) { if (err) { *err = -1; diff --git a/src/lib/tls/cache.c b/src/lib/tls/cache.c index 7ef3289a75b..90b1ae80343 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, fr_pair_list_order(&request->session_state_pairs)); + for (vp = fr_pair_dcursor_init(&dcursor, &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 f4c796916c1..03d0cdc03df 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, fr_pair_list_order(&foreach->vps), fr_pair_t); + fr_pair_dcursor_init(&foreach->cursor, &foreach->vps); #ifndef NDEBUG foreach->indent = request->log.unlang_indent; #endif diff --git a/src/lib/unlang/xlat.c b/src/lib/unlang/xlat.c index b9e3efc16fe..cb3cff6654a 100644 --- a/src/lib/unlang/xlat.c +++ b/src/lib/unlang/xlat.c @@ -218,7 +218,7 @@ int unlang_xlat_push(TALLOC_CTX *ctx, fr_value_box_list_t *out, MEM(frame->state = state = talloc_zero(stack, unlang_frame_state_xlat_t)); state->exp = talloc_get_type_abort_const(exp, xlat_exp_t); /* Ensure the node is valid */ - fr_dcursor_talloc_init(&state->values, out, fr_value_box_t); + fr_dcursor_init(&state->values, out); fr_value_box_list_init(&state->rhead); state->ctx = ctx; diff --git a/src/lib/unlang/xlat_eval.c b/src/lib/unlang/xlat_eval.c index b1de6faacb5..5d6e3013a61 100644 --- a/src/lib/unlang/xlat_eval.c +++ b/src/lib/unlang/xlat_eval.c @@ -1440,7 +1440,7 @@ static char *xlat_sync_eval(TALLOC_CTX *ctx, request_t *request, xlat_exp_t cons fr_dcursor_t cursor; fr_value_box_list_init(&head); - fr_dcursor_talloc_init(&cursor, &head, fr_value_box_t); + fr_dcursor_init(&cursor, &head); XLAT_DEBUG("%.*sxlat aprint %d %s", lvl, xlat_spaces, node->type, node->fmt); diff --git a/src/lib/util/dcursor.c b/src/lib/util/dcursor.c index dcbdbf964c2..5d425d2157b 100644 --- a/src/lib/util/dcursor.c +++ b/src/lib/util/dcursor.c @@ -89,7 +89,7 @@ void *fr_dcursor_intersect_next(fr_dcursor_t *a, fr_dcursor_t *b) * Both have iterators... */ b_iter = b->iter; - b_uctx = b->uctx; + b_uctx = b->iter_uctx; /* * Deal with the case where the two iterators @@ -141,7 +141,7 @@ void *fr_dcursor_intersect_next(fr_dcursor_t *a, fr_dcursor_t *b) */ fr_dcursor_copy(b, a); b->iter = b_iter; - b->uctx = b_uctx; + b->iter_uctx = b_uctx; } while ((a->current = dcursor_next(a, a->current))); return NULL; diff --git a/src/lib/util/dcursor.h b/src/lib/util/dcursor.h index 14a3a3d8814..1406e7c5010 100644 --- a/src/lib/util/dcursor.h +++ b/src/lib/util/dcursor.h @@ -80,10 +80,11 @@ typedef struct { void *current; //!< The current item in the dlist. void *prev; //!< The previous item in the dlist. fr_dcursor_iter_t iter; //!< Iterator function. + void *iter_uctx; //!< to pass to iterator function. fr_dcursor_insert_t insert; //!< Callback function on insert. fr_dcursor_remove_t remove; //!< Callback function on delete. + void *mod_uctx; //!< to pass to modification functions. bool is_const; //!< The list we're iterating over is immutable. - void *uctx; //!< to pass to iterator function. } fr_dcursor_t; typedef struct { @@ -112,7 +113,7 @@ static inline void *dcursor_next(fr_dcursor_t *cursor, void *current) if (!cursor->iter) return (fr_dlist_head(cursor->dlist)); /* Fast path without custom iter */ current = fr_dlist_head(cursor->dlist); - return cursor->iter(cursor->dlist, current, cursor->uctx); + return cursor->iter(cursor->dlist, current, cursor->iter_uctx); } #ifndef TALLOC_GET_TYPE_ABORT_NOOP @@ -133,7 +134,7 @@ static inline void *dcursor_next(fr_dcursor_t *cursor, void *current) * The iterator can just return what it was passed for curr * if it just wants to advance by one. */ - return cursor->iter(cursor->dlist, next, cursor->uctx); + return cursor->iter(cursor->dlist, next, cursor->iter_uctx); } /** Copy cursor parameters and state. @@ -340,7 +341,7 @@ static inline int fr_dcursor_prepend(fr_dcursor_t *cursor, void *v) if (cursor->dlist->type) _talloc_get_type_abort(v, cursor->dlist->type, __location__); #endif - if (cursor->insert) if ((ret = cursor->insert(cursor->dlist, v, cursor->uctx)) < 0) return ret; + if (cursor->insert) if ((ret = cursor->insert(cursor->dlist, v, cursor->mod_uctx)) < 0) return ret; /* * Insert at the head of the list @@ -381,7 +382,7 @@ static inline int fr_dcursor_append(fr_dcursor_t *cursor, void *v) if (cursor->dlist->type) _talloc_get_type_abort(v, cursor->dlist->type, __location__); #endif - if (cursor->insert) if ((ret = cursor->insert(cursor->dlist, v, cursor->uctx)) < 0) return ret; + if (cursor->insert) if ((ret = cursor->insert(cursor->dlist, v, cursor->mod_uctx)) < 0) return ret; fr_dlist_insert_tail(cursor->dlist, v); @@ -415,7 +416,7 @@ static inline int fr_dcursor_insert(fr_dcursor_t *cursor, void *v) return 0; } - if (cursor->insert) if ((ret = cursor->insert(cursor->dlist, v, cursor->uctx)) < 0) return ret; + if (cursor->insert) if ((ret = cursor->insert(cursor->dlist, v, cursor->mod_uctx)) < 0) return ret; fr_dlist_insert_after(cursor->dlist, cursor->current, v); @@ -458,7 +459,7 @@ static inline void * fr_dcursor_remove(fr_dcursor_t *cursor) v = cursor->current; - if (cursor->remove) if ((ret = cursor->remove(cursor->dlist, v, cursor->uctx)) < 0) return ret; + if (cursor->remove) if ((ret = cursor->remove(cursor->dlist, v, cursor->mod_uctx)) < 0) return ret; p = fr_dcursor_list_prev_peek(cursor); fr_dlist_remove(cursor->dlist, v); @@ -612,7 +613,7 @@ static inline void * fr_dcursor_replace(fr_dcursor_t *cursor, void *r) } p = fr_dcursor_list_prev_peek(cursor); - if (cursor->remove) if ((ret = cursor->remove(cursor->dlist, v, cursor->uctx)) < 0) return ret; + if (cursor->remove) if ((ret = cursor->remove(cursor->dlist, v, cursor->mod_uctx)) < 0) return ret; fr_dlist_replace(cursor->dlist, cursor->current, r); @@ -654,29 +655,29 @@ static inline void fr_dcursor_free_list(fr_dcursor_t *cursor) } while (v); } -/** Initialise a cursor with runtime talloc type safety checks and a custom iterator +/** Initialise a cursor with a custom iterator * * @param[in] _cursor to initialise. * @param[in] _head of item list. * @param[in] _iter function. * @param[in] _uctx _iter function _uctx. - * @param[in] _type Talloc type i.e. fr_pair_t or fr_value_box_t. * @return * - NULL if _head does not point to any items, or the iterator matches no items * in the current list. * - The first item returned by the iterator. */ -#define fr_dcursor_talloc_iter_init(_cursor, _head, _iter, _uctx, _type) \ +#define fr_dcursor_iter_mod_init(_cursor, _head, _iter, _iter_uctx, _insert, _remove, _mod_uctx) \ _fr_dcursor_init(_cursor, \ _head, \ _iter, \ - NULL, \ - NULL, \ + _iter_uctx, \ + _insert, \ + _remove, \ + _mod_uctx, \ _Generic((_head), \ fr_dlist_head_t * : false, \ fr_dlist_head_t const * : true \ - ), \ - _uctx) + )) /** Initialise a cursor with a custom iterator * @@ -693,34 +694,14 @@ static inline void fr_dcursor_free_list(fr_dcursor_t *cursor) _fr_dcursor_init(_cursor, \ _head, \ _iter, \ - NULL, \ - NULL, \ - _Generic((_head), \ - fr_dlist_head_t * : false, \ - fr_dlist_head_t const * : true \ - ), \ - _uctx) - -/** Initialise a cursor with runtime talloc type safety checks - * - * @param[in] _cursor to initialise. - * @param[in] _head of item list. - * @param[in] _type Talloc type i.e. fr_pair_t or fr_value_box_t. - * @return - * - NULL if _head does not point to any items. - * - The first item in the list. - */ -#define fr_dcursor_talloc_init(_cursor, _head, _type) \ - _fr_dcursor_init(_cursor, \ - _head, \ + _uctx, \ NULL, \ NULL, \ NULL, \ _Generic((_head), \ fr_dlist_head_t * : false, \ fr_dlist_head_t const * : true \ - ), \ - NULL) + )) /** Initialise a cursor * @@ -736,36 +717,39 @@ static inline void fr_dcursor_free_list(fr_dcursor_t *cursor) NULL, \ NULL, \ NULL, \ + NULL, \ + NULL, \ _Generic((_head), \ fr_dlist_head_t * : false, \ fr_dlist_head_t const * : true \ - ), \ - NULL) + )) /** Setup a cursor to iterate over attribute items in dlists * * @param[in] cursor Where to initialise the cursor (uses existing structure). * @param[in] head of dlist. * @param[in] iter Iterator callback. + * @param[in] iter_uctx to pass to iterator function. * @param[in] insert Callback for inserts. * @param[in] remove Callback for removals. + * @param[in] mod_uctx to pass to modification functions. * @param[in] is_const Don't allow modification of the underlying list. - * @param[in] uctx to pass to iterator function. * @return the attribute pointed to by v. * * @hidecallergraph */ static inline CC_HINT(nonnull(1,2)) void *_fr_dcursor_init(fr_dcursor_t *cursor, fr_dlist_head_t const *head, - fr_dcursor_iter_t iter, fr_dcursor_insert_t insert, - fr_dcursor_remove_t remove, bool is_const, void const *uctx) + fr_dcursor_iter_t iter, void const *iter_uctx, + fr_dcursor_insert_t insert, fr_dcursor_remove_t remove, void const *mod_uctx, bool is_const) { *cursor = (fr_dcursor_t){ .dlist = UNCONST(fr_dlist_head_t *, head), .iter = iter, + .iter_uctx = UNCONST(void *, iter_uctx), .insert = insert, .remove = remove, - .uctx = UNCONST(void *, uctx), + .mod_uctx = UNCONST(void *, mod_uctx), .is_const = is_const }; if (!fr_dlist_empty(cursor->dlist)) return fr_dcursor_next(cursor); /* Initialise current */ diff --git a/src/lib/util/dcursor_tests.c b/src/lib/util/dcursor_tests.c index 7a36a0d4139..65b134d4a2d 100644 --- a/src/lib/util/dcursor_tests.c +++ b/src/lib/util/dcursor_tests.c @@ -41,7 +41,7 @@ static void test_init_null_item(void) TEST_CHECK(!fr_dcursor_current(&cursor)); TEST_CHECK(!fr_dcursor_list_prev_peek(&cursor)); TEST_CHECK(!fr_dcursor_list_next_peek(&cursor)); - TEST_CHECK(cursor.uctx == &cursor); + TEST_CHECK(cursor.iter_uctx == &cursor); } static void test_init_1i_start(void) @@ -917,7 +917,7 @@ static void test_dcursor_remove_empty(void) test_list_init(&list); - _fr_dcursor_init(&cursor, (fr_dlist_head_t *)&list, test_iter, NULL, NULL, false, NULL); + _fr_dcursor_init(&cursor, (fr_dlist_head_t *)&list, test_iter, NULL, NULL, NULL, NULL, false); TEST_CHECK(!fr_dcursor_remove(&cursor)); } diff --git a/src/lib/util/pair.c b/src/lib/util/pair.c index 9ab89575782..b1d344a5690 100644 --- a/src/lib/util/pair.c +++ b/src/lib/util/pair.c @@ -731,6 +731,116 @@ fr_pair_list_t *fr_pair_children(fr_pair_t *vp) return pair_children(vp); } +/** Keep attr tree and sublists synced on cursor insert + * + * @param[in] list Underlying order list from the fr_pair_list_t. + * @param[in] to_insert fr_pair_t being inserted. + * @param[in] uctx fr_pair_list_t containing the order list. + * @return + * - 0 on success. + */ +static int _pair_list_dcursor_insert(UNUSED fr_dlist_head_t *list, UNUSED void *to_insert, UNUSED void *uctx) +{ + return 0; +} + +/** Keep attr tree and sublists synced on cursor insert + * + * @param[in] list Underlying order list from the fr_pair_list_t. + * @param[in] to_remove fr_pair_t being removed. + * @param[in] uctx fr_pair_list_t containing the order list. + * @return + * - 0 on success. + */ +static int _pair_list_dcursor_remove(UNUSED fr_dlist_head_t *list, UNUSED void *to_remove, UNUSED void *uctx) +{ + return 0; +} + +/** Initialises a special dcursor with callbacks that will maintain the attr sublists correctly + * + * Filters can be applied later with fr_dcursor_filter_set. + * + * @note This is the only way to use a dcursor in non-const mode with fr_pair_list_t. + * + * @param[out] cursor to initialise. + * @param[in] list to iterate over. + * @param[in] iter Iterator to use when filtering pairs. + * @param[in] uctx To pass to iterator. + * @param[in] is_const whether the fr_pair_list_t is const. + * @return + * - NULL if src does not point to any items. + * - The first pair in the list. + */ +fr_pair_t *_fr_pair_dcursor_iter_init(fr_dcursor_t *cursor, fr_pair_list_t const *list, + fr_dcursor_iter_t iter, void const *uctx, + bool is_const) +{ + return _fr_dcursor_init(cursor, &list->order, + iter, uctx, + _pair_list_dcursor_insert, _pair_list_dcursor_remove, list, is_const); +} + +/** Initialises a special dcursor with callbacks that will maintain the attr sublists correctly + * + * Filters can be applied later with fr_dcursor_filter_set. + * + * @note This is the only way to use a dcursor in non-const mode with fr_pair_list_t. + * + * @param[out] cursor to initialise. + * @param[in] list to iterate over. + * @param[in] is_const whether the fr_pair_list_t is const. + * @return + * - NULL if src does not point to any items. + * - The first pair in the list. + */ +fr_pair_t *_fr_pair_dcursor_init(fr_dcursor_t *cursor, fr_pair_list_t const *list, + bool is_const) +{ + return _fr_dcursor_init(cursor, &list->order, + NULL, NULL, + _pair_list_dcursor_insert, _pair_list_dcursor_remove, list, is_const); +} + + +/** Initialise a cursor that will return only attributes matching the specified #fr_dict_attr_t + * + * @param[in] cursor to initialise. + * @param[in] list to iterate over. + * @param[in] da to search for. + * @param[in] is_const whether the fr_pair_list_t is const. + * @return + * - The first matching pair. + * - NULL if no pairs match. + */ +fr_pair_t *_fr_pair_dcursor_by_da_init(fr_dcursor_t *cursor, + fr_pair_list_t const *list, fr_dict_attr_t const *da, + bool is_const) +{ + return _fr_dcursor_init(cursor, &list->order, + fr_pair_iter_next_by_da, da, + _pair_list_dcursor_insert, _pair_list_dcursor_remove, list, is_const); +} + +/** Initialise a cursor that will return only attributes descended from the specified #fr_dict_attr_t + * + * @param[in] cursor to initialise. + * @param[in] list to iterate over. + * @param[in] da who's decentness to search for. + * @param[in] is_const whether the fr_pair_list_t is const. + * @return + * - The first matching pair. + * - NULL if no pairs match. + */ +fr_pair_t *_fr_pair_dcursor_by_ancestor_init(fr_dcursor_t *cursor, + fr_pair_list_t const *list, fr_dict_attr_t const *da, + bool is_const) +{ + return _fr_dcursor_init(cursor, &list->order, + fr_pair_iter_next_by_ancestor, da, + _pair_list_dcursor_insert, _pair_list_dcursor_remove, list, is_const); +} + /** Get the head of a valuepair list * * @param[in] list to return the head of diff --git a/src/lib/util/pair.h b/src/lib/util/pair.h index 692ce9cf398..e91ed63817d 100644 --- a/src/lib/util/pair.h +++ b/src/lib/util/pair.h @@ -258,38 +258,6 @@ void *fr_pair_iter_next_by_ancestor(fr_dlist_head_t *list, bool fr_pair_matches_da(void const *item, void const *uctx) CC_HINT(nonnull); -/** Initialise a cursor that will return only attributes matching the specified #fr_dict_attr_t - * - * @param[in] cursor to initialise. - * @param[in] list to iterate over. - * @param[in] da to search for. - * @return - * - The first matching pair. - * - NULL if no pairs match. - */ -static inline CC_HINT(nonnull) -fr_pair_t *fr_dcursor_iter_by_da_init(fr_dcursor_t *cursor, - fr_pair_list_t *list, fr_dict_attr_t const *da) -{ - return fr_dcursor_talloc_iter_init(cursor, &list->order, fr_pair_iter_next_by_da, da, fr_pair_t); -} - -/** Initialise a cursor that will return only attributes descended from the specified #fr_dict_attr_t - * - * @param[in] cursor to initialise. - * @param[in] list to iterate over. - * @param[in] da who's decentness to search for. - * @return - * - The first matching pair. - * - NULL if no pairs match. - */ -static inline CC_HINT(nonnull) -fr_pair_t *fr_dcursor_iter_by_ancestor_init(fr_dcursor_t *cursor, - fr_pair_list_t *list, fr_dict_attr_t const *da) -{ - return fr_dcursor_talloc_iter_init(cursor, &list->order, fr_pair_iter_next_by_ancestor, da, fr_pair_t); -} - /** @hidecallergraph */ unsigned int fr_pair_count_by_da(fr_pair_list_t const *list, fr_dict_attr_t const *da) CC_HINT(nonnull); @@ -330,6 +298,97 @@ fr_pair_t *fr_pair_delete(fr_pair_list_t *list, fr_pair_t *vp) CC_HINT(nonnull); /* functions for FR_TYPE_STRUCTURAL */ fr_pair_list_t *fr_pair_children(fr_pair_t *head) CC_HINT(nonnull); +/** Initialises a special dcursor with callbacks that will maintain the attr sublists correctly + * + * Filters can be applied later with fr_dcursor_filter_set. + * + * @note This is the only way to use a dcursor in non-const mode with fr_pair_list_t. + * + * @param[out] cursor to initialise. + * @param[in] list to iterate over. + * @param[in] iter Iterator to use when filtering pairs. + * @param[in] uctx To pass to iterator. + * @return + * - NULL if src does not point to any items. + * - The first pair in the list. + */ +#define fr_pair_dcursor_iter_init(_cursor, _list, _iter, _uctx) \ + _fr_pair_dcursor_iter_init(_cursor, \ + _list, \ + _iter, \ + _uctx, \ + _Generic((_list), \ + fr_pair_list_t * : false, \ + fr_pair_list_t const * : true \ + )) +fr_pair_t *_fr_pair_dcursor_iter_init(fr_dcursor_t *cursor, fr_pair_list_t const *list, + fr_dcursor_iter_t iter, void const *uctx, + bool is_const) CC_HINT(nonnull); + +/** Initialises a special dcursor with callbacks that will maintain the attr sublists correctly + * + * Filters can be applied later with fr_dcursor_filter_set. + * + * @note This is the only way to use a dcursor in non-const mode with fr_pair_list_t. + * + * @param[out] cursor to initialise. + * @param[in] list to iterate over. + * @return + * - NULL if src does not point to any items. + * - The first pair in the list. + */ +#define fr_pair_dcursor_init(_cursor, _list) \ + _fr_pair_dcursor_init(_cursor, \ + _list, \ + _Generic((_list), \ + fr_pair_list_t * : false, \ + fr_pair_list_t const * : true \ + )) +fr_pair_t *_fr_pair_dcursor_init(fr_dcursor_t *cursor, fr_pair_list_t const *list, + bool is_const) CC_HINT(nonnull); + +/** Initialise a cursor that will return only attributes matching the specified #fr_dict_attr_t + * + * @param[in] cursor to initialise. + * @param[in] list to iterate over. + * @param[in] da to search for. + * @return + * - The first matching pair. + * - NULL if no pairs match. + */ +#define fr_pair_dcursor_by_da_init(_cursor, _list, _da) \ + _fr_pair_dcursor_by_da_init(_cursor, \ + _list, \ + _da, \ + _Generic((_list), \ + fr_pair_list_t * : false, \ + fr_pair_list_t const * : true \ + )) +fr_pair_t *_fr_pair_dcursor_by_da_init(fr_dcursor_t *cursor, + fr_pair_list_t const *list, fr_dict_attr_t const *da, + bool is_const) CC_HINT(nonnull); + +/** Initialise a cursor that will return only attributes descended from the specified #fr_dict_attr_t + * + * @param[in] cursor to initialise. + * @param[in] list to iterate over. + * @param[in] da who's decentness to search for. + * @return + * - The first matching pair. + * - NULL if no pairs match. + */ +#define fr_pair_dcursor_by_ancestor_init(_cursor, _list, _da) \ + _fr_pair_dcursor_by_ancestor_init(_cursor, \ + _list, \ + _da, \ + _Generic((_list), \ + fr_pair_list_t * : false, \ + fr_pair_list_t const * : true \ + )) +fr_pair_t *_fr_pair_dcursor_by_ancestor_init(fr_dcursor_t *cursor, + fr_pair_list_t const *list, fr_dict_attr_t const *da, + bool is_const) CC_HINT(nonnull); + /** Compare two attributes using and operator. * * @return diff --git a/src/lib/util/pair_print.c b/src/lib/util/pair_print.c index c53fdba983c..2eb8243540b 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, fr_pair_list_order(&vp->vp_group)); + for (child = fr_pair_dcursor_init(&cursor, &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 bad0852d9f8..84e065d793b 100644 --- a/src/lib/util/pair_tests.c +++ b/src/lib/util/pair_tests.c @@ -181,14 +181,14 @@ static void test_fr_pair_to_unknown(void) TEST_CHECK(vp && vp->da->flags.is_unknown == true); } -static void test_fr_dcursor_iter_by_da_init(void) +static void test_fr_pair_dcursor_by_da_init(void) { fr_pair_t *vp, *needle; fr_dcursor_t cursor; - TEST_CASE("Searching for fr_dict_attr_test_uint32 using fr_dcursor_iter_by_da_init()"); + TEST_CASE("Searching for fr_dict_attr_test_uint32 using fr_pair_dcursor_by_da_init()"); needle = NULL; - for (vp = fr_dcursor_iter_by_da_init(&cursor, &test_pairs, fr_dict_attr_test_uint32); + for (vp = fr_pair_dcursor_by_da_init(&cursor, &test_pairs, fr_dict_attr_test_uint32); vp; vp = fr_dcursor_next(&cursor)) { if (!needle) { @@ -207,14 +207,14 @@ static void test_fr_dcursor_iter_by_da_init(void) TEST_CHECK(needle && needle->da == fr_dict_attr_test_uint32); } -static void test_fr_dcursor_iter_by_ancestor_init(void) +static void test_fr_pair_dcursor_by_ancestor_init(void) { fr_pair_t *vp, *needle; fr_dcursor_t cursor; - TEST_CASE("Searching for fr_dict_attr_test_tlv_string as ascend of fr_dict_attr_test_tlv using fr_dcursor_iter_by_ancestor_init()"); + TEST_CASE("Searching for fr_dict_attr_test_tlv_string as ascend of fr_dict_attr_test_tlv using fr_pair_dcursor_by_ancestor_init()"); needle = NULL; - for (vp = fr_dcursor_iter_by_ancestor_init(&cursor, &test_pairs, fr_dict_attr_test_tlv); + for (vp = fr_pair_dcursor_by_ancestor_init(&cursor, &test_pairs, fr_dict_attr_test_tlv); vp; vp = fr_dcursor_next(&cursor)) { TEST_CHECK(vp != NULL); @@ -277,9 +277,9 @@ 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, fr_pair_list_order(&local_pairs)); - vp; - vp = fr_dcursor_next(&cursor)) count++; + for (vp = fr_pair_dcursor_init(&cursor, &local_pairs); + vp; + vp = fr_dcursor_next(&cursor)) count++; TEST_CASE("Expected (count == 3)"); TEST_CHECK(count == 3); @@ -312,9 +312,9 @@ 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, fr_pair_list_order(&local_pairs)); - vp; - vp = fr_dcursor_next(&cursor)) { + for (vp = fr_pair_dcursor_init(&cursor, &local_pairs); + vp; + vp = fr_dcursor_next(&cursor)) { TEST_CASE("Expected (vp->da == fr_dict_attr_test_string)"); TEST_CHECK(vp->da == fr_dict_attr_test_string); } @@ -440,9 +440,9 @@ 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, fr_pair_list_order(&local_pairs)); - vp; - vp = fr_dcursor_next(&cursor)) { + for (vp = fr_pair_dcursor_init(&cursor, &local_pairs); + vp; + vp = fr_dcursor_next(&cursor)) { TEST_CASE("Validating PAIR_VERIFY()"); PAIR_VERIFY(vp); @@ -465,9 +465,9 @@ 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, fr_pair_list_order(&local_pairs)); - vp; - vp = fr_dcursor_next(&cursor)) { + for (vp = fr_pair_dcursor_init(&cursor, &local_pairs); + vp; + vp = fr_dcursor_next(&cursor)) { TEST_CASE("Validating PAIR_VERIFY()"); PAIR_VERIFY(vp); @@ -513,7 +513,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, fr_pair_list_order(&local_pairs))) != NULL); + TEST_CHECK((vp = fr_pair_dcursor_init(&cursor, &local_pairs)) != NULL); TEST_CHECK(vp && vp->da == fr_dict_attr_test_string); TEST_CASE("2nd (da == fr_dict_attr_test_octets)"); @@ -1134,8 +1134,8 @@ TEST_LIST = { { "fr_pair_steal", test_fr_pair_steal }, /* Searching and list modification */ - { "fr_dcursor_iter_by_da_init", test_fr_dcursor_iter_by_da_init }, - { "fr_dcursor_iter_by_ancestor_init", test_fr_dcursor_iter_by_ancestor_init }, + { "fr_dcursor_iter_by_da_init", test_fr_pair_dcursor_by_da_init }, + { "fr_pair_dcursor_by_ancestor_init", test_fr_pair_dcursor_by_ancestor_init }, { "fr_pair_to_unknown", test_fr_pair_to_unknown }, { "fr_pair_find_by_da", test_fr_pair_find_by_da }, { "fr_pair_find_by_child_num", test_fr_pair_find_by_child_num }, diff --git a/src/lib/util/struct.c b/src/lib/util/struct.c index 79ae3e9ece2..c3865039d67 100644 --- a/src/lib/util/struct.c +++ b/src/lib/util/struct.c @@ -491,7 +491,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, fr_pair_list_order(&sorted->vp_group)); + fr_pair_dcursor_init(&child_cursor, &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 2f49ca8aa4b..7bb5a68e64a 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, fr_pair_list_order(&request->request_pairs)); + fr_pair_dcursor_init(&cursor, &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 f4262d37f9e..62e2d919e1d 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, fr_pair_list_order(&request->reply_pairs), fr_proto_next_encodable, dict_vmps, fr_pair_t); + fr_pair_dcursor_iter_init(&cursor, &request->reply_pairs, fr_proto_next_encodable, dict_vmps); 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 b7736adb8b5..e9d1d28a74f 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, fr_pair_list_order(&request->control_pairs)); + for (vp = fr_pair_dcursor_init(&cursor, &request->control_pairs); vp; vp = fr_dcursor_next(&cursor)) { again: diff --git a/src/modules/rlm_eap/types/rlm_eap_fast/eap_fast.c b/src/modules/rlm_eap/types/rlm_eap_fast/eap_fast.c index c762f72717b..61ab96b29b0 100644 --- a/src/modules/rlm_eap/types/rlm_eap_fast/eap_fast.c +++ b/src/modules/rlm_eap/types/rlm_eap_fast/eap_fast.c @@ -549,7 +549,7 @@ static rlm_rcode_t CC_HINT(nonnull) process_reply(UNUSED eap_session_t *eap_sess * Copy the EAP-Message back to the tunnel. */ - for (vp = fr_dcursor_iter_by_da_init(&cursor, reply_list, attr_eap_message); + for (vp = fr_pair_dcursor_by_da_init(&cursor, reply_list, attr_eap_message); vp; vp = fr_dcursor_next(&cursor)) { eap_fast_tlv_append(tls_session, attr_eap_fast_eap_payload, true, vp->vp_length, vp->vp_octets); 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 cc25f859331..478f979555b 100644 --- a/src/modules/rlm_eap/types/rlm_eap_ttls/ttls.c +++ b/src/modules/rlm_eap/types/rlm_eap_ttls/ttls.c @@ -659,7 +659,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, fr_pair_list_order(&request->request_pairs)); + fr_pair_dcursor_init(&cursor, &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_ldap/groups.c b/src/modules/rlm_ldap/groups.c index 8b38843dd5f..522b9918326 100644 --- a/src/modules/rlm_ldap/groups.c +++ b/src/modules/rlm_ldap/groups.c @@ -841,7 +841,7 @@ unlang_action_t rlm_ldap_check_cached(rlm_rcode_t *p_result, * We return RLM_MODULE_INVALID here as an indication * the caller should try a dynamic group lookup instead. */ - vp = fr_dcursor_iter_by_da_init(&cursor, &request->control_pairs, inst->cache_da); + vp = fr_pair_dcursor_by_da_init(&cursor, &request->control_pairs, inst->cache_da); if (!vp) RETURN_MODULE_INVALID; for (vp = fr_dcursor_current(&cursor); diff --git a/src/modules/rlm_logtee/rlm_logtee.c b/src/modules/rlm_logtee/rlm_logtee.c index 3a44d19a2bb..4ca400f8c21 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, fr_pair_list_order(&request->request_pairs)); + fr_pair_dcursor_init(&cursor, &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 f41362cfc7b..85f62b76564 100644 --- a/src/modules/rlm_lua/lua.c +++ b/src/modules/rlm_lua/lua.c @@ -327,7 +327,7 @@ static int _lua_pair_get(lua_State *L) /* * @fixme Packet list should be light user data too at some point */ - fr_dcursor_iter_by_da_init(&cursor, &request->request_pairs, da); + fr_pair_dcursor_by_da_init(&cursor, &request->request_pairs, da); for (index = (int) lua_tointeger(L, -1); index >= 0; index--) { vp = fr_dcursor_next(&cursor); @@ -376,7 +376,7 @@ static int _lua_pair_set(lua_State *L) /* * @fixme Packet list should be light user data too at some point */ - fr_dcursor_iter_by_da_init(&cursor, &request->request_pairs, da); + fr_pair_dcursor_by_da_init(&cursor, &request->request_pairs, da); for (index = lua_tointeger(L, -2); index >= 0; index--) { vp = fr_dcursor_next(&cursor); @@ -458,7 +458,7 @@ static int _lua_pair_iterator_init(lua_State *L) REDEBUG("Failed allocating user data to hold cursor"); return -1; } - fr_dcursor_iter_by_da_init(cursor, &request->request_pairs, da); /* @FIXME: Shouldn't use list head */ + fr_pair_dcursor_by_da_init(cursor, &request->request_pairs, da); /* @FIXME: Shouldn't use list head */ lua_pushcclosure(L, _lua_pair_iterator, 1); @@ -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, fr_pair_list_order(&request->request_pairs)); /* @FIXME: Shouldn't use list head */ + fr_pair_dcursor_init(cursor, &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, fr_pair_list_order(&request->request_pairs)); + fr_pair_dcursor_init(&cursor, &request->request_pairs); /* * Setup the environment diff --git a/src/modules/rlm_passwd/rlm_passwd.c b/src/modules/rlm_passwd/rlm_passwd.c index 40bae43c4d3..555d4ceaf71 100644 --- a/src/modules/rlm_passwd/rlm_passwd.c +++ b/src/modules/rlm_passwd/rlm_passwd.c @@ -546,7 +546,7 @@ static unlang_action_t CC_HINT(nonnull) mod_passwd_map(rlm_rcode_t *p_result, mo key = fr_pair_find_by_da(&request->request_pairs, inst->keyattr, 0); if (!key) RETURN_MODULE_NOTFOUND; - for (i = fr_dcursor_iter_by_da_init(&cursor, &request->request_pairs, inst->keyattr); + for (i = fr_pair_dcursor_by_da_init(&cursor, &request->request_pairs, inst->keyattr); i; i = fr_dcursor_next(&cursor)) { /* diff --git a/src/modules/rlm_perl/rlm_perl.c b/src/modules/rlm_perl/rlm_perl.c index cf9c35230e2..e4cd5023a5b 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, fr_pair_list_order(vps)); + for (vp = fr_pair_dcursor_init(&cursor, vps); vp; vp = fr_dcursor_next(&cursor)) { fr_pair_t *next; diff --git a/src/modules/rlm_radius/rlm_radius.c b/src/modules/rlm_radius/rlm_radius.c index bec7af337f9..996258c0dc4 100644 --- a/src/modules/rlm_radius/rlm_radius.c +++ b/src/modules/rlm_radius/rlm_radius.c @@ -406,7 +406,7 @@ static void radius_fixups(rlm_radius_t const *inst, request_t *request) if (RDEBUG_ENABLED) { fr_dcursor_t cursor; - for (vp = fr_dcursor_iter_by_da_init(&cursor, &request->request_pairs, attr_proxy_state); + for (vp = fr_pair_dcursor_by_da_init(&cursor, &request->request_pairs, attr_proxy_state); vp; vp = fr_dcursor_next(&cursor)) { if (vp->vp_length != 4) continue; diff --git a/src/modules/rlm_radius/rlm_radius_udp.c b/src/modules/rlm_radius/rlm_radius_udp.c index df70cfd7de0..eedac38d22f 100644 --- a/src/modules/rlm_radius/rlm_radius_udp.c +++ b/src/modules/rlm_radius/rlm_radius_udp.c @@ -1404,7 +1404,7 @@ static int encode(rlm_radius_udp_t const *inst, request_t *request, udp_request_ * sure that it's a loop. */ if (DEBUG_ENABLED) { - for (vp = fr_dcursor_iter_by_da_init(&cursor, &request->request_pairs, attr_proxy_state); + for (vp = fr_pair_dcursor_by_da_init(&cursor, &request->request_pairs, attr_proxy_state); vp; vp = fr_dcursor_next(&cursor)) { if ((vp->vp_length == 5) && (memcmp(vp->vp_octets, &inst->parent->proxy_state, 4) == 0)) { diff --git a/src/modules/rlm_rest/rest.c b/src/modules/rlm_rest/rest.c index c26f78676d2..109a8d3d86b 100644 --- a/src/modules/rlm_rest/rest.c +++ b/src/modules/rlm_rest/rest.c @@ -1802,7 +1802,7 @@ int rest_request_config(rlm_rest_t const *inst, rlm_rest_thread_t *t, rlm_rest_s ctx->headers = curl_slist_append(ctx->headers, buffer); if (!ctx->headers) goto error_header; - for (header = fr_dcursor_iter_by_da_init(&headers, &request->control_pairs, attr_rest_http_header); + for (header = fr_pair_dcursor_by_da_init(&headers, &request->control_pairs, attr_rest_http_header); header; header = fr_dcursor_next(&headers)) { header = fr_dcursor_remove(&headers); @@ -2031,7 +2031,7 @@ do {\ case REST_HTTP_BODY_POST: rest_request_init(section, request, &ctx->request); - fr_dcursor_init(&(ctx->request.cursor), fr_pair_list_order(&request->request_pairs)); + fr_pair_dcursor_init(&(ctx->request.cursor), &request->request_pairs); if (rest_request_config_body(inst, section, request, randle, rest_encode_post) < 0) return -1; diff --git a/src/modules/rlm_smtp/rlm_smtp.c b/src/modules/rlm_smtp/rlm_smtp.c index 3fb58d067cb..6e084fd0c2f 100644 --- a/src/modules/rlm_smtp/rlm_smtp.c +++ b/src/modules/rlm_smtp/rlm_smtp.c @@ -201,7 +201,7 @@ static int da_to_slist(fr_mail_ctx *uctx, struct curl_slist **out, const fr_dict int elems_added = 0; /* Iterate over the VP and add the string value to the curl_slist */ - vp = fr_dcursor_iter_by_da_init(&uctx->cursor, &uctx->request->request_pairs, dict_attr); + vp = fr_pair_dcursor_by_da_init(&uctx->cursor, &uctx->request->request_pairs, dict_attr); while (vp) { *out = curl_slist_append(*out, vp->vp_strvalue); elems_added++; @@ -614,7 +614,7 @@ static int body_init (fr_mail_ctx *uctx, curl_mime *mime) mime_body = curl_mime_init(uctx->randle->candle); /* initialize the cursor used by the body_source function*/ - vp = fr_dcursor_iter_by_da_init(&uctx->body_cursor, &uctx->request->request_pairs, attr_smtp_body); + vp = fr_pair_dcursor_by_da_init(&uctx->body_cursor, &uctx->request->request_pairs, attr_smtp_body); fr_dbuff_init(&uctx->vp_in, (uint8_t const *)vp->vp_strvalue, vp->vp_length); /* Add a mime part to mime_body for every body element */ @@ -628,7 +628,7 @@ static int body_init (fr_mail_ctx *uctx, curl_mime *mime) RDEBUG2("initialized %d body element part(s)", body_elements); /* Re-initialize the cursor for use when uploading the data to curl */ - fr_dcursor_iter_by_da_init(&uctx->body_cursor, &uctx->request->request_pairs, attr_smtp_body); + fr_pair_dcursor_by_da_init(&uctx->body_cursor, &uctx->request->request_pairs, attr_smtp_body); /* Add body_mime as a subpart of the mime request with a local content-disposition*/ part = curl_mime_addpart(mime); diff --git a/src/protocols/arp/base.c b/src/protocols/arp/base.c index 5b4f66cc4f4..70270f91105 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, fr_pair_list_order(vps)); + for (vp = fr_pair_dcursor_init(&cursor, 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 dbf6b745406..3cfbd9f32b5 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, fr_pair_list_order(vps), fr_proto_next_encodable, dict_dhcpv4, fr_pair_t); + fr_pair_dcursor_iter_init(&cursor, vps, fr_proto_next_encodable, dict_dhcpv4); /* * 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 fef3d2a3ae3..3c637632615 100644 --- a/src/protocols/dhcpv4/encode.c +++ b/src/protocols/dhcpv4/encode.c @@ -336,7 +336,7 @@ static ssize_t encode_option_data(fr_dbuff_t *dbuff, } do_child: - fr_dcursor_init(&child_cursor, fr_pair_list_order(&vp->vp_group)); + fr_pair_dcursor_init(&child_cursor, &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 4cf5f91ded0..9227b3d2e30 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, fr_pair_list_order(vps), fr_dhcpv6_next_encodable, dict_dhcpv6, fr_pair_t); + fr_pair_dcursor_iter_init(&cursor, vps, fr_dhcpv6_next_encodable, dict_dhcpv6); 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 be1c15b92dd..15a1e6bbc24 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, fr_pair_list_order(&vp->vp_group)); + (void) fr_pair_dcursor_init(&child_cursor, &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, fr_pair_list_order(&vp->vp_group)); + fr_pair_dcursor_init(&child_cursor, &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 96dec93f318..16615312a5f 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, fr_pair_list_order(&vp->vp_group)); + fr_pair_dcursor_init(&child_cursor, &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, fr_pair_list_order(&vp->vp_group)); + fr_pair_dcursor_init(&child_cursor, &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, fr_pair_list_order(&vp->vp_group)); + fr_pair_dcursor_init(&child_cursor, &vp->vp_group); slen = fr_struct_to_network(&work_dbuff, &da_stack, 0, &child_cursor, encode_ctx, encode_value_trampoline, encode_tlv); if (slen <= 0) return slen; @@ -580,7 +580,7 @@ static ssize_t encode_record(fr_dbuff_t *dbuff, fr_da_stack_t *da_stack, fr_pair fr_dbuff_t work_dbuff = FR_DBUFF(dbuff); fr_dcursor_t cursor; - vp = fr_dcursor_iter_by_da_init(&cursor, vps, attr); + vp = fr_pair_dcursor_by_da_init(&cursor, vps, attr); if (!vp) { FR_PROTO_TRACE(" %s not found in list", attr->name); return 0; @@ -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, fr_pair_list_order(&vp->vp_group)); + fr_pair_dcursor_init(&child_cursor, &vp->vp_group); slen = fr_struct_to_network(&work_dbuff, da_stack, 0, &child_cursor, packet_ctx, encode_value_trampoline, encode_tlv); if (slen <= 0) return slen; @@ -627,7 +627,7 @@ ssize_t fr_dns_encode(fr_dbuff_t *dbuff, fr_pair_list_t *vps, void *encode_ctx) /* * @todo - find maximum packet length, and limit work_dbuff to that. */ - vp = fr_dcursor_iter_by_da_init(&cursor, vps, attr_dns_packet); + vp = fr_pair_dcursor_by_da_init(&cursor, vps, attr_dns_packet); if (!vp) { fr_pair_list_debug(vps); @@ -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, fr_pair_list_order(&vp->vp_group)); + fr_pair_dcursor_init(&child_cursor, &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 41eda2c5a1e..467a6a6b8dd 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, fr_pair_list_order(&children)) && fr_dcursor_next(&cursor)) { + if (fr_pair_dcursor_init(&cursor, &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 8b9cc7e823a..bac0a385a55 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, fr_pair_list_order(&vp->vp_group), fr_pair_t); + for (child = fr_pair_dcursor_init(&children, &vp->vp_group); 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, fr_pair_list_order(&vp->vp_group), fr_pair_t); + for (vp = fr_pair_dcursor_init(&children, &vp->vp_group); 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 b2b2eaa2fd5..403a118020d 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, fr_pair_list_order(vps), fr_radius_next_encodable, dict_radius, fr_pair_t); + fr_pair_dcursor_iter_init(&cursor, vps, fr_radius_next_encodable, dict_radius); while ((vp = fr_dcursor_current(&cursor))) { PAIR_VERIFY(vp); diff --git a/src/protocols/radius/encode.c b/src/protocols/radius/encode.c index 9ffe08b4fbc..9d2d521e6c5 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, fr_pair_list_order(&vp->vp_group)); + fr_pair_dcursor_init(&child_cursor, &vp->vp_group); vp = fr_dcursor_current(&child_cursor); fr_proto_da_stack_build(da_stack, vp->da); @@ -313,8 +313,7 @@ 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, fr_pair_list_order(vps), - fr_proto_next_encodable, dict_radius, fr_pair_t); + fr_pair_dcursor_iter_init(&cursor, vps, fr_proto_next_encodable, dict_radius); while ((vp = fr_dcursor_current(&cursor))) { PAIR_VERIFY(vp); @@ -1142,7 +1141,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, fr_pair_list_order(&vp->vp_group)); + fr_pair_dcursor_init(&child_cursor, &vp->vp_group); while ((vp = fr_dcursor_current(&child_cursor)) != NULL) { fr_proto_da_stack_build(da_stack, vp->da); @@ -1204,7 +1203,7 @@ static ssize_t encode_vsa(fr_dbuff_t *dbuff, * Loop over the children of this Vendor-Specific * attribute. */ - fr_dcursor_init(&child_cursor, fr_pair_list_order(&vp->vp_group)); + fr_pair_dcursor_init(&child_cursor, &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 ce11a209362..e80365c1185 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, fr_pair_list_order(vps)); + for (vp = fr_pair_dcursor_init(&cursor, 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 7517bf9a464..a614722bc22 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, fr_pair_list_order(vps), fr_proto_next_encodable, dict_vmps, fr_pair_t); + fr_pair_dcursor_iter_init(&cursor, vps, fr_proto_next_encodable, dict_vmps); return fr_vmps_encode(&FR_DBUFF_TMP(data, data_len), NULL, -1, -1, &cursor); }