]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Access the order dlist from fr_pair_list_t explicitly
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Fri, 8 Oct 2021 21:06:55 +0000 (16:06 -0500)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Fri, 8 Oct 2021 21:21:04 +0000 (16:21 -0500)
Originally fr_pair_list_t was the same as fr_dlist_head_t, but no longer.

40 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/chbind.c
src/lib/eap_aka_sim/encode.c
src/lib/eap_aka_sim/module.c
src/lib/server/exfile.c
src/lib/server/map.c
src/lib/server/map_async.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/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_ttls/ttls.c
src/modules/rlm_logtee/rlm_logtee.c
src/modules/rlm_lua/lua.c
src/modules/rlm_perl/rlm_perl.c
src/modules/rlm_rest/rest.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 1209f704670a625131632bf03e265137ad9dc2d2..f6bd8d87f22fd55dbdde2c077f4e13f8d773b9d0 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, &reply_vps);
+                       fr_dcursor_init(&cursor, fr_pair_list_order(&reply_vps));
                        if (fr_dhcpv4_decode(reply, &reply_vps, reply->data, reply->data_len, &reply->code) < 0) {
                                ERROR("Failed decoding reply");
                                return NULL;
index 3513458ed1e5c9f58ae66538feff9d448c0329fb..4a210c201de47db9e80b5eef9e7bff3dab75d7d8 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, vps);
+       fr_dcursor_init(&list_cursor, fr_pair_list_order(vps));
        for (i = 0; i < num; i++) {
                match = fr_dcursor_filter_next(&list_cursor, fr_pair_matches_da, da[i]);
                if (!match) {
index b17f6790f1cfd13909d9d9b8168e6a0545445322..27131e8385a5dd083872071ec01af7fe961a61fc 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, head);
+        for (vp = fr_dcursor_init(&cursor, fr_pair_list_order(head));
              vp;
              vp = fr_dcursor_next(&cursor)) {
                fr_dict_attr_t const *common;
@@ -661,7 +661,7 @@ static int radsnmp_send_recv(radsnmp_conf_t *conf, int fd)
                        return EXIT_FAILURE;
                }
                fr_pair_list_init(&request_vps);
-               fr_dcursor_init(&cursor, &request_vps);
+               fr_dcursor_init(&cursor, fr_pair_list_order(&request_vps));
 
                NEXT_LINE(line, buffer);
 
index b4cfe5ce4e5cd36e4d6528840b2fc392b2be72c7..9717c671ff9701207b452433894abad11283cefe 100644 (file)
@@ -1672,7 +1672,7 @@ static size_t command_encode_pair(command_result_t *result, command_file_ctx_t *
 #endif
                }
 
-               for (vp = fr_dcursor_talloc_iter_init(&cursor, &head,
+               for (vp = fr_dcursor_talloc_iter_init(&cursor, fr_pair_list_order(&head),
                                                     tp->next_encodable ? tp->next_encodable : fr_proto_next_encodable,
                                                     cc->tmpl_rules.dict_def ? cc->tmpl_rules.dict_def : cc->config->dict, fr_pair_t);
                     vp;
@@ -2021,7 +2021,7 @@ static size_t command_pair(command_result_t *result, command_file_ctx_t *cc,
        ctx.ctx = cc->tmp_ctx;
        ctx.parent = fr_dict_root(cc->tmpl_rules.dict_def);
        ctx.cursor = &cursor;
-       fr_dcursor_init(&cursor, &head);
+       fr_dcursor_init(&cursor, fr_pair_list_order(&head));
 
        p = in;
        end = in + inlen;
index d5803aab04a78c7849edcf38acbbb49507f0903d..fae8c1e7a52aa86ed62b91a7fde3dac63be6833a 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, &request->request_pairs);
+       for (vp = fr_dcursor_init(&cursor, fr_pair_list_order(&request->request_pairs));
             vp;
             vp = fr_dcursor_next(&cursor)) {
                /*
@@ -245,7 +245,7 @@ static request_t *request_from_file(TALLOC_CTX *ctx, FILE *fp, RADCLIENT *client
        } /* loop over the VP's we read in */
 
        if (fr_debug_lvl) {
-               for (vp = fr_dcursor_init(&cursor, &request->request_pairs);
+               for (vp = fr_dcursor_init(&cursor, fr_pair_list_order(&request->request_pairs));
                     vp;
                     vp = fr_dcursor_next(&cursor)) {
                        /*
@@ -307,7 +307,7 @@ static void print_packet(FILE *fp, fr_radius_packet_t *packet, fr_pair_list_t *l
        dv = fr_dict_enum_by_value(attr_packet_type, fr_box_uint32(packet->code));
        if (dv) fprintf(fp, "%s\n", dv->name);
 
-       for (vp = fr_dcursor_init(&cursor, list);
+       for (vp = fr_dcursor_init(&cursor, fr_pair_list_order(list));
             vp;
             vp = fr_dcursor_next(&cursor)) {
                /*
index 539fc73bc63f0bcc78a0f803312dfa4016e46c8c..11ca6973f4587e43b37e58b63d380524cd48a94e 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, &request->reply_pairs);
+       fr_dcursor_init(&cursor, fr_pair_list_order(&request->reply_pairs));
        while ((vp = fr_dcursor_current(&cursor)) && (ptr < end)) {
                /*
                 *      Skip things which shouldn't be in channel bindings.
index 3247cfff0339115e6e0cf67e5f3428179622c202..080817afd30bef4495a5503c220eb8186721f50f 100644 (file)
@@ -893,7 +893,9 @@ ssize_t fr_aka_sim_encode(request_t *request, fr_pair_list_t *to_encode, void *e
         *      Group attributes with similar lineages together
         */
        fr_pair_list_sort(to_encode, fr_pair_cmp_by_parent_num);
-       if (fr_dcursor_init(&cursor, to_encode) == vp) fr_dcursor_next(&cursor);        /* Skip subtype if it came out first */
+       if (fr_dcursor_init(&cursor, fr_pair_list_order(to_encode)) == vp) {
+               fr_dcursor_next(&cursor);       /* Skip subtype if it came out first */
+       }
 
        /*
         *      Will we need to generate a HMAC?
index 48335defedfc41a2eb424c98403c5773759d2830..f69a150dad2818cc3bcf520fec8a4652eea291d9 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, &request->request_pairs);
+               fr_dcursor_init(&cursor, fr_pair_list_order(&request->request_pairs));
 
                decode_ctx = mod_session->ctx;
                decode_ctx.hmac_extra = mod_session->response_hmac_extra;
index 1c12e962923d0a8d257b9a4c3392520a864dc73e..f50a002c5818a9001eb0b1075e9aa5ea810ca629 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, &args);
+       fr_dcursor_init(&cursor, fr_pair_list_order(&args));
 
        MEM(vp = fr_pair_afrom_da(NULL, da));
        fr_pair_value_strdup(vp, entry->filename);
index 49bf6d48f82d8361483e7f6d591ca6d50f6ccd9e..09e58c129a2adb964ccde641eb736b65ebffb1cc 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, &found);
+               vp = fr_dcursor_init(&from, fr_pair_list_order(&found));
 
                /*
                 *  Src/Dst attributes don't match, convert src attributes
index 72337adf7e4c6229c5d5806759d3745dbe894119..e1b1dc3e24bb8cf4ae35c92e526dc760889d6604 100644 (file)
@@ -730,7 +730,7 @@ int map_to_list_mod(TALLOC_CTX *ctx, vp_list_mod_t **out,
                        return 0;       /* No pairs returned */
                }
 
-               (void)fr_dcursor_init(&from, &vp_head);
+               (void)fr_dcursor_init(&from, fr_pair_list_order(&vp_head));
                while ((vp = fr_dcursor_remove(&from))) {
                        map_t *mod;
                        tmpl_rules_t rules;
@@ -1052,9 +1052,9 @@ int map_list_mod_apply(request_t *request, vp_list_mod_t const *vlm)
                        map_list_mod_to_vps(parent, &vp_from, vlm);
                        if (fr_pair_list_empty(&vp_from)) goto finish;
 
-                       fr_dcursor_init(&from, &vp_from);
-                       fr_dcursor_init(&to_insert, &vp_to_insert);
-                       fr_dcursor_init(&to, vp_list);
+                       fr_dcursor_init(&from, fr_pair_list_order(&vp_from));
+                       fr_dcursor_init(&to_insert, fr_pair_list_order(&vp_to_insert));
+                       fr_dcursor_init(&to, fr_pair_list_order(vp_list));
 
                        while ((vp = fr_dcursor_remove(&from))) {
                                for (vp_to = fr_dcursor_head(&to);
@@ -1260,7 +1260,7 @@ int map_list_mod_apply(request_t *request, vp_list_mod_t const *vlm)
                        map_list_mod_to_vps(parent, &vp_from, vlm);
                        if (fr_pair_list_empty(&vp_from)) goto finish;
 
-                       fr_dcursor_init(&from, &vp_from);
+                       fr_dcursor_init(&from, fr_pair_list_order(&vp_from));
 
                        fr_dcursor_merge(&list, &from); /* Merge first (insert after current attribute) */
                        fr_dcursor_free_item(&list);    /* Then free the current attribute */
index 4f6cce29594262c7c4ebc12eff0fcfcdcaea449b..306aad8d8446965e7581746dcd082d79d75d25f9 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, &request->request_pairs);
+       fr_dcursor_init(&request_cursor, fr_pair_list_order(&request->request_pairs));
        fr_dcursor_iter_by_da_init(&op_cursor, &request->request_pairs, attr_snmp_operation);
-       fr_dcursor_init(&reply_cursor, &request->reply_pairs);
-       fr_dcursor_init(&out_cursor, &head);
+       fr_dcursor_init(&reply_cursor, fr_pair_list_order(&request->reply_pairs));
+       fr_dcursor_init(&out_cursor, fr_pair_list_order(&head));
 
        RDEBUG2("Processing SNMP stats request");
 
index 27dd5b7b1c221535d81534b15be273c01ff04aaf..3a347a3cfe8acdc4a74006035576a9d92823d914 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, &entry->ctx->children);
+               for (vp = fr_dcursor_init(&cursor, fr_pair_list_order(&entry->ctx->children));
                     vp;
                     vp = fr_dcursor_next(&cursor)) {
                        fr_assert(entry->ctx == talloc_parent(vp));
index 1550a278409400cd047a6d39f231e167dbd0b1fc..a6f6f2c78b9f87f11fff87325b8b168a34a42d2d 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, list);
+       fr_dcursor_init(&ns->group.cursor, fr_pair_list_order(list));
        fr_dlist_insert_tail(&cc->nested, ns);
 }
 
@@ -1020,7 +1020,7 @@ static void *_tmpl_cursor_next(fr_dlist_head_t *list, void *curr, void *uctx)
                                list_head = &vp->vp_group;
                                _tmpl_pair_cursor_init(vp, list_head, ar, cc);
                                curr = fr_pair_list_head(list_head);
-                               list = &list_head->order;
+                               list = UNCONST(fr_dlist_head_t *, fr_pair_list_order(list_head));
                                continue;
                        }
 
@@ -1149,7 +1149,7 @@ fr_pair_t *tmpl_pair_cursor_init(int *err, TALLOC_CTX *ctx, tmpl_pair_cursor_ctx
        /*
         *      Get the first entry from the tmpl
         */
-       vp = fr_dcursor_talloc_iter_init(cursor, list_head, _tmpl_cursor_next, cc, fr_pair_t);
+       vp = fr_dcursor_talloc_iter_init(cursor, fr_pair_list_order(list_head), _tmpl_cursor_next, cc, fr_pair_t);
        if (!vp) {
                if (err) {
                        *err = -1;
index f465a96b237bdf5519b2cb570d76e4a6f9922214..7ef3289a75b6a509c8e44198662e910b3d3c86db 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, &request->session_state_pairs);
+       for (vp = fr_dcursor_init(&dcursor, fr_pair_list_order(&request->session_state_pairs));
             vp;
             vp = fr_dcursor_current(&dcursor)) {
                slen = fr_internal_encode_pair(&dbuff, &dcursor, NULL);
index 2bf555648627db4ad13b0b484c5896e1c063af4d..f4c796916c1727a348214fba46662012c87dc956 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, &foreach->vps, fr_pair_t);
+       fr_dcursor_talloc_init(&foreach->cursor, fr_pair_list_order(&foreach->vps), fr_pair_t);
 #ifndef NDEBUG
        foreach->indent = request->log.unlang_indent;
 #endif
index 5e28e68708c38c239ed02c56094693c189cc9010..58eb3cafd98b6ab05fc7535d4c98a4cbd7243219 100644 (file)
@@ -78,6 +78,11 @@ typedef struct {
         fr_dlist_head_t                order;                          //!< Maintains the relative order of pairs in a list.
 } fr_pair_list_t;
 
+static inline fr_dlist_head_t _CONST *fr_pair_list_order(fr_pair_list_t _CONST *list)
+{
+       return &list->order;
+}
+
 /** Stores an attribute, a value and various bits of other data
  *
  * fr_pair_ts are the main data structure used in the server
index 246e1cb19c8367dd80805e52664f8e634ac26dcd..0b299a2c18e82e7f63c9f4df72fe77a64d7e2ea2 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, &vp->vp_group);
+               for (child = fr_dcursor_init(&cursor, fr_pair_list_order(&vp->vp_group));
                     child != NULL;
                     child = fr_dcursor_next(&cursor)) {
                        FR_SBUFF_RETURN(fr_pair_print, &our_out, vp, child);
index 5f46861201738eb32d79f9922bb087309381ace1..69d94e532c70a5d71d8eae0db5f6d99b396bc5f0 100644 (file)
@@ -270,7 +270,7 @@ static void test_fr_pair_append(void)
        fr_pair_append(&local_pairs, fr_pair_afrom_da(autofree, fr_dict_attr_test_tlv));
 
        /* lets' count */
-       for (vp = fr_dcursor_init(&cursor, &local_pairs);
+       for (vp = fr_dcursor_init(&cursor, fr_pair_list_order(&local_pairs));
                 vp;
                 vp = fr_dcursor_next(&cursor)) count++;
 
@@ -305,7 +305,7 @@ static void test_fr_pair_prepend_by_da(void)
        TEST_CHECK(fr_pair_prepend_by_da(ctx, NULL, &local_pairs, fr_dict_attr_test_string) == 0);
 
        /* lets' count */
-       for (vp = fr_dcursor_init(&cursor, &local_pairs);
+       for (vp = fr_dcursor_init(&cursor, fr_pair_list_order(&local_pairs));
                 vp;
                 vp = fr_dcursor_next(&cursor)) {
                TEST_CASE("Expected (vp->da == fr_dict_attr_test_string)");
@@ -433,7 +433,7 @@ static void test_fr_pair_list_copy_by_da(void)
        TEST_CHECK(fr_pair_list_copy_by_da(autofree, &local_pairs, &test_pairs, fr_dict_attr_test_string, 0) > 0);
 
        TEST_CASE("The 'local_pairs' should have only fr_dict_attr_test_string");
-       for (vp = fr_dcursor_init(&cursor, &local_pairs);
+       for (vp = fr_dcursor_init(&cursor, fr_pair_list_order(&local_pairs));
                 vp;
                 vp = fr_dcursor_next(&cursor)) {
                TEST_CASE("Validating VP_VERIFY()");
@@ -458,7 +458,7 @@ static void test_fr_pair_list_copy_by_ancestor(void)
        TEST_CHECK(fr_pair_list_copy_by_ancestor(autofree, &local_pairs, &test_pairs, fr_dict_attr_test_tlv, 0) > 0);
 
        TEST_CASE("The 'local_pairs' should have only fr_dict_attr_test_tlv_string (ancestor of 'Test-TLV-Root'");
-       for (vp = fr_dcursor_init(&cursor, &local_pairs);
+       for (vp = fr_dcursor_init(&cursor, fr_pair_list_order(&local_pairs));
                 vp;
                 vp = fr_dcursor_next(&cursor)) {
                TEST_CASE("Validating VP_VERIFY()");
@@ -504,7 +504,7 @@ static void test_fr_pair_list_sort(void)
        fr_pair_list_sort(&local_pairs, fr_pair_cmp_by_da);
 
        TEST_CASE("1st (da == fr_dict_attr_test_string)");
-       TEST_CHECK((vp = fr_dcursor_init(&cursor, &local_pairs)) != NULL);
+       TEST_CHECK((vp = fr_dcursor_init(&cursor, fr_pair_list_order(&local_pairs))) != NULL);
        TEST_CHECK(vp && vp->da == fr_dict_attr_test_string);
 
        TEST_CASE("2nd (da == fr_dict_attr_test_octets)");
index cf17bd8fdb42ea8a2df21db05e5720a0a1b3b598..877b354e66ed9a6c89b11d3ecc23da489057f301 100644 (file)
@@ -498,7 +498,7 @@ ssize_t fr_struct_to_network(fr_dbuff_t *dbuff,
                fr_pair_t *sorted = fr_dcursor_current(parent_cursor); /* NOT const */
 
                fr_pair_list_sort(&sorted->vp_group, pair_sort_increasing);
-               fr_dcursor_init(&child_cursor, &sorted->vp_group);
+               fr_dcursor_init(&child_cursor, fr_pair_list_order(&sorted->vp_group));
 
                /*
                 *      Build the da_stack for the new structure.
index a656abc3715c6dcfc241e9296d0d26e4de88e426..2f49ca8aa4b6bf5b9a52ddd6d0c9fa00c73f73fb 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, &request->request_pairs);
+       fr_dcursor_init(&cursor, fr_pair_list_order(&request->request_pairs));
        fr_dcursor_tail(&cursor);       /* Ensure we only free what we add on error */
        fr_pair_list_init(&tmp_list);
 
index 3ed4f8fa6e350cf3bdbf4568d4223c90f5073a80..f4262d37f9e090ec7770ec63fbbbf1f9d06a5094 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, &request->reply_pairs, fr_proto_next_encodable, dict_vmps, fr_pair_t);
+       fr_dcursor_talloc_iter_init(&cursor, fr_pair_list_order(&request->reply_pairs), fr_proto_next_encodable, dict_vmps, fr_pair_t);
 
        data_len = fr_vmps_encode(&FR_DBUFF_TMP(buffer, buffer_len), request->packet->data,
                                  request->reply->code, request->reply->id, &cursor);
index 9270fea691b69a078915da7acd641a9bb9b31023..b7736adb8b525a8ac3000f8e801f558606fd44f8 100644 (file)
@@ -774,7 +774,7 @@ finish:
        /*
         *      Clear control attributes
         */
-       for (vp = fr_dcursor_init(&cursor, &request->control_pairs);
+       for (vp = fr_dcursor_init(&cursor, fr_pair_list_order(&request->control_pairs));
             vp;
             vp = fr_dcursor_next(&cursor)) {
             again:
index 9262d9ea272579e8e8f17a9301e27239ef002bcb..70eb85352552e54372ef963654070670d0f89784 100644 (file)
@@ -645,7 +645,7 @@ fr_radius_packet_code_t eap_ttls_process(request_t *request, eap_session_t *eap_
        /*
         *      Add the tunneled attributes to the request request.
         */
-       fr_dcursor_init(&cursor, &request->request_pairs);
+       fr_dcursor_init(&cursor, fr_pair_list_order(&request->request_pairs));
        if (eap_ttls_decode_pair(request, request->request_ctx, &cursor, fr_dict_root(fr_dict_internal()),
                                 data, data_len, tls_session->ssl) < 0) {
                RPEDEBUG("Decoding TTLS TLVs failed");
index 76d4cd518a5164f0853dd3c946fa6fd2cd47f8d3..3a44d19a2bba3bb737f0f7f3dc8875dc2662c28e 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, &request->request_pairs);
+       fr_dcursor_init(&cursor, fr_pair_list_order(&request->request_pairs));
        fr_dcursor_prepend(&cursor, t->msg);
        fr_dcursor_prepend(&cursor, t->type);
        fr_dcursor_prepend(&cursor, t->lvl);
index b53c7f19239e14ecaaf08e2779ac27f755e2c79a..f41362cfc7b3d98bcb0db583f5b434962fe47f5e 100644 (file)
@@ -506,7 +506,7 @@ static int _lua_list_iterator_init(lua_State *L)
                REDEBUG("Failed allocating user data to hold cursor");
                return -1;
        }
-       fr_dcursor_init(cursor, &request->request_pairs);       /* @FIXME: Shouldn't use list head */
+       fr_dcursor_init(cursor, fr_pair_list_order(&request->request_pairs));   /* @FIXME: Shouldn't use list head */
 
        lua_pushlightuserdata(L, cursor);
        lua_pushcclosure(L, _lua_list_iterator, 1);
@@ -719,7 +719,7 @@ static void _lua_fr_request_register(lua_State *L, request_t *request)
 
                /* Attribute list table */
                fr_pair_list_sort(&request->request_pairs, fr_pair_cmp_by_da);
-               fr_dcursor_init(&cursor, &request->request_pairs);
+               fr_dcursor_init(&cursor, fr_pair_list_order(&request->request_pairs));
 
                /*
                 *      Setup the environment
index 7bbb8ed0d5ac8b4cc67a20461051e30eb0f8ba3e..e4915aac606af4d219752555217a5511099bed87 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, vps);
+       for (vp = fr_dcursor_init(&cursor, fr_pair_list_order(vps));
             vp;
             vp = fr_dcursor_next(&cursor)) {
                fr_pair_t *next;
index e6fe25f04f286cc74e2e1ff1ebefa9f1ae8425ee..c26f78676d25ffb3f2ac6604e502ffc7b98b6660 100644 (file)
@@ -2031,7 +2031,7 @@ do {\
 
        case REST_HTTP_BODY_POST:
                rest_request_init(section, request, &ctx->request);
-               fr_dcursor_init(&(ctx->request.cursor), &request->request_pairs);
+               fr_dcursor_init(&(ctx->request.cursor), fr_pair_list_order(&request->request_pairs));
 
                if (rest_request_config_body(inst, section, request, randle, rest_encode_post) < 0) return -1;
 
index a4c90f06bb8da14d7c268c14fee310591851b10c..5b4f66cc4f45d01ad36c532d40edff422a175fc1 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, vps);
+       for (vp = fr_dcursor_init(&cursor, fr_pair_list_order(vps));
             vp;
             vp = fr_dcursor_next(&cursor)) {
                if (vp->da->parent == attr_arp_packet) break;
index 3375724b32005ef44081906215f6272c2c300a54..d77d40a3cd660303af637088adc0a636cc9a53f4 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, vps, fr_proto_next_encodable, dict_dhcpv4, fr_pair_t);
+       fr_dcursor_talloc_iter_init(&cursor, fr_pair_list_order(vps), fr_proto_next_encodable, dict_dhcpv4, fr_pair_t);
 
        /*
         *  Each call to fr_dhcpv4_encode_option will encode one complete DHCP option,
index 5ef8cedd9ce61f56ef6fc8747faef853a2d6655c..fef3d2a3ae347ad38b891a15f0d14bf4a8e3862f 100644 (file)
@@ -329,14 +329,14 @@ static ssize_t encode_option_data(fr_dbuff_t *dbuff,
                case FR_TYPE_STRUCTURAL:
                        break;
 
-               default:        
+               default:
                        fr_strerror_printf("Internal sanity check failed");
                        return -1;
                }
        }
 
 do_child:
-       fr_dcursor_init(&child_cursor, &vp->vp_group);
+       fr_dcursor_init(&child_cursor, fr_pair_list_order(&vp->vp_group));
        work_dbuff = FR_DBUFF(dbuff);
 
        while ((vp = fr_dcursor_current(&child_cursor)) != NULL) {
index 6b1908eb4709b2d710bdd7046ea1b9ccb743d4a4..5dfe76bfdacc7360004bed7017726b5536890bc4 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, vps, fr_dhcpv6_next_encodable, dict_dhcpv6, fr_pair_t);
+       fr_dcursor_talloc_iter_init(&cursor, fr_pair_list_order(vps), fr_dhcpv6_next_encodable, dict_dhcpv6, fr_pair_t);
        while ((fr_dbuff_extend(&frame_dbuff) > 0) && (fr_dcursor_current(&cursor) != NULL)) {
                slen = fr_dhcpv6_encode_option(&frame_dbuff, &cursor, &packet_ctx);
                switch (slen) {
index b2ee28c36ac06c71b42b7046181cfecda19fa082..cce544a49a3fbe4d385a964ba54cace11d265acc 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, &vp->vp_group);
+                       (void) fr_dcursor_init(&child_cursor, fr_pair_list_order(&vp->vp_group));
 
                        while (fr_dcursor_current(&child_cursor) != NULL) {
                                slen = fr_dhcpv6_encode_option(&work_dbuff, &child_cursor, encode_ctx);
@@ -532,7 +532,7 @@ static ssize_t encode_option_data(fr_dbuff_t *dbuff,
        }
 
 do_child:
-       fr_dcursor_init(&child_cursor, &vp->vp_group);
+       fr_dcursor_init(&child_cursor, fr_pair_list_order(&vp->vp_group));
        work_dbuff = FR_DBUFF(dbuff);
 
        while ((vp = fr_dcursor_current(&child_cursor)) != NULL) {
index 661d44c9eba3bd12e38e5dbc0897bf763706daa7..ae95335dd32dff5bba1bcc1621f47a41413af289 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, &vp->vp_group);
+               fr_dcursor_init(&child_cursor, fr_pair_list_order(&vp->vp_group));
 
                slen = fr_struct_to_network(&work_dbuff, da_stack, depth, &child_cursor, encode_ctx, encode_value_trampoline, encode_tlv);
                if (slen < 0) return slen;
@@ -377,7 +377,7 @@ static ssize_t encode_option_data(fr_dbuff_t *dbuff,
        }
 
 do_child:
-       fr_dcursor_init(&child_cursor, &vp->vp_group);
+       fr_dcursor_init(&child_cursor, fr_pair_list_order(&vp->vp_group));
        work_dbuff = FR_DBUFF(dbuff);
 
        while ((vp = fr_dcursor_current(&child_cursor)) != NULL) {
@@ -555,7 +555,7 @@ static ssize_t fr_dns_encode_rr(fr_dbuff_t *dbuff, fr_dcursor_t *cursor, void *e
        if (vp->da->type == FR_TYPE_STRUCT) {
                fr_dcursor_t child_cursor;
 
-               fr_dcursor_init(&child_cursor, &vp->vp_group);
+               fr_dcursor_init(&child_cursor, fr_pair_list_order(&vp->vp_group));
 
                slen = fr_struct_to_network(&work_dbuff, &da_stack, 0, &child_cursor, encode_ctx, encode_value_trampoline, NULL);
                if (slen <= 0) return slen;
@@ -593,7 +593,7 @@ static ssize_t encode_record(fr_dbuff_t *dbuff, fr_da_stack_t *da_stack, fr_pair
                ssize_t slen;
                fr_dcursor_t child_cursor;
 
-               fr_dcursor_init(&child_cursor, &vp->vp_group);
+               fr_dcursor_init(&child_cursor, fr_pair_list_order(&vp->vp_group));
                slen = fr_struct_to_network(&work_dbuff, da_stack, 0, &child_cursor, packet_ctx, encode_value_trampoline, NULL);
                if (slen <= 0) return slen;
 
@@ -638,7 +638,7 @@ ssize_t fr_dns_encode(fr_dbuff_t *dbuff, fr_pair_list_t *vps, void *encode_ctx)
        /*
         *      Encode the header.
         */
-       fr_dcursor_init(&child_cursor, &vp->vp_group);
+       fr_dcursor_init(&child_cursor, fr_pair_list_order(&vp->vp_group));
        fr_proto_da_stack_build(&da_stack, attr_dns_packet);
 
        slen = fr_struct_to_network(&work_dbuff, &da_stack, 0, &cursor, packet_ctx, encode_value_trampoline, NULL);
index 7733cfda41de04551d822d5ebaab504272b45401..41eda2c5a1e303b986e29805796c90c885e054ec 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, &children) && fr_dcursor_next(&cursor)) {
+       if (fr_dcursor_init(&cursor, fr_pair_list_order(&children)) && fr_dcursor_next(&cursor)) {
                fr_pair_t       *tlv;
 
                tlv = fr_pair_afrom_da(ctx, parent_da);
index 49ec0e1a1c24bda67f89e34eaf894f5a70b11052..8b9cc7e823ad9c624038a370fd6d466211ba0c67 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, &vp->vp_group, fr_pair_t);
+                       for (child = fr_dcursor_talloc_init(&children, fr_pair_list_order(&vp->vp_group), fr_pair_t);
                             child;
                             child = fr_dcursor_current(&children)) {
 
@@ -202,7 +202,7 @@ static ssize_t internal_encode(fr_dbuff_t *dbuff,
        {
                fr_dcursor_t    children;
 
-               for (vp = fr_dcursor_talloc_init(&children, &vp->vp_group, fr_pair_t);
+               for (vp = fr_dcursor_talloc_init(&children, fr_pair_list_order(&vp->vp_group), fr_pair_t);
                     vp;
                     vp = fr_dcursor_current(&children)) {
                        FR_PROTO_TRACE("encode ctx changed %s -> %s", da->name, vp->da->name);
index 6f87c41a81cb5903a4246dcffe9045eb64cd3886..8f5352fd9702b755d3bd9ec07f666aa8240f8477 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, vps, fr_radius_next_encodable, dict_radius, fr_pair_t);
+       fr_dcursor_talloc_iter_init(&cursor, fr_pair_list_order(vps), fr_radius_next_encodable, dict_radius, fr_pair_t);
        while ((vp = fr_dcursor_current(&cursor))) {
                VP_VERIFY(vp);
 
index d7b4291effa64012cc1f43d64d8785d8d98f265c..de574b10cf5fd358cdd681018d04ecb5f1563fd7 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, &vp->vp_group);
+                       fr_dcursor_init(&child_cursor, fr_pair_list_order(&vp->vp_group));
                        vp = fr_dcursor_current(&child_cursor);
                        fr_proto_da_stack_build(da_stack, vp->da);
 
@@ -313,7 +313,8 @@ static ssize_t encode_tags(fr_dbuff_t *dbuff, fr_pair_list_t const *vps, void *e
        /*
         *      Note that we skip tags inside of tags!
         */
-       fr_dcursor_talloc_iter_init(&cursor, vps, fr_proto_next_encodable, dict_radius, fr_pair_t);
+       fr_dcursor_talloc_iter_init(&cursor, fr_pair_list_order(vps),
+                                   fr_proto_next_encodable, dict_radius, fr_pair_t);
        while ((vp = fr_dcursor_current(&cursor))) {
                VP_VERIFY(vp);
 
@@ -1141,7 +1142,7 @@ static ssize_t encode_vendor(fr_dbuff_t *dbuff,
        fr_assert(vp->da == da);
        work_dbuff = FR_DBUFF(dbuff);
 
-       fr_dcursor_init(&child_cursor, &vp->vp_group);
+       fr_dcursor_init(&child_cursor, fr_pair_list_order(&vp->vp_group));
        while ((vp = fr_dcursor_current(&child_cursor)) != NULL) {
                fr_proto_da_stack_build(da_stack, vp->da);
 
@@ -1203,7 +1204,7 @@ static ssize_t encode_vsa(fr_dbuff_t *dbuff,
         *      Loop over the children of this Vendor-Specific
         *      attribute.
         */
-       fr_dcursor_init(&child_cursor, &vp->vp_group);
+       fr_dcursor_init(&child_cursor, fr_pair_list_order(&vp->vp_group));
        while ((vp = fr_dcursor_current(&child_cursor)) != NULL) {
                fr_proto_da_stack_build(da_stack, vp->da);
 
index 0741474164a72853df6f9a96df0c59a98ac989e4..ce11a2093620364f5b0b5e37733d0b31463522c8 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, vps);
+       for (vp = fr_dcursor_init(&cursor, fr_pair_list_order(vps));
             vp;
             vp = fr_dcursor_next(&cursor)) {
                if (vp->da->parent == attr_tacacs_packet) break;
index 81e12d3bc6de458f99a31cc86426189e50cf20c9..7517bf9a4641ad029fd055a85d47b2d44640fbee 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, vps, fr_proto_next_encodable, dict_vmps, fr_pair_t);
+       fr_dcursor_talloc_iter_init(&cursor, fr_pair_list_order(vps), fr_proto_next_encodable, dict_vmps, fr_pair_t);
 
        return fr_vmps_encode(&FR_DBUFF_TMP(data, data_len), NULL, -1, -1, &cursor);
 }