#include <freeradius-devel/protocol/freeradius/freeradius.internal.h>
#include <freeradius-devel/server/cf_file.h>
#include <freeradius-devel/server/cf_parse.h>
#include <freeradius-devel/server/cf_util.h>
#include <freeradius-devel/server/exec.h>
#include <freeradius-devel/server/main_loop.h>
#include <freeradius-devel/server/request_data.h>
#include <freeradius-devel/server/trigger.h>
#include <freeradius-devel/unlang/function.h>
#include <freeradius-devel/unlang/interpret.h>
#include <freeradius-devel/unlang/subrequest.h>
#include <freeradius-devel/unlang/xlat.h>
#include <freeradius-devel/util/atexit.h>
#include <freeradius-devel/util/debug.h>
#include <sys/wait.h>
Go to the source code of this file.
|
static int | _mutex_free (pthread_mutex_t *mutex) |
|
static int | _trigger_exec_free (UNUSED void *uctx) |
| Free trigger resources. More...
|
|
static int | _trigger_exec_init (void *cs_arg) |
| Set the global trigger section trigger_exec will search in, and register xlats. More...
|
|
static int8_t | _trigger_last_fired_cmp (void const *one, void const *two) |
| Compares two last fired structures. More...
|
|
static void | _trigger_last_fired_free (void *data) |
|
void | trigger_args_afrom_server (TALLOC_CTX *ctx, fr_pair_list_t *list, char const *server, uint16_t port) |
| Create trigger arguments to describe the server the pool connects to. More...
|
|
static unlang_action_t | trigger_done (rlm_rcode_t *p_result, UNUSED int *priority, request_t *request, void *rctx) |
|
bool | trigger_enabled (void) |
| Return whether triggers are enabled. More...
|
|
int | trigger_exec (unlang_interpret_t *intp, CONF_SECTION const *cs, char const *name, bool rate_limit, fr_pair_list_t *args) |
| Execute a trigger - call an executable to process an event. More...
|
|
int | trigger_exec_init (CONF_SECTION const *cs) |
|
static unlang_action_t | trigger_resume (rlm_rcode_t *p_result, UNUSED int *priority, request_t *request, void *rctx) |
|
static unlang_action_t | trigger_run (rlm_rcode_t *p_result, UNUSED int *priority, request_t *request, void *uctx) |
|
xlat_action_t | trigger_xlat (TALLOC_CTX *ctx, fr_dcursor_t *out, UNUSED xlat_ctx_t const *xctx, request_t *request, fr_value_box_list_t *in) |
| Retrieve attributes from a special trigger list. More...
|
|
◆ fr_trigger_t
Definition at line 140 of file trigger.c.
Data Fields |
fr_value_box_list_t |
args |
Arguments to pass to the trigger exec. |
char * |
command |
Name of the trigger. |
fr_exec_state_t |
exec |
Used for asynchronous execution. |
fr_time_delta_t |
timeout |
How long the trigger has to run. |
xlat_exp_head_t * |
xlat |
xlat representation of the trigger args. |
◆ trigger_last_fired_t
struct trigger_last_fired_t |
Describes a rate limiting entry for a trigger.
Definition at line 59 of file trigger.c.
Data Fields |
CONF_ITEM * |
ci |
Config item this rate limit counter is associated with. |
fr_time_t |
last_fired |
When this trigger last fired. |
fr_rb_node_t |
node |
Entry in the trigger last fired tree. |
◆ REQUEST_INDEX_TRIGGER_ARGS
#define REQUEST_INDEX_TRIGGER_ARGS 2 |
◆ REQUEST_INDEX_TRIGGER_NAME
#define REQUEST_INDEX_TRIGGER_NAME 1 |
◆ _mutex_free()
◆ _trigger_exec_free()
static int _trigger_exec_free |
( |
UNUSED void * |
uctx | ) |
|
|
static |
Free trigger resources.
Definition at line 490 of file trigger.c.
◆ _trigger_exec_init()
static int _trigger_exec_init |
( |
void * |
cs_arg | ) |
|
|
static |
Set the global trigger section trigger_exec will search in, and register xlats.
This function exists because triggers are used by the connection pool, which is used in the server library which may not have the mainconfig available. Additionally, utilities may want to set their own root config sections.
We don't register the trigger xlat here, as we may inadvertently initialise the xlat code, which is annoying when this is called from a utility.
- Parameters
-
[in] | cs_arg | to use as global trigger section. |
- Returns
- 0 on success.
- -1 on failure.
Definition at line 512 of file trigger.c.
◆ _trigger_last_fired_cmp()
static int8_t _trigger_last_fired_cmp |
( |
void const * |
one, |
|
|
void const * |
two |
|
) |
| |
|
static |
Compares two last fired structures.
- Parameters
-
one | first pointer to compare. |
two | second pointer to compare. |
- Returns
- CMP(one, two)
Definition at line 125 of file trigger.c.
◆ _trigger_last_fired_free()
static void _trigger_last_fired_free |
( |
void * |
data | ) |
|
|
static |
◆ trigger_args_afrom_server()
void trigger_args_afrom_server |
( |
TALLOC_CTX * |
ctx, |
|
|
fr_pair_list_t * |
list, |
|
|
char const * |
server, |
|
|
uint16_t |
port |
|
) |
| |
Create trigger arguments to describe the server the pool connects to.
- Note
- trigger_exec_init must be called before calling this function, else it will return NULL.
- Parameters
-
[in] | ctx | to allocate fr_pair_t s in. |
[out] | list | to append Pool-Server and Pool-Port pairs to |
[in] | server | we're connecting to. |
[in] | port | on that server. |
Definition at line 454 of file trigger.c.
◆ trigger_done()
◆ trigger_enabled()
bool trigger_enabled |
( |
void |
| ) |
|
Return whether triggers are enabled.
Definition at line 135 of file trigger.c.
◆ trigger_exec()
Execute a trigger - call an executable to process an event.
- Note
- Calls to this function will be ignored if trigger_exec_init has not been called.
- Parameters
-
[in] | intp | Interpreter to run the trigger with. If this is NULL the trigger will be executed synchronously. |
[in] | cs | to search for triggers in. If cs is not NULL, the portion after the last '.' in name is used for the trigger. If cs is NULL, the entire name is used to find the trigger in the global trigger section. |
[in] | name | the path relative to the global trigger section ending in the trigger name e.g. module.ldap.pool.start. |
[in] | rate_limit | whether to rate limit triggers. |
[in] | args | to make available via the%trigger(<arg>) xlat. |
- Returns
- 0 on success.
- -1 on failure.
Definition at line 233 of file trigger.c.
◆ trigger_exec_init()
◆ trigger_resume()
◆ trigger_run()
◆ trigger_xlat()
Retrieve attributes from a special trigger list.
Definition at line 73 of file trigger.c.
◆ trigger_exec_main
◆ trigger_exec_subcs
◆ trigger_last_fired_tree
◆ trigger_mutex
◆ trigger_xlat_args
Initial value:= {
}
@ FR_TYPE_STRING
String of printable characters.
#define XLAT_ARG_PARSER_TERMINATOR
Definition at line 65 of file trigger.c.
◆ triggers_init
Whether triggers are enabled globally.
Definition at line 48 of file trigger.c.