]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Add fr_pair_list_dcursor_init and fr_pair_list_dcursor_talloc_init
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Tue, 12 Oct 2021 02:24:03 +0000 (21:24 -0500)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Tue, 12 Oct 2021 03:39:24 +0000 (22:39 -0500)
Use pair list specific iterators for initialising pair dcursors

57 files changed:
src/bin/dhcpclient.c
src/bin/radsniff.c
src/bin/radsnmp.c
src/bin/unit_test_attribute.c
src/bin/unit_test_module.c
src/lib/eap/base.c
src/lib/eap/chbind.c
src/lib/eap_aka_sim/encode.c
src/lib/eap_aka_sim/module.c
src/lib/eap_aka_sim/vector.c
src/lib/server/exec.c
src/lib/server/exec_legacy.c
src/lib/server/exfile.c
src/lib/server/map.c
src/lib/server/map_async.c
src/lib/server/password.c
src/lib/server/snmp.c
src/lib/server/state.c
src/lib/server/tmpl_eval.c
src/lib/tls/cache.c
src/lib/unlang/foreach.c
src/lib/unlang/xlat.c
src/lib/unlang/xlat_eval.c
src/lib/util/dcursor.c
src/lib/util/dcursor.h
src/lib/util/dcursor_tests.c
src/lib/util/pair.c
src/lib/util/pair.h
src/lib/util/pair_print.c
src/lib/util/pair_tests.c
src/lib/util/struct.c
src/listen/detail/proto_detail.c
src/listen/vmps/proto_vmps.c
src/modules/rlm_cache/rlm_cache.c
src/modules/rlm_eap/types/rlm_eap_fast/eap_fast.c
src/modules/rlm_eap/types/rlm_eap_ttls/ttls.c
src/modules/rlm_ldap/groups.c
src/modules/rlm_logtee/rlm_logtee.c
src/modules/rlm_lua/lua.c
src/modules/rlm_passwd/rlm_passwd.c
src/modules/rlm_perl/rlm_perl.c
src/modules/rlm_radius/rlm_radius.c
src/modules/rlm_radius/rlm_radius_udp.c
src/modules/rlm_rest/rest.c
src/modules/rlm_smtp/rlm_smtp.c
src/protocols/arp/base.c
src/protocols/dhcpv4/base.c
src/protocols/dhcpv4/encode.c
src/protocols/dhcpv6/base.c
src/protocols/dhcpv6/encode.c
src/protocols/dns/encode.c
src/protocols/internal/decode.c
src/protocols/internal/encode.c
src/protocols/radius/base.c
src/protocols/radius/encode.c
src/protocols/tacacs/encode.c
src/protocols/vmps/vmps.c

index 5a00a284f83208470bc620904b0b641b30701e52..2360d6f88fafb9e485563b92a3b5592354cbdebb 100644 (file)
@@ -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;
index 4a210c201de47db9e80b5eef9e7bff3dab75d7d8..28b8c8e47f5ea6ae89b127cda199e102609e1631 100644 (file)
@@ -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;
index 27131e8385a5dd083872071ec01af7fe961a61fc..4c827c87b7dcdbb91f941653e3cac3509967ed9d 100644 (file)
@@ -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);
 
index da29f47a4c253235a6d78f65e36ef97260f823c7..b661721850d95b99ca154ab971cf11927f678164 100644 (file)
@@ -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);
index fae8c1e7a52aa86ed62b91a7fde3dac63be6833a..6ea17b23735570e6f8edb2206358f76ad3ca2b75 100644 (file)
@@ -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)) {
                /*
index 24d776b2bae73280f4a4d358420833b177237b3c..90e795f122c0d48991ebb5245d26076de918ab4b 100644 (file)
@@ -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;
index 11ca6973f4587e43b37e58b63d380524cd48a94e..ad73659e7ac1b29a554840613cd78a395753d188 100644 (file)
@@ -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.
index 3cc9aa4b7ee178610ea931d72c13daf8a3b5dad5..d2bc51cba03207cc0bd71bfe1aab305e1fd51006 100644 (file)
@@ -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 */
        }
 
