#define UNLANG_DETACHABLE (true)
#define UNLANG_NORMAL_CHILD (false)
-typedef rlm_rcode_t (*unlang_op_resume_func_t)(REQUEST *request, unlang_stack_t *stack,
+typedef rlm_rcode_t (*unlang_op_resume_func_t)(REQUEST *request,
const void *instance, void *thread, void *resume_ctx);
/*
}
-static void unlang_dump_stack(REQUEST *request, unlang_stack_t *stack)
+static void unlang_dump_stack(REQUEST *request)
{
int i;
+ unlang_stack_t *stack = request->stack;
RDEBUG("----- Begin stack debug [depth %i] -----", stack->depth);
for (i = stack->depth; i >= 0; i--) {
RDEBUG("----- End stack debug [depth %i] -------", stack->depth);
}
-#define DUMP_STACK if (DEBUG_ENABLED5) unlang_dump_stack(request, stack)
+#define DUMP_STACK if (DEBUG_ENABLED5) unlang_dump_stack(request)
#else
#define DUMP_STACK
#endif
return active_callers;
}
-static unlang_action_t unlang_load_balance(REQUEST *request, unlang_stack_t *stack,
+static unlang_action_t unlang_load_balance(REQUEST *request,
rlm_rcode_t *presult, UNUSED int *priority)
{
+ unlang_stack_t *stack = request->stack;
unlang_stack_frame_t *frame = &stack->frame[stack->depth];
unlang_t *instruction = frame->instruction;
unlang_group_t *g;
return UNLANG_ACTION_PUSHED_CHILD;
}
-static unlang_action_t unlang_group(REQUEST *request, unlang_stack_t *stack,
+static unlang_action_t unlang_group(REQUEST *request,
UNUSED rlm_rcode_t *result, UNUSED int *priority)
{
+ unlang_stack_t *stack = request->stack;
unlang_stack_frame_t *frame = &stack->frame[stack->depth];
unlang_t *instruction = frame->instruction;
unlang_group_t *g;
return UNLANG_ACTION_PUSHED_CHILD;
}
-static rlm_rcode_t unlang_run(REQUEST *request, unlang_stack_t *stack);
+static rlm_rcode_t unlang_run(REQUEST *request);
/** Allocates and initializes an unlang_resume_t
/** Resume a subrequest
*
*/
-static rlm_rcode_t unlang_subrequest_resume(UNUSED REQUEST *request, unlang_stack_t *stack,
+static rlm_rcode_t unlang_subrequest_resume(UNUSED REQUEST *request,
UNUSED const void *instance, UNUSED void *thread, void *resume_ctx)
{
REQUEST *child = talloc_get_type_abort(resume_ctx, REQUEST);
- unlang_stack_t *child_stack = child->stack;
+ unlang_stack_t *stack = request->stack;
rlm_rcode_t rcode;
unlang_stack_frame_t *frame;
#ifndef NDEBUG
/*
* Continue running the child.
*/
- rcode = unlang_run(child, child_stack);
+ rcode = unlang_run(child);
if (rcode != RLM_MODULE_YIELD) {
frame = &stack->frame[stack->depth];
rad_assert(frame->instruction->type == UNLANG_TYPE_RESUME);
}
-static unlang_action_t unlang_detach(REQUEST *request, unlang_stack_t *stack,
+static unlang_action_t unlang_detach(REQUEST *request,
rlm_rcode_t *presult, int *priority)
{
VALUE_PAIR *vp;
+ unlang_stack_t *stack = request->stack;
unlang_stack_frame_t *frame = &stack->frame[stack->depth];
unlang_t *instruction = frame->instruction;
return UNLANG_ACTION_CALCULATE_RESULT;
}
-static unlang_action_t unlang_call(REQUEST *request, unlang_stack_t *stack,
+static unlang_action_t unlang_call(REQUEST *request,
UNUSED rlm_rcode_t *presult, UNUSED int *priority)
{
+ unlang_stack_t *stack = request->stack;
unlang_stack_frame_t *frame = &stack->frame[stack->depth];
unlang_t *instruction = frame->instruction;
unlang_group_t *g;
}
-static unlang_action_t unlang_subrequest(REQUEST *request, unlang_stack_t *stack,
+static unlang_action_t unlang_subrequest(REQUEST *request,
rlm_rcode_t *presult, int *priority)
{
+ unlang_stack_t *stack = request->stack;
unlang_stack_frame_t *frame = &stack->frame[stack->depth];
unlang_t *instruction = frame->instruction;
unlang_group_t *g;
* virtual server callback, and not directly in the
* interpreter.
*/
- rcode = unlang_run(child, child->stack);
+ rcode = unlang_run(child);
if (rcode != RLM_MODULE_YIELD) {
if (UNLANG_DETACHABLE) request_detach(child);
talloc_free(child);
*/
case CHILD_RUNNABLE:
RDEBUG("parallel - running entry %d/%d", i + 1, state->num_children);
- result = unlang_run(state->children[i].child, state->children[i].child->stack);
+ result = unlang_run(state->children[i].child);
if (result == RLM_MODULE_YIELD) {
state->children[i].state = CHILD_YIELDED;
done = CHILD_YIELDED;
}
-static rlm_rcode_t unlang_parallel_resume(REQUEST *request, unlang_stack_t *stack,
+static rlm_rcode_t unlang_parallel_resume(REQUEST *request,
UNUSED const void *instance, UNUSED void *thread, void *resume_ctx)
{
rlm_rcode_t rcode;
unlang_parallel_t *state = talloc_get_type_abort(resume_ctx, unlang_parallel_t);
+ unlang_stack_t *stack = request->stack;
unlang_stack_frame_t *frame = &stack->frame[stack->depth];
#ifndef NDEBUG
return 0;
}
-static unlang_action_t unlang_parallel(REQUEST *request, unlang_stack_t *stack,
+static unlang_action_t unlang_parallel(REQUEST *request,
rlm_rcode_t *presult, int *priority)
{
int i;
rlm_rcode_t rcode;
+ unlang_stack_t *stack = request->stack;
unlang_stack_frame_t *frame = &stack->frame[stack->depth];
unlang_t *instruction = frame->instruction;
unlang_group_t *g;
return UNLANG_ACTION_CALCULATE_RESULT;
}
-static unlang_action_t unlang_case(REQUEST *request, unlang_stack_t *stack,
+static unlang_action_t unlang_case(REQUEST *request,
rlm_rcode_t *presult, int *priority)
{
+ unlang_stack_t *stack = request->stack;
unlang_stack_frame_t *frame = &stack->frame[stack->depth];
unlang_t *instruction = frame->instruction;
unlang_group_t *g;
return UNLANG_ACTION_CALCULATE_RESULT;
}
- return unlang_group(request, stack, presult, priority);
+ return unlang_group(request, presult, priority);
}
-static unlang_action_t unlang_return(REQUEST *request, unlang_stack_t *stack,
+static unlang_action_t unlang_return(REQUEST *request,
rlm_rcode_t *presult, int *priority)
{
int i;
VALUE_PAIR **copy_p;
+ unlang_stack_t *stack = request->stack;
unlang_stack_frame_t *frame = &stack->frame[stack->depth];
unlang_t *instruction = frame->instruction;
return UNLANG_ACTION_BREAK;
}
-static unlang_action_t unlang_foreach(REQUEST *request, unlang_stack_t *stack,
+static unlang_action_t unlang_foreach(REQUEST *request,
rlm_rcode_t *presult, int *priority)
{
VALUE_PAIR *vp;
+ unlang_stack_t *stack = request->stack;
unlang_stack_frame_t *frame = &stack->frame[stack->depth];
unlang_t *instruction = frame->instruction;
unlang_group_t *g;
return UNLANG_ACTION_PUSHED_CHILD;
}
-static unlang_action_t unlang_xlat_inline(REQUEST *request, unlang_stack_t *stack,
+static unlang_action_t unlang_xlat_inline(REQUEST *request,
UNUSED rlm_rcode_t *presult, UNUSED int *priority)
{
+ unlang_stack_t *stack = request->stack;
unlang_stack_frame_t *frame = &stack->frame[stack->depth];
unlang_t *instruction = frame->instruction;
unlang_xlat_inline_t *mx = unlang_generic_to_xlat_inline(instruction);
return UNLANG_ACTION_CONTINUE;
}
-static unlang_action_t unlang_switch(REQUEST *request, unlang_stack_t *stack,
+static unlang_action_t unlang_switch(REQUEST *request,
UNUSED rlm_rcode_t *presult, UNUSED int *priority)
{
+ unlang_stack_t *stack = request->stack;
unlang_stack_frame_t *frame = &stack->frame[stack->depth];
unlang_t *instruction = frame->instruction;
unlang_t *this, *found, *null_case;
}
-static unlang_action_t unlang_update(REQUEST *request, unlang_stack_t *stack,
- rlm_rcode_t *presult, int *priority)
+static unlang_action_t unlang_update(REQUEST *request,
+ rlm_rcode_t *presult, int *priority)
{
int rcode;
+ unlang_stack_t *stack = request->stack;
unlang_stack_frame_t *frame = &stack->frame[stack->depth];
unlang_t *instruction = frame->instruction;
unlang_group_t *g = unlang_generic_to_group(instruction);
}
-static unlang_action_t unlang_map(REQUEST *request, unlang_stack_t *stack,
+static unlang_action_t unlang_map(REQUEST *request,
rlm_rcode_t *presult, UNUSED int *priority)
{
+ unlang_stack_t *stack = request->stack;
unlang_stack_frame_t *frame = &stack->frame[stack->depth];
unlang_t *instruction = frame->instruction;
unlang_group_t *g = unlang_generic_to_group(instruction);
}
-static unlang_action_t unlang_module_call(REQUEST *request, unlang_stack_t *stack,
+static unlang_action_t unlang_module_call(REQUEST *request,
rlm_rcode_t *presult, int *priority)
{
unlang_module_call_t *sp;
+ unlang_stack_t *stack = request->stack;
unlang_stack_frame_t *frame = &stack->frame[stack->depth];
unlang_t *instruction = frame->instruction;
unlang_stack_state_modcall_t *modcall_state;
}
-static unlang_action_t unlang_if(REQUEST *request, unlang_stack_t *stack,
+static unlang_action_t unlang_if(REQUEST *request,
rlm_rcode_t *presult, int *priority)
{
int condition;
+ unlang_stack_t *stack = request->stack;
unlang_stack_frame_t *frame = &stack->frame[stack->depth];
unlang_t *instruction = frame->instruction;
unlang_group_t *g;
/*
* We took the "if". Go recurse into its' children.
*/
- return unlang_group(request, stack, presult, priority);
+ return unlang_group(request, presult, priority);
}
static unlang_op_resume_func_t unlang_ops_resume[] = {
[UNLANG_TYPE_PARALLEL] = unlang_parallel_resume,
};
-static unlang_action_t unlang_resume(REQUEST *request, unlang_stack_t *stack,
+static unlang_action_t unlang_resume(REQUEST *request,
rlm_rcode_t *presult, int *priority)
{
+ unlang_stack_t *stack = request->stack;
unlang_stack_frame_t *frame = &stack->frame[stack->depth];
unlang_t *instruction = frame->instruction;
unlang_resume_t *mr = unlang_generic_to_resume(instruction);
* Do the internal resume function.
*/
if (unlang_ops_resume[mr->parent_type]) {
- *presult = request->rcode = unlang_ops_resume[mr->parent_type](request, stack, instance, mr->thread, mr->resume_ctx);
+ *presult = request->rcode = unlang_ops_resume[mr->parent_type](request, instance, mr->thread, mr->resume_ctx);
} else {
rad_assert(mr->parent_type == UNLANG_TYPE_MODULE_CALL);
/*
* Interpret the various types of blocks.
*/
-static rlm_rcode_t unlang_run(REQUEST *request, unlang_stack_t *stack)
+static rlm_rcode_t unlang_run(REQUEST *request)
{
unlang_t *instruction;
int priority;
rlm_rcode_t result;
unlang_stack_frame_t *frame;
unlang_action_t action = UNLANG_ACTION_BREAK;
+ unlang_stack_t *stack = request->stack;
#ifndef NDEBUG
if (DEBUG_ENABLED5) DEBUG("###### unlang_run is starting");
RDEBUG4("** [%i] %s >> %s", stack->depth, __FUNCTION__,
unlang_ops[instruction->type].name);
- action = unlang_ops[instruction->type].func(request, stack, &result, &priority);
+ action = unlang_ops[instruction->type].func(request, &result, &priority);
RDEBUG4("** [%i] %s << %s (%d)", stack->depth, __FUNCTION__,
fr_int2str(unlang_action_table, action, "<INVALID>"), priority);
*/
rlm_rcode_t unlang_interpret_continue(REQUEST *request)
{
- return unlang_run(request, request->stack);
+ return unlang_run(request);
}
/** Call a module, iteratively, with a local stack, rather than recursively
*/
rlm_rcode_t unlang_interpret(REQUEST *request, CONF_SECTION *cs, rlm_rcode_t action)
{
- unlang_stack_t *stack = request->stack;
-
/*
* This pushes a new frame onto the stack, which is the
* start of a new unlang section...
*/
unlang_push_section(request, cs, action);
- return unlang_run(request, stack);
+ return unlang_run(request);
}
/** Execute an unlang section synchronously