From c9e48685101f9d4db03a43a976154ffa2c2df666 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Mon, 11 Oct 2021 09:13:07 +0200 Subject: [PATCH] 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(). --- include/haproxy/action-t.h | 4 ++++ src/action.c | 3 +++ src/vars.c | 4 ++++ 3 files changed, 11 insertions(+) diff --git a/include/haproxy/action-t.h b/include/haproxy/action-t.h index 08f250897c..45d2bd144b 100644 --- a/include/haproxy/action-t.h +++ b/include/haproxy/action-t.h @@ -186,6 +186,10 @@ struct act_rule { void *p[4]; } act; /* generic pointers to be used by custom 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 { diff --git a/src/action.c b/src/action.c index a363dea803..ba465a2532 100644 --- a/src/action.c +++ b/src/action.c @@ -297,6 +297,8 @@ struct act_rule *new_act_rule(enum act_from from, const char *file, int linenum) if (!rule) return NULL; rule->from = from; + rule->conf.file = file ? strdup(file) : NULL; + rule->conf.line = linenum; return rule; } @@ -309,6 +311,7 @@ void free_act_rules(struct list *rules) free_acl_cond(rule->cond); if (rule->release_ptr) rule->release_ptr(rule); + free(rule->conf.file); free(rule); } } diff --git a/src/vars.c b/src/vars.c index 087bd1f5ba..10f7d82d15 100644 --- a/src/vars.c +++ b/src/vars.c @@ -919,6 +919,8 @@ static int vars_parse_global_set_var(char **args, int section_type, struct proxy struct act_rule rule = { .arg.vars.scope = SCOPE_PROC, .from = ACT_F_CFG_PARSER, + .conf.file = (char *)file, + .conf.line = line, }; enum obj_type objt = OBJ_TYPE_NONE; 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 = { .arg.vars.scope = SCOPE_PROC, .from = ACT_F_CLI_PARSER, + .conf.file = "CLI", + .conf.line = 0, }; enum obj_type objt = OBJ_TYPE_NONE; struct session *sess = NULL;