.name = name,
.debug_name = name,
.actions = {
- [RLM_MODULE_REJECT] = 0,
- [RLM_MODULE_FAIL] = MOD_ACTION_RETURN, /* Exit out of nested levels */
- [RLM_MODULE_OK] = 0,
- [RLM_MODULE_HANDLED] = 0,
- [RLM_MODULE_INVALID] = 0,
- [RLM_MODULE_DISALLOW] = 0,
- [RLM_MODULE_NOTFOUND] = 0,
- [RLM_MODULE_NOOP] = 0,
- [RLM_MODULE_UPDATED] = 0
- }
+ .actions = {
+ [RLM_MODULE_REJECT] = 0,
+ [RLM_MODULE_FAIL] = MOD_ACTION_RETURN, /* Exit out of nested levels */
+ [RLM_MODULE_OK] = 0,
+ [RLM_MODULE_HANDLED] = 0,
+ [RLM_MODULE_INVALID] = 0,
+ [RLM_MODULE_DISALLOW] = 0,
+ [RLM_MODULE_NOTFOUND] = 0,
+ [RLM_MODULE_NOOP] = 0,
+ [RLM_MODULE_UPDATED] = 0
+ },
+ },
}
},
.server_cs = server_cs,
"post-auth"
};
-typedef struct {
- int actions[RLM_MODULE_NUMCODES];
-} unlang_actions_t;
-
typedef struct {
rlm_components_t component;
char const *section_name1;
((c->parent->type == UNLANG_TYPE_REDUNDANT) || (c->parent->type == UNLANG_TYPE_REDUNDANT_LOAD_BALANCE))) {
for (i = 0; i < RLM_MODULE_NUMCODES; i++) {
if (i == RLM_MODULE_FAIL) {
- if (!c->actions[i]) {
- c->actions[i] = 1;
+ if (!c->actions.actions[i]) {
+ c->actions.actions[i] = 1;
}
continue;
}
- if (!c->actions[i]) {
- c->actions[i] = MOD_ACTION_RETURN;
+ if (!c->actions.actions[i]) {
+ c->actions.actions[i] = MOD_ACTION_RETURN;
}
}
* set.
*/
for (i = 0; i < RLM_MODULE_NUMCODES; i++) {
- if (!c->actions[i]) {
- c->actions[i] = unlang_ctx->actions[0].actions[i];
+ if (!c->actions.actions[i]) {
+ c->actions.actions[i] = unlang_ctx->actions[0].actions[i];
}
}
}
attr);
return 0;
}
- c->actions[rcode] = action;
+ c->actions.actions[rcode] = action;
} else { /* set all unset values to the default */
int i;
for (i = 0; i < RLM_MODULE_NUMCODES; i++) {
- if (!c->actions[i]) c->actions[i] = action;
+ if (!c->actions.actions[i]) c->actions.actions[i] = action;
}
}
* when we pick a 'case' statement, we don't
* fall through to processing the next one.
*/
- for (i = 0; i < RLM_MODULE_NUMCODES; i++) c->actions[i] = MOD_ACTION_RETURN;
+ for (i = 0; i < RLM_MODULE_NUMCODES; i++) c->actions.actions[i] = MOD_ACTION_RETURN;
return c;
}
#include <freeradius-devel/server/components.h>
#include <freeradius-devel/server/tmpl.h>
+typedef struct {
+ int actions[RLM_MODULE_NUMCODES];
+} unlang_actions_t;
+
int unlang_compile(CONF_SECTION *cs, rlm_components_t component, tmpl_rules_t const *rules, void **instruction);
bool unlang_compile_is_keyword(const char *name);
.name = "function",
.debug_name = "function",
.actions = {
- [RLM_MODULE_REJECT] = 0,
- [RLM_MODULE_FAIL] = 0,
- [RLM_MODULE_OK] = 0,
- [RLM_MODULE_HANDLED] = 0,
- [RLM_MODULE_INVALID] = 0,
- [RLM_MODULE_DISALLOW] = 0,
- [RLM_MODULE_NOTFOUND] = 0,
- [RLM_MODULE_NOOP] = 0,
- [RLM_MODULE_UPDATED] = 0
- }
+ .actions = {
+ [RLM_MODULE_REJECT] = 0,
+ [RLM_MODULE_FAIL] = 0,
+ [RLM_MODULE_OK] = 0,
+ [RLM_MODULE_HANDLED] = 0,
+ [RLM_MODULE_INVALID] = 0,
+ [RLM_MODULE_DISALLOW] = 0,
+ [RLM_MODULE_NOTFOUND] = 0,
+ [RLM_MODULE_NOOP] = 0,
+ [RLM_MODULE_UPDATED] = 0
+ },
+ },
};
/** Generic signal handler
/*
* The child's action says return. Do so.
*/
- if (instruction->actions[*result] == MOD_ACTION_RETURN) {
+ if (instruction->actions.actions[*result] == MOD_ACTION_RETURN) {
if (*priority < 0) *priority = 0;
RDEBUG4("** [%i] %s - action says to return with (%s %d)",
* If "reject", break out of the loop and return
* reject.
*/
- if (instruction->actions[*result] == MOD_ACTION_REJECT) {
+ if (instruction->actions.actions[*result] == MOD_ACTION_REJECT) {
if (*priority < 0) *priority = 0;
RDEBUG4("** [%i] %s - action says to return with (%s %d)",
* code. Grab it in preference to any unset priority.
*/
if (*priority < 0) {
- *priority = instruction->actions[*result];
+ *priority = instruction->actions.actions[*result];
RDEBUG4("** [%i] %s - setting priority to (%s %d)",
stack->depth, __FUNCTION__,
* RLM_MODULE_NOT_SET means the instruction
* doesn't want to modify the result.
*/
- if (*result != RLM_MODULE_NOT_SET) *priority = instruction->actions[*result];
+ if (*result != RLM_MODULE_NOT_SET) *priority = instruction->actions.actions[*result];
if (result_calculate(request, frame, result, priority) == UNLANG_FRAME_ACTION_POP) {
return UNLANG_FRAME_ACTION_POP;
* If the current child says "return", then do
* so.
*/
- if (redundant->child->actions[*p_result] == MOD_ACTION_RETURN) {
+ if (redundant->child->actions.actions[*p_result] == MOD_ACTION_RETURN) {
/* DON'T change p_result, as it is taken from the child */
return UNLANG_ACTION_CALCULATE_RESULT;
}
.name = module_instance->name,
.debug_name = module_instance->name,
.actions = {
- [RLM_MODULE_REJECT] = 0,
- [RLM_MODULE_FAIL] = MOD_ACTION_RETURN, /* Exit out of nested levels */
- [RLM_MODULE_OK] = 0,
- [RLM_MODULE_HANDLED] = 0,
- [RLM_MODULE_INVALID] = 0,
- [RLM_MODULE_DISALLOW] = 0,
- [RLM_MODULE_NOTFOUND] = 0,
- [RLM_MODULE_NOOP] = 0,
- [RLM_MODULE_UPDATED] = 0
- }
+ .actions = {
+ [RLM_MODULE_REJECT] = 0,
+ [RLM_MODULE_FAIL] = MOD_ACTION_RETURN, /* Exit out of nested levels */
+ [RLM_MODULE_OK] = 0,
+ [RLM_MODULE_HANDLED] = 0,
+ [RLM_MODULE_INVALID] = 0,
+ [RLM_MODULE_DISALLOW] = 0,
+ [RLM_MODULE_NOTFOUND] = 0,
+ [RLM_MODULE_NOOP] = 0,
+ [RLM_MODULE_UPDATED] = 0
+ },
+ },
},
.instance = module_instance,
.method = method
.name = "subrequest",
.debug_name = "subrequest",
.actions = {
- [RLM_MODULE_REJECT] = 0,
- [RLM_MODULE_FAIL] = 0,
- [RLM_MODULE_OK] = 0,
- [RLM_MODULE_HANDLED] = 0,
- [RLM_MODULE_INVALID] = 0,
- [RLM_MODULE_DISALLOW] = 0,
- [RLM_MODULE_NOTFOUND] = 0,
+ .actions = {
+ [RLM_MODULE_REJECT] = 0,
+ [RLM_MODULE_FAIL] = 0,
+ [RLM_MODULE_OK] = 0,
+ [RLM_MODULE_HANDLED] = 0,
+ [RLM_MODULE_INVALID] = 0,
+ [RLM_MODULE_DISALLOW] = 0,
+ [RLM_MODULE_NOTFOUND] = 0,
[RLM_MODULE_NOOP] = 0,
- [RLM_MODULE_UPDATED] = 0
- }
+ [RLM_MODULE_UPDATED] = 0
+ },
+ },
}
}
};
.name = "tmpl",
.debug_name = "tmpl",
.actions = {
- [RLM_MODULE_REJECT] = 0,
- [RLM_MODULE_FAIL] = 0,
- [RLM_MODULE_OK] = 0,
- [RLM_MODULE_HANDLED] = 0,
- [RLM_MODULE_INVALID] = 0,
- [RLM_MODULE_DISALLOW] = 0,
- [RLM_MODULE_NOTFOUND] = 0,
- [RLM_MODULE_NOOP] = 0,
- [RLM_MODULE_UPDATED] = 0
+ .actions = {
+ [RLM_MODULE_REJECT] = 0,
+ [RLM_MODULE_FAIL] = 0,
+ [RLM_MODULE_OK] = 0,
+ [RLM_MODULE_HANDLED] = 0,
+ [RLM_MODULE_INVALID] = 0,
+ [RLM_MODULE_DISALLOW] = 0,
+ [RLM_MODULE_NOTFOUND] = 0,
+ [RLM_MODULE_NOOP] = 0,
+ [RLM_MODULE_UPDATED] = 0
+ },
},
};
char const *debug_name; //!< Printed in log messages when the node is executed.
unlang_type_t type; //!< The specialisation of this node.
bool closed; //!< whether or not this section is closed to new statements
- int actions[RLM_MODULE_NUMCODES]; //!< Priorities for the various return codes.
+ unlang_actions_t actions; //!< Priorities, etc. for the various return codes.
};
/** Describes how to allocate an #unlang_group_t with additional memory keyword specific data
.name = "xlat",
.debug_name = "xlat",
.actions = {
- [RLM_MODULE_REJECT] = 0,
- [RLM_MODULE_FAIL] = MOD_ACTION_RETURN, /* Exit out of nested levels */
- [RLM_MODULE_OK] = 0,
- [RLM_MODULE_HANDLED] = 0,
- [RLM_MODULE_INVALID] = 0,
- [RLM_MODULE_DISALLOW] = 0,
- [RLM_MODULE_NOTFOUND] = 0,
- [RLM_MODULE_NOOP] = 0,
- [RLM_MODULE_UPDATED] = 0
+ .actions = {
+ [RLM_MODULE_REJECT] = 0,
+ [RLM_MODULE_FAIL] = MOD_ACTION_RETURN, /* Exit out of nested levels */
+ [RLM_MODULE_OK] = 0,
+ [RLM_MODULE_HANDLED] = 0,
+ [RLM_MODULE_INVALID] = 0,
+ [RLM_MODULE_DISALLOW] = 0,
+ [RLM_MODULE_NOTFOUND] = 0,
+ [RLM_MODULE_NOOP] = 0,
+ [RLM_MODULE_UPDATED] = 0
+ },
},
};