MINOR: rules: add a file name and line number to act_rules

These ones are passed on rule creation for the sole purpose of being
reported in "show sess", which is not done yet. For now the entries
are allocated upon rule creation and freed in free_act_rules().
This commit is contained in:
Willy Tarreau 2021-10-11 09:13:07 +02:00
parent d535f807bb
commit c9e4868510
3 changed files with 11 additions and 0 deletions

View File

@ -186,6 +186,10 @@ struct act_rule {
void *p[4]; void *p[4];
} act; /* generic pointers to be used by custom actions */ } act; /* generic pointers to be used by custom actions */
} arg; /* arguments used by some actions */ } arg; /* arguments used by some actions */
struct {
char *file; /* file name where the rule appears (or NULL) */
int line; /* line number where the rule appears */
} conf;
}; };
struct action_kw { struct action_kw {

View File

@ -297,6 +297,8 @@ struct act_rule *new_act_rule(enum act_from from, const char *file, int linenum)
if (!rule) if (!rule)
return NULL; return NULL;
rule->from = from; rule->from = from;
rule->conf.file = file ? strdup(file) : NULL;
rule->conf.line = linenum;
return rule; return rule;
} }
@ -309,6 +311,7 @@ void free_act_rules(struct list *rules)
free_acl_cond(rule->cond); free_acl_cond(rule->cond);
if (rule->release_ptr) if (rule->release_ptr)
rule->release_ptr(rule); rule->release_ptr(rule);
free(rule->conf.file);
free(rule); free(rule);
} }
} }

View File

@ -919,6 +919,8 @@ static int vars_parse_global_set_var(char **args, int section_type, struct proxy
struct act_rule rule = { struct act_rule rule = {
.arg.vars.scope = SCOPE_PROC, .arg.vars.scope = SCOPE_PROC,
.from = ACT_F_CFG_PARSER, .from = ACT_F_CFG_PARSER,
.conf.file = (char *)file,
.conf.line = line,
}; };
enum obj_type objt = OBJ_TYPE_NONE; enum obj_type objt = OBJ_TYPE_NONE;
struct session *sess = NULL; struct session *sess = NULL;
@ -1038,6 +1040,8 @@ static int vars_parse_cli_set_var(char **args, char *payload, struct appctx *app
struct act_rule rule = { struct act_rule rule = {
.arg.vars.scope = SCOPE_PROC, .arg.vars.scope = SCOPE_PROC,
.from = ACT_F_CLI_PARSER, .from = ACT_F_CLI_PARSER,
.conf.file = "CLI",
.conf.line = 0,
}; };
enum obj_type objt = OBJ_TYPE_NONE; enum obj_type objt = OBJ_TYPE_NONE;
struct session *sess = NULL; struct session *sess = NULL;