.
fr_io_track_t const *track = talloc_get_type_abort_const(request->async->packet_ctx, fr_io_track_t);
fr_io_address_t const *address = track->address;
RADCLIENT const *client;
+ fr_cursor_t cursor;
fr_assert(data[0] < FR_RADIUS_MAX_PACKET_CODE);
* That MUST be set and checked in the underlying
* transport, via a call to fr_radius_ok().
*/
+ fr_cursor_init(&cursor, &request->request_pairs);
if (fr_radius_decode(request->packet, request->packet->data, request->packet->data_len,
NULL, client->secret, talloc_array_length(client->secret) - 1,
- &request->request_pairs) < 0) {
+ &cursor) < 0) {
RPEDEBUG("Failed decoding packet");
return -1;
}
* values.
*/
if (!client->active) {
- fr_cursor_t cursor;
VALUE_PAIR *vp;
fr_assert(client->dynamic);
decode_fail_t reason;
uint8_t code;
uint8_t original[RADIUS_HEADER_LENGTH];
+ fr_cursor_t cursor;
*response_code = 0; /* Initialise to keep the rest of the code happy */
* This only fails if the packet is strangely malformed,
* or if we run out of memory.
*/
+ fr_cursor_init(&cursor, reply);
if (fr_radius_decode(ctx, data, packet_len, original,
- inst->secret, talloc_array_length(inst->secret) - 1, reply) < 0) {
+ inst->secret, talloc_array_length(inst->secret) - 1, &cursor) < 0) {
REDEBUG("Failed decoding attributes for packet");
fr_pair_list_free(reply);
return DECODE_FAIL_UNKNOWN;
*
*/
ssize_t fr_radius_decode(TALLOC_CTX *ctx, uint8_t const *packet, size_t packet_len, uint8_t const *original,
- char const *secret, UNUSED size_t secret_len, VALUE_PAIR **vps)
+ char const *secret, UNUSED size_t secret_len, fr_cursor_t *cursor)
{
ssize_t slen;
- fr_cursor_t cursor;
uint8_t const *attr, *end;
fr_radius_ctx_t packet_ctx;
packet_ctx.secret = secret;
packet_ctx.vector = original ? original + 4 : packet + 4;
- fr_cursor_init(&cursor, vps);
-
attr = packet + 20;
end = packet + packet_len;
* he doesn't, all hell breaks loose.
*/
while (attr < end) {
- slen = fr_radius_decode_pair(ctx, &cursor, dict_radius, attr, (end - attr), &packet_ctx);
+ slen = fr_radius_decode_pair(ctx, cursor, dict_radius, attr, (end - attr), &packet_ctx);
if (slen < 0) {
talloc_free(packet_ctx.tmp_ctx);
return slen;
vp = fr_cursor_tail(&cursor);
return fr_radius_decode(ctx, data, packet_len, test_ctx->vector - 4, /* decode adds 4 to this */
- test_ctx->secret, talloc_array_length(test_ctx->secret) - 1, &vp->next);
+ test_ctx->secret, talloc_array_length(test_ctx->secret) - 1, &cursor);
}
/*
char const *secret, UNUSED size_t secret_len, int code, int id, VALUE_PAIR *vps);
ssize_t fr_radius_decode(TALLOC_CTX *ctx, uint8_t const *packet, size_t packet_len, uint8_t const *original,
- char const *secret, UNUSED size_t secret_len, VALUE_PAIR **vps) CC_HINT(nonnull(1,2,5,7));
+ char const *secret, UNUSED size_t secret_len, fr_cursor_t *cursor) CC_HINT(nonnull(1,2,5,7));
int fr_radius_init(void);