index f69a150dad2818cc3bcf520fec8a4652eea291d9..e73bf966f895b9809a6081688a52f75cae68444b 100644 (file)
@@ -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;
index b60fa5cfde6aeb8bc92a2340ea20356e93610ca0..29505a2a5bae1f36892c7a11df68145b9b708854 100644 (file)
@@ -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) {
index 42074794ea697cc4dedf39575d3da080dff96c3e..325e1b1b0b1497169448f0d5eb73105bf720b35b 100644 (file)
@@ -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);
index f2a8e4ce715cd666787fdbb0d1aa854792122c81..a37cda435f0b6143411e476d141de90fc9f6d233 100644 (file)
@@ -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);
index e0609c74a74265d67388ed7b7bdccdb921402d1a..4323f4741ad20e98516fcbd565d40c34e1ba42fd 100644 (file)
@@ -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);
index 9a8ed723ee4fbe5b4c4d6f9347c634d5b69c7ee0..201e3e5a51aab9b8408491b22ddeb15a899bb69a 100644 (file)
@@ -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
index 2df0fb917c66b4a16ab8add4feb97bc8c8f0cba5..5a042e84107df2867a84830d8c15356cb213c76b 100644 (file)
@@ -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 */
index 3b784da47b7ef29102845d87e3b33b67b3a0499f..0256e8fd6fad925fed551dfd6f16cb84a01480b5 100644 (file)
@@ -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;
index a28684d43494e4d701322a7bb4408d7968cfce1f..60e8b9186440ae420c95161d9bd39595200c9640 100644 (file)
@@ -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);
index 3a347a3cfe8acdc4a74006035576a9d92823d914..007a9bb07177536f5e5d3cf118447aa19145f14d 100644 (file)
@@ -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));
index b3462a485c72eb01825f71d09f74266952c31f47..d8ca18f0218441eaa06e7b69d836f28decd92972 100644 (file)
@@ -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;
index 7ef3289a75b6a509c8e44198662e910b3d3c86db..90b1ae803432d8102f989553cd8eaed1b987cbc4 100644 (file)
@@ -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);
index f4c796916c1727a348214fba46662012c87dc956..03d0cdc03df4834e2530e6b0d59810bfc88643e7 100644 (file)
@@ -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
index b9e3efc16fe21b7f5f31ce31fa903c4932e87fac..cb3cff6654adc8c7f67a53f931ea000aaeb69f4d 100644 (file)
@@ -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;
index b1de6faacb51a28b196c2c5695aec1891253cf10..5d6e3013a6121f459cdc1a331c801d9713fb9f0b 100644 (file)
@@ -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);
 
index dcbdbf964c2bd1c6ab67623c4a930c2ee9d07379..5d425d2157b79b9b3d30b526be2a9a6e41c10ff2 100644 (file)
@@ -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;
index 14a3a3d8814283b4d0c76d707dc51276de9e2d8b..1406e7c50101b7ef2c8ba238c4bcecc3189c52f3 100644 (file)
@@ -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 */
index 7a36a0d41395cf05038d32ec664ffabda19d87d1..65b134d4a2d9ee167b33f1ecec065cf6339052f8 100644 (file)
@@ -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));
 }
 
index 9ab895757826f5d52c1a1ef7eb99840eeb588b58..b1d344a5690b756f70c33986c7fe89b89dd63e22 100644 (file)
@@ -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
index 692ce9cf398931253d1bc1a68f56c79845fcfff9..e91ed63817d589e1b2001f85e4bf6434e18260a2 100644 (file)
@@ -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
index c53fdba983c6260c375db6dbedb6acf67fb7b826..2eb8243540bd9c33e7903e26598cf3ae35bf6cfd 100644 (file)
@@ -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);
index bad0852d9f890ac5ad24438e778268fc72efcd40..84e065d793baa07af151534688b0ac2107280682 100644 (file)
@@ -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 },
index 79ae3e9ece2814667cd1a731313586a9dd4996e2..c3865039d6752ffe25f30f4d9e46f36ace01b217 100644 (file)
@@ -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.
index 2f49ca8aa4b6bf5b9a52ddd6d0c9fa00c73f73fb..7bb5a68e64a7f1255a2b318d7230a59ddd677ee1 100644 (file)
@@ -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);
 
