/*
* RADIUS state machine functions
*/
-#define UPDATE_STATE(_x) do { \
+#define UPDATE_STATE_CS(_x) do { \
state = &radius_state[request->_x->code]; \
cs = *(CONF_SECTION **) (((uint8_t *) &inst->packets) + state->offset); \
} while (0)
+#define UPDATE_STATE(_x) state = &radius_state[request->_x->code]
+
#define RCODE2PACKET(_x) ((*state->packet_type)[_x])
#define RECV(_x) static unlang_action_t recv_ ## _x(rlm_rcode_t *p_result, UNUSED module_ctx_t const *mctx, UNUSED request_t *request)
fr_assert(RCODE2PACKET(rcode) != 0);
request->reply->code = RCODE2PACKET(rcode);
- UPDATE_STATE(reply);
+ UPDATE_STATE_CS(reply);
if (request->reply->code == FR_CODE_DO_NOT_RESPOND) {
RDEBUG("The 'recv Access-Request' section returned %s - not sending a response",
if (auth_type_rcode[rcode] == FR_CODE_DO_NOT_RESPOND) {
request->reply->code = auth_type_rcode[rcode];
- UPDATE_STATE(reply);
+ UPDATE_STATE_CS(reply);
RDEBUG("The 'authenticate' section returned %s - not sending a response",
fr_table_str_by_value(rcode_table, rcode, "???"));
break;
}
- UPDATE_STATE(reply);
+ UPDATE_STATE_CS(reply);
fr_assert(state->send != NULL);
return unlang_module_yield_to_section(p_result, request,
*/
if (fr_request_to_state(inst->auth.state_tree, request) < 0) {
request->reply->code = FR_CODE_DO_NOT_RESPOND;
- UPDATE_STATE(reply);
+ UPDATE_STATE_CS(reply);
return unlang_module_yield_to_section(p_result, request,
cs, state->rcode, state->send,
NULL, NULL);
fr_assert(acct_type_rcode[rcode] == FR_CODE_DO_NOT_RESPOND);
request->reply->code = acct_type_rcode[rcode];
- UPDATE_STATE(reply);
+ UPDATE_STATE_CS(reply);
RDEBUG("The 'accounting' section returned %s - not sending a response",
fr_table_str_by_value(rcode_table, rcode, "???"));
}
request->reply->code = FR_CODE_ACCOUNTING_RESPONSE;
- UPDATE_STATE(reply);
+ UPDATE_STATE_CS(reply);
fr_assert(state->send != NULL);
return unlang_module_yield_to_section(p_result, request,
fr_assert(RCODE2PACKET(rcode) != 0);
request->reply->code = RCODE2PACKET(rcode);
- UPDATE_STATE(reply);
+ UPDATE_STATE_CS(reply);
if (request->reply->code == FR_CODE_DO_NOT_RESPOND) {
RDEBUG("The 'recv Accounting-Request' section returned %s - not sending a response",
request->component = "radius";
fr_assert(request->dict == dict_radius);
- UPDATE_STATE(packet);
+ UPDATE_STATE_CS(packet);
if (!state->recv) {
REDEBUG("Invalid packet type");
fr_assert(RCODE2PACKET(rcode) != 0);
request->reply->code = RCODE2PACKET(rcode);
- UPDATE_STATE(reply);
+ UPDATE_STATE_CS(reply);
fr_assert(state->send != NULL);
return unlang_module_yield_to_section(p_result, request,
fr_assert((request->reply->code > 0) && (request->reply->code < FR_RADIUS_MAX_PACKET_CODE));
- UPDATE_STATE(reply);
+ UPDATE_STATE_CS(reply);
/*
* Allow for over-ride of reply code, IF it's
} else if ((vp->vp_uint32 > 0) && (vp->vp_uint32 < FR_RADIUS_MAX_PACKET_CODE) &&
(radius_state[vp->vp_uint32].packet_type != NULL)) {
request->reply->code = vp->vp_uint32;
- UPDATE_STATE(reply);
+ UPDATE_STATE_CS(reply);
+
} else {
RWDEBUG("Ignoring invalid value %u for &reply.Packet-Type", vp->vp_uint32);
}
/*
* If they delete &reply.Packet-Type, tough for them.
*/
- UPDATE_STATE(reply);
+ UPDATE_STATE_CS(reply);
fr_assert(rcode < RLM_MODULE_NUMCODES);
switch (RCODE2PACKET(rcode)) {
char const *old = cf_section_name2(cs);
request->reply->code = RCODE2PACKET(rcode);
- UPDATE_STATE(reply);
+ UPDATE_STATE_CS(reply);
RWDEBUG("Failed running 'send %s', changing reply to %s", old, cf_section_name2(cs));
static unlang_action_t mod_process(rlm_rcode_t *p_result, module_ctx_t const *mctx, request_t *request)
{
- CONF_SECTION *cs;
radius_state_t const *state;
- process_radius_t *inst = talloc_get_type_abort_const(mctx->instance, process_radius_t);
fr_assert((request->packet->code > 0) && (request->packet->code < FR_RADIUS_MAX_PACKET_CODE));