From 66989ff4263a61948b2c240ec952b524e6f5890a Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Fri, 9 Feb 2024 20:09:59 +0100 Subject: [PATCH] MINOR: cli/wait: also pass up to 4 arguments to the external conditions Conditions will need to have context, arguments etc from the command line. Since these will vary with time (otherwise we wouldn't wait), let's just pass them as text (possibly pre-processed). We're starting with 4 strings that are expected to be allocated by strdup() and are always sent to free() upon release. --- include/haproxy/cli-t.h | 1 + src/cli.c | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/include/haproxy/cli-t.h b/include/haproxy/cli-t.h index bc868683c..4a11893ed 100644 --- a/include/haproxy/cli-t.h +++ b/include/haproxy/cli-t.h @@ -101,6 +101,7 @@ struct cli_wait_ctx { uint start, deadline; // both are in ticks. enum cli_wait_cond cond; // CLI_WAIT_COND_* enum cli_wait_err error; // CLI_WAIT_ERR_* + char *args[4]; // up to 4 args taken at parse time, all strduped const char *msg; // static error message for failures if not NULL }; diff --git a/src/cli.c b/src/cli.c index 1cede7729..786f2a24e 100644 --- a/src/cli.c +++ b/src/cli.c @@ -2116,6 +2116,7 @@ static void cli_release_wait(struct appctx *appctx) { struct cli_wait_ctx *ctx = appctx->svcctx; const char *msg; + int i; switch (ctx->error) { case CLI_WAIT_ERR_EXP: msg = "Wait delay expired.\n"; break; @@ -2124,6 +2125,9 @@ static void cli_release_wait(struct appctx *appctx) default: msg = "Done.\n"; break; } + for (i = 0; i < sizeof(ctx->args) / sizeof(ctx->args[0]); i++) + ha_free(&ctx->args[i]); + if (ctx->error == CLI_WAIT_ERR_DONE) cli_msg(appctx, LOG_INFO, msg); else