diff --git a/include/proto/proxy.h b/include/proto/proxy.h index 2b649665e..a0fa454d4 100644 --- a/include/proto/proxy.h +++ b/include/proto/proxy.h @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include @@ -56,6 +57,7 @@ int proxy_cfg_ensure_no_http(struct proxy *curproxy); void init_new_proxy(struct proxy *p); int get_backend_server(const char *bk_name, const char *sv_name, struct proxy **bk, struct server **sv); +struct proxy *cli_find_frontend(struct appctx *appctx, const char *arg); /* * This function returns a string containing the type of the proxy in a format diff --git a/src/proxy.c b/src/proxy.c index dc6d3e1c6..86b8384a5 100644 --- a/src/proxy.c +++ b/src/proxy.c @@ -29,6 +29,7 @@ #include #include +#include #include #include #include @@ -1216,6 +1217,29 @@ static struct cfg_kw_list cfg_kws = {ILH, { { 0, NULL, NULL }, }}; +/* Expects to find a frontend named and returns it, otherwise displays various + * adequate error messages and returns NULL. This function is designed to be used by + * functions requiring a frontend on the CLI. + */ +struct proxy *cli_find_frontend(struct appctx *appctx, const char *arg) +{ + struct proxy *px; + + if (!*arg) { + appctx->ctx.cli.msg = "A frontend name is expected.\n"; + appctx->st0 = STAT_CLI_PRINT; + return NULL; + } + + px = proxy_fe_by_name(arg); + if (!px) { + appctx->ctx.cli.msg = "No such frontend.\n"; + appctx->st0 = STAT_CLI_PRINT; + return NULL; + } + return px; +} + __attribute__((constructor)) static void __proxy_module_init(void) {