void fr_pair_list_free(VALUE_PAIR **vps)
{
VALUE_PAIR *vp;
- vp_cursor_t cursor;
+ fr_cursor_t cursor;
if (!vps || !*vps) {
return;
}
- for (vp = fr_pair_cursor_init(&cursor, vps);
+ for (vp = fr_cursor_init(&cursor, vps);
vp;
- vp = fr_pair_cursor_next(&cursor)) {
+ vp = fr_cursor_next(&cursor)) {
VP_VERIFY(vp);
talloc_free(vp);
}
fr_dict_attr_t const *da;
VP_VERIFY(vp);
- if (vp->da->flags.is_unknown) {
- return 0;
- }
+ if (vp->da->flags.is_unknown) return 0;
da = fr_dict_unknown_afrom_fields(vp, vp->da->parent, vp->da->vendor, vp->da->attr);
if (!da) return -1;
-
fr_dict_unknown_free(&vp->da); /* Only frees unknown attributes */
vp->da = da;
{
vp_cursor_t cursor;
- if(!fr_cond_assert(da)) return NULL;
+ if (!fr_cond_assert(da)) return NULL;
(void) fr_pair_cursor_init(&cursor, &head);
return fr_pair_cursor_next_by_da(&cursor, da, tag);
*/
int fr_pair_list_cmp(VALUE_PAIR *a, VALUE_PAIR *b)
{
- vp_cursor_t a_cursor, b_cursor;
+ fr_cursor_t a_cursor, b_cursor;
VALUE_PAIR *a_p, *b_p;
- for (a_p = fr_pair_cursor_init(&a_cursor, &a), b_p = fr_pair_cursor_init(&b_cursor, &b);
+ for (a_p = fr_cursor_init(&a_cursor, &a), b_p = fr_cursor_init(&b_cursor, &b);
a_p && b_p;
- a_p = fr_pair_cursor_next(&a_cursor), b_p = fr_pair_cursor_next(&b_cursor)) {
+ a_p = fr_cursor_next(&a_cursor), b_p = fr_cursor_next(&b_cursor)) {
int ret;
/* Same VP, no point doing expensive checks */
*/
bool fr_pair_validate(VALUE_PAIR const *failed[2], VALUE_PAIR *filter, VALUE_PAIR *list)
{
- vp_cursor_t filter_cursor;
- vp_cursor_t list_cursor;
+ fr_cursor_t filter_cursor;
+ fr_cursor_t list_cursor;
VALUE_PAIR *check, *match;
fr_pair_list_sort(&filter, fr_pair_cmp_by_da_tag);
fr_pair_list_sort(&list, fr_pair_cmp_by_da_tag);
- check = fr_pair_cursor_init(&filter_cursor, &filter);
- match = fr_pair_cursor_init(&list_cursor, &list);
+ check = fr_cursor_init(&filter_cursor, &filter);
+ match = fr_cursor_init(&list_cursor, &list);
while (match || check) {
/*
* Lists are of different lengths
*/
if (fr_pair_cmp(check, match) != 1) goto mismatch;
- check = fr_pair_cursor_next(&filter_cursor);
- match = fr_pair_cursor_next(&list_cursor);
+ check = fr_cursor_next(&filter_cursor);
+ match = fr_cursor_next(&list_cursor);
}
return true;
*/
static int CC_HINT(nonnull) rad_check_password(REQUEST *request)
{
- vp_cursor_t cursor;
- VALUE_PAIR *auth_type_pair;
- int auth_type = -1;
- int result;
- int auth_type_count = 0;
+ vp_cursor_t cursor;
+ VALUE_PAIR *auth_type_pair;
+ int auth_type = -1;
+ int result;
+ int auth_type_count = 0;
/*
* Look for matching check items. We skip the whole lot
static int null_socket_send(UNUSED rad_listen_t *listener, REQUEST *request)
{
- vp_cursor_t cursor;
+ fr_cursor_t cursor;
char *output_file;
FILE *fp;
}
RINDENT();
- for (vp = fr_pair_cursor_init(&cursor, &request->reply->vps);
+ for (vp = fr_cursor_init(&cursor, &request->reply->vps);
vp;
- vp = fr_pair_cursor_next(&cursor)) {
+ vp = fr_cursor_next(&cursor)) {
fr_pair_snprint(buffer, sizeof(buffer), vp);
fprintf(fp, "%s\n", buffer);
RDEBUG("%s", buffer);
static int command_inject_file(rad_listen_t *listener, int argc, char *argv[])
{
- static int inject_id = 0;
- int ret;
- bool filedone;
- fr_command_socket_t *sock = listener->data;
- rad_listen_t *fake;
- RADIUS_PACKET *packet;
- vp_cursor_t cursor;
- VALUE_PAIR *vp;
- FILE *fp;
- RAD_REQUEST_FUNP fun = NULL;
- char buffer[2048];
+ static int inject_id = 0;
+ int ret;
+ bool filedone;
+ fr_command_socket_t *sock = listener->data;
+ rad_listen_t *fake;
+ RADIUS_PACKET *packet;
+ vp_cursor_t cursor;
+ VALUE_PAIR *vp;
+ FILE *fp;
+ RAD_REQUEST_FUNP fun = NULL;
+ char buffer[2048];
if (argc < 2) {
cprintf_error(listener, "You must specify <input-file> <output-file>\n");
buffer, sizeof(buffer)),
packet->code, packet->id);
- for (vp = fr_pair_cursor_init(&cursor, &packet->vps);
+ for (vp = fr_cursor_init(&cursor, &packet->vps);
vp;
- vp = fr_pair_cursor_next(&cursor)) {
+ vp = fr_cursor_next(&cursor)) {
fr_pair_snprint(buffer, sizeof(buffer), vp);
DEBUG("\t%s", buffer);
}
*/
void radius_pairmove(REQUEST *request, VALUE_PAIR **to, VALUE_PAIR *from, bool do_xlat)
{
- int i, j, count, from_count, to_count, tailto;
- vp_cursor_t cursor;
- VALUE_PAIR *vp, *next, **last;
- VALUE_PAIR **from_list, **to_list;
- VALUE_PAIR *append, **append_tail;
- VALUE_PAIR *to_copy;
- bool *edited = NULL;
- REQUEST *fixup = NULL;
- TALLOC_CTX *ctx;
+ int i, j, count, from_count, to_count, tailto;
+ fr_cursor_t cursor;
+ VALUE_PAIR *vp, *next, **last;
+ VALUE_PAIR **from_list, **to_list;
+ VALUE_PAIR *append, **append_tail;
+ VALUE_PAIR *to_copy;
+ bool *edited = NULL;
+ REQUEST *fixup = NULL;
+ TALLOC_CTX *ctx;
/*
* Set up arrays for editing, to remove some of the
* the matching attributes are deleted.
*/
count = 0;
- for (vp = fr_pair_cursor_init(&cursor, &from); vp; vp = fr_pair_cursor_next(&cursor)) count++;
+ for (vp = fr_cursor_init(&cursor, &from); vp; vp = fr_cursor_next(&cursor)) count++;
from_list = talloc_array(request, VALUE_PAIR *, count);
- for (vp = fr_pair_cursor_init(&cursor, to); vp; vp = fr_pair_cursor_next(&cursor)) count++;
+ for (vp = fr_cursor_init(&cursor, to); vp; vp = fr_cursor_next(&cursor)) count++;
to_list = talloc_array(request, VALUE_PAIR *, count);
append = NULL;
*/
int map_to_vp(TALLOC_CTX *ctx, VALUE_PAIR **out, REQUEST *request, vp_map_t const *map, UNUSED void *uctx)
{
- int rcode = 0;
- VALUE_PAIR *vp = NULL, *found = NULL, *n;
- REQUEST *context = request;
- vp_cursor_t cursor;
- ssize_t slen;
- char *str;
+ int rcode = 0;
+ VALUE_PAIR *vp = NULL, *found = NULL, *n;
+ REQUEST *context = request;
+ fr_cursor_t cursor;
+ ssize_t slen;
+ char *str;
*out = NULL;
*/
if (!found) return 0;
- for (vp = fr_pair_cursor_init(&cursor, &found);
+ for (vp = fr_cursor_init(&cursor, &found);
vp;
- vp = fr_pair_cursor_next(&cursor)) {
+ vp = fr_cursor_next(&cursor)) {
vp->op = T_OP_ADD;
}
case TMPL_TYPE_ATTR:
{
- vp_cursor_t from;
+ fr_cursor_t from;
rad_assert(((map->lhs->type == TMPL_TYPE_ATTR) && map->lhs->tmpl_da) ||
((map->lhs->type == TMPL_TYPE_LIST) && !map->lhs->tmpl_da));
*/
if (tmpl_copy_vps(ctx, &found, request, map->rhs) < 0) return 0;
- vp = fr_pair_cursor_init(&from, &found);
+ vp = fr_cursor_init(&from, &found);
/*
* Src/Dst attributes don't match, convert src attributes
*/
if ((map->lhs->type == TMPL_TYPE_ATTR) &&
(map->rhs->tmpl_da->type != map->lhs->tmpl_da->type)) {
- vp_cursor_t to;
+ fr_cursor_t to;
- (void) fr_pair_cursor_init(&to, out);
- for (; vp; vp = fr_pair_cursor_next(&from)) {
+ (void) fr_cursor_init(&to, out);
+ for (; vp; vp = fr_cursor_current(&from)) {
n = fr_pair_afrom_da(ctx, map->lhs->tmpl_da);
if (!n) return -1;
if (fr_value_box_cast(n, &n->data,
- map->lhs->tmpl_da->type, map->lhs->tmpl_da, &vp->data) < 0) {
+ map->lhs->tmpl_da->type, map->lhs->tmpl_da, &vp->data) < 0) {
RPEDEBUG("Attribute conversion failed");
fr_pair_list_free(&found);
talloc_free(n);
return -1;
}
- vp = fr_pair_cursor_remove(&from);
+ vp = fr_cursor_remove(&from); /* advances cursor */
talloc_free(vp);
rad_assert((n->vp_type != FR_TYPE_STRING) || (n->vp_strvalue != NULL));
n->op = map->op;
n->tag = map->lhs->tmpl_tag;
- fr_pair_cursor_append(&to, n);
+ fr_cursor_append(&to, n);
}
+
return 0;
}
* Otherwise we just need to fixup the attribute types
* and operators
*/
- for (; vp; vp = fr_pair_cursor_next(&from)) {
+ for (; vp; vp = fr_cursor_next(&from)) {
vp->da = map->lhs->tmpl_da;
vp->op = map->op;
vp->tag = map->lhs->tmpl_tag;
int paircompare(REQUEST *request, VALUE_PAIR *req_list, VALUE_PAIR *check,
VALUE_PAIR **rep_list)
{
- vp_cursor_t cursor;
- VALUE_PAIR *check_item;
- VALUE_PAIR *auth_item;
- fr_dict_attr_t const *from;
+ fr_cursor_t cursor;
+ VALUE_PAIR *check_item;
+ VALUE_PAIR *auth_item;
+ fr_dict_attr_t const *from;
- int result = 0;
- int compare;
- bool first_only;
+ int result = 0;
+ int compare;
+ bool first_only;
- for (check_item = fr_pair_cursor_init(&cursor, &check);
+ for (check_item = fr_cursor_init(&cursor, &check);
check_item;
- check_item = fr_pair_cursor_next(&cursor)) {
+ check_item = fr_cursor_next(&cursor)) {
/*
* If the user is setting a configuration value,
* then don't bother comparing it to any attributes
*/
void rdebug_pair_list(fr_log_lvl_t level, REQUEST *request, VALUE_PAIR *vp, char const *prefix)
{
- vp_cursor_t cursor;
+ fr_cursor_t cursor;
char *value;
if (!vp || !request || !request->log.dst) return;
if (!radlog_debug_enabled(L_DBG, level, request)) return;
RINDENT();
- for (vp = fr_pair_cursor_init(&cursor, &vp);
+ for (vp = fr_cursor_init(&cursor, &vp);
vp;
- vp = fr_pair_cursor_next(&cursor)) {
+ vp = fr_cursor_next(&cursor)) {
VP_VERIFY(vp);
value = fr_pair_asprint(request, vp, '"');
*/
void rdebug_proto_pair_list(fr_log_lvl_t level, REQUEST *request, VALUE_PAIR *vp, char const *prefix)
{
- vp_cursor_t cursor;
+ fr_cursor_t cursor;
char *value;
if (!vp || !request || !request->log.dst) return;
if (!radlog_debug_enabled(L_DBG, level, request)) return;
RINDENT();
- for (vp = fr_pair_cursor_init(&cursor, &vp);
+ for (vp = fr_cursor_init(&cursor, &vp);
vp;
- vp = fr_pair_cursor_next(&cursor)) {
+ vp = fr_cursor_next(&cursor)) {
VP_VERIFY(vp);
if (vp->da->flags.internal) continue;
*/
static int radclient_init(TALLOC_CTX *ctx, rc_file_pair_t *files)
{
- FILE *packets, *filters = NULL;
+ FILE *packets, *filters = NULL;
- vp_cursor_t cursor;
- VALUE_PAIR *vp;
- rc_request_t *request;
- bool packets_done = false;
- uint64_t num = 0;
+ fr_cursor_t cursor;
+ VALUE_PAIR *vp;
+ rc_request_t *request;
+ bool packets_done = false;
+ uint64_t num = 0;
assert(files->packets != NULL);
/*
* xlat expansions aren't supported here
*/
- for (vp = fr_pair_cursor_init(&cursor, &request->filter);
+ for (vp = fr_cursor_init(&cursor, &request->filter);
vp;
- vp = fr_pair_cursor_next(&cursor)) {
+ vp = fr_cursor_next(&cursor)) {
+ again:
if (vp->type == VT_XLAT) {
vp->type = VT_DATA;
vp->vp_strvalue = vp->xlat;
if (vp->da->vendor == 0 ) switch (vp->da->attr) {
case FR_RESPONSE_PACKET_TYPE:
case FR_PACKET_TYPE:
- fr_pair_cursor_remove(&cursor); /* so we don't break the filter */
+ vp = fr_cursor_remove(&cursor); /* so we don't break the filter */
request->filter_code = vp->vp_uint32;
talloc_free(vp);
-
+ vp = fr_cursor_current(&cursor);
+ if (!vp) break;
+ goto again;
default:
break;
}
/*
* Process special attributes
*/
- for (vp = fr_pair_cursor_init(&cursor, &request->packet->vps);
+ for (vp = fr_cursor_init(&cursor, &request->packet->vps);
vp;
- vp = fr_pair_cursor_next(&cursor)) {
+ vp = fr_cursor_next(&cursor)) {
/*
* Double quoted strings get marked up as xlat expansions,
* but we don't support that in request.
{
VALUE_PAIR *vp;
REQUEST *request;
- vp_cursor_t cursor;
+ fr_cursor_t cursor;
struct timeval now;
static int number = 0;
/*
* Fix up Digest-Attributes issues
*/
- for (vp = fr_pair_cursor_init(&cursor, &request->packet->vps);
+ for (vp = fr_cursor_init(&cursor, &request->packet->vps);
vp;
- vp = fr_pair_cursor_next(&cursor)) {
+ vp = fr_cursor_next(&cursor)) {
/*
* Double quoted strings get marked up as xlat expansions,
* but we don't support that here.
#endif
if (rad_debug_lvl) {
- for (vp = fr_pair_cursor_init(&cursor, &request->packet->vps);
+ for (vp = fr_cursor_init(&cursor, &request->packet->vps);
vp;
- vp = fr_pair_cursor_next(&cursor)) {
+ vp = fr_cursor_next(&cursor)) {
/*
* Take this opportunity to verify all the VALUE_PAIRs are still valid.
*/
static void print_packet(FILE *fp, RADIUS_PACKET *packet)
{
VALUE_PAIR *vp;
- vp_cursor_t cursor;
+ fr_cursor_t cursor;
if (!packet) {
fprintf(fp, "\n");
fprintf(fp, "%s\n", fr_packet_codes[packet->code]);
- for (vp = fr_pair_cursor_init(&cursor, &packet->vps);
+ for (vp = fr_cursor_init(&cursor, &packet->vps);
vp;
- vp = fr_pair_cursor_next(&cursor)) {
+ vp = fr_cursor_next(&cursor)) {
/*
* Take this opportunity to verify all the VALUE_PAIRs are still valid.
*/
pool = talloc_pool(NULL, 1024);
for (map = inst->maps; map != NULL; map = map->next) {
VALUE_PAIR *to_cache = NULL;
- vp_cursor_t cursor;
+ fr_cursor_t cursor;
rad_assert(map->lhs && map->rhs);
continue;
}
- for (vp = fr_pair_cursor_init(&cursor, &to_cache);
+ for (vp = fr_cursor_init(&cursor, &to_cache);
vp;
- vp = fr_pair_cursor_next(&cursor)) {
+ vp = fr_cursor_next(&cursor)) {
/*
* Prevent people from accidentally caching
* cache control attributes.
rlm_cache_handle_t *handle;
- vp_cursor_t cursor;
+ fr_cursor_t cursor;
VALUE_PAIR *vp;
bool merge = true, insert = true, expire = false, set_ttl = false;
/*
* Clear control attributes
*/
- for (vp = fr_pair_cursor_init(&cursor, &request->control);
+ for (vp = fr_cursor_init(&cursor, &request->control);
vp;
- vp = fr_pair_cursor_next(&cursor)) {
+ vp = fr_cursor_next(&cursor)) {
+ again:
if (vp->da->vendor == 0) switch (vp->da->attr) {
case FR_CACHE_TTL:
case FR_CACHE_STATUS_ONLY:
case FR_CACHE_ALLOW_INSERT:
case FR_CACHE_MERGE_NEW:
RDEBUG2("Removing &control:%s", vp->da->name);
- vp = fr_pair_cursor_remove(&cursor);
+ vp = fr_cursor_remove(&cursor);
talloc_free(vp);
- break;
+ vp = fr_cursor_current(&cursor);
+ if (!vp) break;
+ goto again;
}
}
}
{
- vp_cursor_t cursor;
+ fr_cursor_t cursor;
/* Write each attribute/value to the log file */
- for (vp = fr_pair_cursor_init(&cursor, &packet->vps);
+ for (vp = fr_cursor_init(&cursor, &packet->vps);
vp;
- vp = fr_pair_cursor_next(&cursor)) {
+ vp = fr_cursor_next(&cursor)) {
FR_TOKEN op;
if (inst->ht && fr_hash_table_finddata(inst->ht, vp->da)) continue;
/*
* Convert diameter attributes to our VALUE_PAIR's
*/
-static ssize_t eap_ttls_decode_pair(TALLOC_CTX *ctx, vp_cursor_t *cursor, fr_dict_attr_t const *parent,
+static ssize_t eap_ttls_decode_pair(TALLOC_CTX *ctx, fr_cursor_t *cursor, fr_dict_attr_t const *parent,
uint8_t const *data, size_t data_len,
void *decoder_ctx)
{
if ((end - p) < 8) {
fr_strerror_printf("Malformed diameter VPs. Needed at least 8 bytes, got %zu bytes", end - p);
error:
- fr_pair_cursor_free(cursor);
+ fr_cursor_list_free(cursor);
return -1;
}
* to the nearest 4-byte boundary.
*/
p += (value_len + 0x03) & ~0x03;
- fr_pair_cursor_append(cursor, vp);
+ fr_cursor_append(cursor, vp);
if (vp->da->flags.is_unknown) continue;
size_t total;
uint64_t attr64;
VALUE_PAIR *vp;
- vp_cursor_t cursor;
+ fr_cursor_t cursor;
p = buffer;
total = 0;
- for (vp = fr_pair_cursor_init(&cursor, &first); vp; vp = fr_pair_cursor_next(&cursor)) {
+ for (vp = fr_cursor_init(&cursor, &first);
+ vp;
+ vp = fr_cursor_next(&cursor)) {
/*
* Too much data: die.
*/
{
rlm_rcode_t rcode = RLM_MODULE_REJECT;
VALUE_PAIR *vp, *tunnel_vps = NULL;
- vp_cursor_t cursor;
- vp_cursor_t to_tunnel;
+ fr_cursor_t cursor;
+ fr_cursor_t to_tunnel;
ttls_tunnel_t *t = tls_session->opaque;
{
RDEBUG("Got tunneled Access-Accept");
- fr_pair_cursor_init(&to_tunnel, &tunnel_vps);
+ fr_cursor_init(&to_tunnel, &tunnel_vps);
rcode = RLM_MODULE_OK;
/*
* Copy what we need into the TTLS tunnel and leave
* the rest to be cleaned up.
*/
- for (vp = fr_pair_cursor_init(&cursor, &reply->vps);
+ for (vp = fr_cursor_init(&cursor, &reply->vps);
vp;
- vp = fr_pair_cursor_next(&cursor)) {
+ vp = fr_cursor_next(&cursor)) {
switch (vp->da->vendor) {
case VENDORPEC_MICROSOFT:
if (vp->da->attr == FR_MSCHAP2_SUCCESS) {
rcode = RLM_MODULE_HANDLED;
t->authenticated = true;
- fr_pair_cursor_prepend(&to_tunnel, fr_pair_copy(tls_session, vp));
+ fr_cursor_prepend(&to_tunnel, fr_pair_copy(tls_session, vp));
}
break;
if (vp->da->attr == FR_UKERNA_CHBIND) {
rcode = RLM_MODULE_HANDLED;
t->authenticated = true;
- fr_pair_cursor_prepend(&to_tunnel, fr_pair_copy(tls_session, vp));
+ fr_cursor_prepend(&to_tunnel, fr_pair_copy(tls_session, vp));
}
break;
case FR_CODE_ACCESS_CHALLENGE:
RDEBUG("Got tunneled Access-Challenge");
- fr_pair_cursor_init(&to_tunnel, &tunnel_vps);
+ fr_cursor_init(&to_tunnel, &tunnel_vps);
/*
* Copy what we need into the TTLS tunnel and leave
* the rest to be cleaned up.
*/
- for (vp = fr_pair_cursor_init(&cursor, &reply->vps);
+ for (vp = fr_cursor_init(&cursor, &reply->vps);
vp;
- vp = fr_pair_cursor_next(&cursor)) {
+ vp = fr_cursor_next(&cursor)) {
switch (vp->da->vendor) {
case VENDORPEC_UKERNA:
if (vp->da->attr == FR_UKERNA_CHBIND) {
- fr_pair_cursor_prepend(&to_tunnel, fr_pair_copy(tls_session, vp));
+ fr_cursor_prepend(&to_tunnel, fr_pair_copy(tls_session, vp));
}
break;
switch (vp->da->attr) {
case FR_EAP_MESSAGE:
case FR_REPLY_MESSAGE:
- fr_pair_cursor_prepend(&to_tunnel, fr_pair_copy(tls_session, vp));
+ fr_cursor_prepend(&to_tunnel, fr_pair_copy(tls_session, vp));
break;
default:
rlm_rcode_t rcode;
REQUEST *fake = NULL;
VALUE_PAIR *vp = NULL;
- vp_cursor_t cursor;
+ fr_cursor_t cursor;
ttls_tunnel_t *t;
uint8_t const *data;
size_t data_len;
/*
* Add the tunneled attributes to the fake request.
*/
- fr_pair_cursor_init(&cursor, &fake->packet->vps);
+ fr_cursor_init(&cursor, &fake->packet->vps);
if (eap_ttls_decode_pair(fake->packet, &cursor, fr_dict_root(fr_dict_internal),
data, data_len, tls_session->ssl) < 0) {
RPEDEBUG("Decoding TTLS TLVs failed");
entry = users;
while (entry) {
- vp_cursor_t cursor;
+ fr_cursor_t cursor;
/*
* Look for improper use of '=' in the
* and probably ':=' for server
* configuration items.
*/
- for (vp = fr_pair_cursor_init(&cursor, &entry->check); vp; vp = fr_pair_cursor_next(&cursor)) {
+ for (vp = fr_cursor_init(&cursor, &entry->check);
+ vp;
+ vp = fr_cursor_next(&cursor)) {
/*
* Ignore attributes which are set
* properly.
* It's a common enough mistake, that it's
* worth doing.
*/
- for (vp = fr_pair_cursor_init(&cursor, &entry->reply); vp; vp = fr_pair_cursor_next(&cursor)) {
+ for (vp = fr_cursor_init(&cursor, &entry->reply);
+ vp;
+ vp = fr_cursor_next(&cursor)) {
/*
* If it's NOT a vendor attribute,
* and it's NOT a wire protocol
* Find the entry for the user.
*/
while (user_pl || default_pl) {
- vp_cursor_t cursor;
+ fr_cursor_t cursor;
VALUE_PAIR *vp;
PAIR_LIST const *pl;
}
check_tmp = fr_pair_list_copy(request, pl->check);
- for (vp = fr_pair_cursor_init(&cursor, &check_tmp);
+ for (vp = fr_cursor_init(&cursor, &check_tmp);
vp;
- vp = fr_pair_cursor_next(&cursor)) {
+ vp = fr_cursor_next(&cursor)) {
if (xlat_eval_do(request, vp) < 0) {
RWARN("Failed parsing expanded value for check item, skipping entry: %s", fr_strerror());
fr_pair_list_free(&check_tmp);
*/
const char *fr_json_afrom_pair_list(TALLOC_CTX *ctx, VALUE_PAIR **vps, const char *prefix)
{
- vp_cursor_t cursor;
+ fr_cursor_t cursor;
VALUE_PAIR *vp;
struct json_object *obj;
const char *p;
MEM(obj = json_object_new_object());
- for (vp = fr_pair_cursor_init(&cursor, vps); vp; vp = fr_pair_cursor_next(&cursor)) {
+ for (vp = fr_cursor_init(&cursor, vps);
+ vp;
+ vp = fr_cursor_next(&cursor)) {
char const *name_with_prefix;
fr_dict_enum_t const *dv;
struct json_object *vp_object, *values, *value, *type_name;