![]() |
The FreeRADIUS server $Id: 15bac2a4c627c01d1aa2047687b3418955ac7f00 $
|
#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/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/subrequest.h>
#include <freeradius-devel/unlang/xlat.h>
#include <freeradius-devel/unlang/tmpl.h>
#include <sys/wait.h>
Go to the source code of this file.
Data Structures | |
struct | fr_trigger_t |
struct | trigger_last_fired_t |
Describes a rate limiting entry for a trigger. More... | |
Macros | |
#define | REQUEST_INDEX_TRIGGER_ARGS 2 |
#define | REQUEST_INDEX_TRIGGER_NAME 1 |
Functions | |
static int | _mutex_free (pthread_mutex_t *mutex) |
static int | _trigger_exec_free (UNUSED void *uctx) |
Free trigger resources. | |
static int | _trigger_exec_init (void *cs_arg) |
Set the global trigger section trigger_exec will search in, and register xlats. | |
static int8_t | _trigger_last_fired_cmp (void const *one, void const *two) |
Compares two last fired structures. | |
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. | |
bool | trigger_enabled (void) |
Return whether triggers are enabled. | |
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. | |
int | trigger_exec_init (CONF_SECTION const *cs) |
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. | |
Variables | |
static CONF_SECTION const * | trigger_cs |
Whether triggers are enabled globally. | |
static fr_rb_tree_t * | trigger_last_fired_tree |
static pthread_mutex_t * | trigger_mutex |
xlat_arg_parser_t const | trigger_xlat_args [] |
struct fr_trigger_t |
Data Fields | ||
---|---|---|
fr_value_box_list_t | args | Arguments to pass to the trigger exec. |
int | exec_status | |
fr_value_box_list_t | out | result of the xlap (which we ignore) |
unlang_result_t | result | the result of expansion |
struct trigger_last_fired_t |
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. |
|
static |
|
static |
|
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.
[in] | cs_arg | to use as global trigger section. |
Definition at line 524 of file trigger.c.
|
static |
Compares two last fired structures.
one | first pointer to compare. |
two | second pointer to compare. |
Definition at line 120 of file trigger.c.
|
static |
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.
[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 466 of file trigger.c.
bool trigger_enabled | ( | void | ) |
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.
A trigger ties a state change (e.g. connection up) in a module to an action (e.g. send an SNMP trap) defined in raqddb/triggers.conf or in the trigger section of a module, and can be created with one call to trigger_exec().
The trigger_exec function expands the configuration item, and runs the given function (exec, sql insert, etc.) asynchronously, allowing the server to keep processing packets while the action is being taken.
The name of each trigger is based on the module or portion of the server which runs the trigger, and is usually taken from the state when the module has a state change.
Triggers are separate from logs, because log messages are generally informational, are not time sensitive, and usually require log files to be parsed and filtered in order to find relevant information.
In contrast, triggers are something specific which the administrator needs to be notified about immediately and can't wait to post-process a log file.
[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. |
Definition at line 179 of file trigger.c.
int trigger_exec_init | ( | CONF_SECTION const * | cs | ) |
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 | ||
) |
|
static |
|
static |
|
static |
xlat_arg_parser_t const trigger_xlat_args[] |