From: Aurelien DARRAGON Date: Tue, 1 Oct 2024 15:55:55 +0000 (+0200) Subject: MINOR: log: add do_log_parse_act() helper func X-Git-Tag: v3.1-dev10~111 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0e271f1d2a29089a566f1f30323d92cda6988506;p=thirdparty%2Fhaproxy.git MINOR: log: add do_log_parse_act() helper func Function may be used from places where per-context actions are usually registered (tcp_act.c, http_act.c, quic_rules.c.. to name a few) in order to expose the do_log() action. --- diff --git a/include/haproxy/log.h b/include/haproxy/log.h index 7da9681f53..99340a67c8 100644 --- a/include/haproxy/log.h +++ b/include/haproxy/log.h @@ -105,6 +105,13 @@ static inline int sess_build_logline(struct session *sess, struct stream *s, cha log_orig(LOG_ORIG_UNSPEC, LOG_ORIG_FL_NONE)); } +/* Parse a "do_log" action. It doesn't take any argument + * May be used from places where per-context actions are usually registered + */ +enum act_parse_ret do_log_parse_act(enum log_orig_id id, + const char **args, int *orig_arg, struct proxy *px, + struct act_rule *rule, char **err); + /* opportunistic log when session already exists ( may be null) */ void do_log(struct session *sess, struct stream *s, struct log_orig origin); diff --git a/src/log.c b/src/log.c index c4800db06a..71ce020b79 100644 --- a/src/log.c +++ b/src/log.c @@ -6781,6 +6781,36 @@ static int px_parse_log_steps(char **args, int section_type, struct proxy *curpx return retval; } +/* needed by do_log_parse_act() */ +static enum act_return do_log_action(struct act_rule *rule, struct proxy *px, + struct session *sess, struct stream *s, int flags) +{ + /* do_log() expects valid session pointer */ + BUG_ON(sess == NULL); + + do_log(sess, s, log_orig(rule->arg.expr_int.value, LOG_ORIG_FL_NONE)); + return ACT_RET_CONT; +} + +/* Parse a "do_log" action. It doesn't take any argument + * May be used from places where per-context actions are usually registered + */ +enum act_parse_ret do_log_parse_act(enum log_orig_id id, + const char **args, int *orig_arg, struct proxy *px, + struct act_rule *rule, char **err) +{ + if (*args[*orig_arg]) { + memprintf(err, "doesn't expects any argument"); + return ACT_RET_PRS_ERR; + } + + rule->action_ptr = do_log_action; + rule->action = ACT_CUSTOM; + rule->release_ptr = NULL; + rule->arg.expr_int.value = id; + return ACT_RET_PRS_OK; +} + static struct cfg_kw_list cfg_kws_li = {ILH, { { CFG_LISTEN, "log-steps", px_parse_log_steps }, { 0, NULL, NULL },