ntohs(_field), end) < 0) goto fail; \
} while (0)
+#define BODY(_x) (((uint8_t const *) pkt) + sizeof(pkt->hdr) + sizeof(pkt->_x))
/**
* Decode a TACACS+ 'arg_N' fields.
* | data...
* +----------------+----------------+----------------+----------------+
*/
- p = pkt->authen.start.body;
+ p = BODY(authen.start);
PACKET_HEADER_CHECK("Authentication Start");
if ((pkt->hdr.ver.minor == 0) &&
goto fail;
}
- p = pkt->authen.cont.body;
+ p = BODY(authen.cont);
PACKET_HEADER_CHECK("Authentication Continue");
if (pkt->authen.start.authen_type != FR_AUTHENTICATION_TYPE_VALUE_ASCII) {
* We just echo whatever was sent in the request.
*/
- p = pkt->authen.reply.body;
+ p = BODY(authen.reply);
PACKET_HEADER_CHECK("Authentication Reply");
DECODE_FIELD_UINT8(attr_tacacs_packet_body_type, FR_PACKET_BODY_TYPE_REPLY);
if (pkt->hdr.ver.minor != 0) goto invalid_version;
- p = pkt->author.req.body;
+ p = BODY(author.req);
PACKET_HEADER_CHECK("Authorization REQUEST");
ARG_COUNT_CHECK("Authorization REQUEST", pkt->author.req.arg_cnt);
DECODE_FIELD_UINT8(attr_tacacs_packet_body_type, FR_PACKET_BODY_TYPE_REQUEST);
* Decode 'arg_N' arguments (horrible format)
*/
if (tacacs_decode_args(ctx, cursor, attr_tacacs_argument_list,
- pkt->author.req.arg_cnt, pkt->author.req.body, &p, end) < 0) goto fail;
+ pkt->author.req.arg_cnt, BODY(author.req), &p, end) < 0) goto fail;
} else if (packet_is_author_response(pkt)) {
/*
* We just echo whatever was sent in the request.
*/
- p = pkt->author.res.body;
+ p = BODY(author.res);
PACKET_HEADER_CHECK("Authorization RESPONSE");
ARG_COUNT_CHECK("Authorization REQUEST", pkt->author.res.arg_cnt);
DECODE_FIELD_UINT8(attr_tacacs_packet_body_type, FR_PACKET_BODY_TYPE_RESPONSE);
* Decode 'arg_N' arguments (horrible format)
*/
if (tacacs_decode_args(ctx, cursor, attr_tacacs_argument_list,
- pkt->author.res.arg_cnt, pkt->author.res.body, &p, end) < 0) goto fail;
+ pkt->author.res.arg_cnt, BODY(author.res), &p, end) < 0) goto fail;
} else {
goto unknown_packet;
if (pkt->hdr.ver.minor != 0) goto invalid_version;
- p = pkt->acct.req.body;
+ p = BODY(acct.req);
PACKET_HEADER_CHECK("Accounting REQUEST");
ARG_COUNT_CHECK("Accounting REQUEST", pkt->acct.req.arg_cnt);
DECODE_FIELD_UINT8(attr_tacacs_packet_body_type, FR_PACKET_BODY_TYPE_REQUEST);
* Decode 'arg_N' arguments (horrible format)
*/
if (tacacs_decode_args(ctx, cursor, attr_tacacs_argument_list,
- pkt->acct.req.arg_cnt, pkt->acct.req.body, &p, end) < 0) goto fail;
+ pkt->acct.req.arg_cnt, BODY(acct.req), &p, end) < 0) goto fail;
} else if (packet_is_acct_reply(pkt)) {
/**
* We just echo whatever was sent in the request.
*/
- p = pkt->acct.reply.body;
+ p = BODY(acct.reply);
PACKET_HEADER_CHECK("Accounting REPLY");
DECODE_FIELD_UINT8(attr_tacacs_packet_body_type, FR_PACKET_BODY_TYPE_REPLY);