From 2100b383ab849ae88090909b1654afdf87aa7885 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Wed, 30 Mar 2022 11:19:22 +0200 Subject: [PATCH] MINOR: action: add a function to dump the list of actions for a ruleset The new function dump_act_rules() now dumps the list of actions supported by a ruleset. These actions are alphanumerically sorted first so that the produced output is easy to compare. --- include/haproxy/action.h | 1 + src/action.c | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/include/haproxy/action.h b/include/haproxy/action.h index eed440d8e..8a35664f4 100644 --- a/include/haproxy/action.h +++ b/include/haproxy/action.h @@ -114,5 +114,6 @@ static inline void release_timeout_action(struct act_rule *rule) struct act_rule *new_act_rule(enum act_from from, const char *file, int linenum); void free_act_rules(struct list *rules); +void dump_act_rules(const struct list *rules, const char *pfx); #endif /* _HAPROXY_ACTION_H */ diff --git a/src/action.c b/src/action.c index 74f5387b9..4ee23c547 100644 --- a/src/action.c +++ b/src/action.c @@ -321,3 +321,28 @@ void free_act_rules(struct list *rules) free_act_rule(rule); } } + +/* dumps all known actions registered in action rules after prefix + * to stdout. The actions are alphabetically sorted. Those with the + * KWF_MATCH_PREFIX flag have their name suffixed with '*'. + */ +void dump_act_rules(const struct list *rules, const char *pfx) +{ + const struct action_kw *akwp, *akwn; + struct action_kw_list *akwl; + int index; + + for (akwn = akwp = NULL;; akwp = akwn) { + list_for_each_entry(akwl, rules, list) { + for (index = 0; akwl->kw[index].kw != NULL; index++) + if (strordered(akwp ? akwp->kw : NULL, + akwl->kw[index].kw, + akwn != akwp ? akwn->kw : NULL)) + akwn = &akwl->kw[index]; + } + if (akwn == akwp) + break; + printf("%s%s%s\n", pfx ? pfx : "", akwn->kw, + (akwn->flags & KWF_MATCH_PREFIX) ? "*" : ""); + } +}