index f4262d37f9e090ec7770ec63fbbbf1f9d06a5094..62e2d919e1dc29484014e90eb31621810b653f29 100644 (file)
@@ -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);
index b7736adb8b525a8ac3000f8e801f558606fd44f8..e9d1d28a74f07539e1114d8f108c5c8d94bfd426 100644 (file)
@@ -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:
index c762f72717b885a4db9621e91472b934e08b1039..61ab96b29b0453fe00eb6c56370a71e3702101ec 100644 (file)
@@ -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);
index cc25f859331c68715fe3f9344082be66b78d44ef..478f979555bf7cb4014dc4ed6ada78f895b4b4eb 100644 (file)
@@ -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");
index 8b38843dd5fec8ffefe00187c91379a01044f720..522b9918326af78e2ac73c92c626169ca722c1e3 100644 (file)
@@ -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);
index 3a44d19a2bba3bb737f0f7f3dc8875dc2662c28e..4ca400f8c211d394fb4f8137660dbf1219962976 100644 (file)
@@ -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);
index f41362cfc7b3d98bcb0db583f5b434962fe47f5e..85f62b7656415e4c03b95ea24c30b96a3cefbe83 100644 (file)
@@ -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
index 40bae43c4d3c7541be531b54262b5f1101956003..555d4ceaf71776048119fc51d84cf1bbd6994dcb 100644 (file)
@@ -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)) {
                /*
index cf9c35230e2acab58ae6d11e8d2c17a1d9268be9..e4cd5023a5bcb6f5b1b5a4d441c07c7ad9a93de8 100644 (file)
@@ -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;
index bec7af337f9c2e2653ae5cb0dc8acd22867779c8..996258c0dc4044a0e36d5ca387e3a371b64caa4a 100644 (file)
@@ -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;
index df70cfd7de03e6ecea9a948feea3892b6fd81439..eedac38d22f7e2cd461c09d4bf1a9641a43b46cd 100644 (file)
@@ -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)) {
index c26f78676d25ffb3f2ac6604e502ffc7b98b6660..109a8d3d86ba0b7664340d1bd2b10cc0be262cdd 100644 (file)
@@ -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;
 
index 3fb58d067cbe69895bcf4bce99d5e33f15155f23..6e084fd0c2f19edfdc7e81f9f04a797afbd12938 100644 (file)
@@ -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);
index 5b4f66cc4f45d01ad36c532d40edff422a175fc1..70270f9110504b04d388b8a2f3d82532e2680b52 100644 (file)
@@ -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;
index dbf6b745406d8214a900c9e97445dd280a1df9e8..3cfbd9f32b5327b1434e7685b8f426c44d82ea84 100644 (file)
@@ -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,
index fef3d2a3ae347ad38b891a15f0d14bf4a8e3862f..3c63763261591704ffd8d983f511215b3cdbbc25 100644 (file)
@@ -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) {
index 4cf5f91ded02affdf5f4836a281779bd3eca1780..9227b3d2e307f157c11a2a20493fcd411df2d36b 100644 (file)
@@ -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) {
index be1c15b92ddbece11861a1de007ffd0deb84e74c..15a1e6bbc2474f3688880cf522bc4619442286e1 100644 (file)
@@ -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) {
index 96dec93f3184ec30cf449ac220ff6ecd84a09ac0..16615312a5f9725d4953eff4db498bea8c89ede9 100644 (file)
@@ -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);
index 41eda2c5a1e303b986e29805796c90c885e054ec..467a6a6b8dd2094342dbe6393ad7f773a20c3815 100644 (file)
@@ -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);
index 8b9cc7e823ad9c624038a370fd6d466211ba0c67..bac0a385a5539ab9f461b1b05f62ad9b82309c58 100644 (file)
@@ -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);
index b2b2eaa2fd5e133fe994dcd3e97cd8ad64c1ac0b..403a118020dd3be9b87796248fcf739d94a83f47 100644 (file)
@@ -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);
 
index 9ffe08b4fbcb0dd099948626b2ea0640bbd5cc53..9d2d521e6c52b642a0e2bf509d26749551b8df14 100644 (file)
@@ -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);
 
index ce11a2093620364f5b0b5e37733d0b31463522c8..e80365c118517119016daae1b11ca3ace0b29c9a 100644 (file)
@@ -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;
index 7517bf9a4641ad029fd055a85d47b2d44640fbee..a614722bc22ce2fe6478d1d9efd574ac2b9dc2f8 100644 (file)
@@ -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);
 }