CLEANUP: cli: replace all occurrences of manual handling of return messages
There were 221 places where a status message or an error message were built
to be returned on the CLI. All of them were replaced to use cli_err(),
cli_msg(), cli_dynerr() or cli_dynmsg() depending on what was expected.
This removed a lot of duplicated code because most of the times, 4 lines
are replaced by a single, safer one.
diff --git a/src/activity.c b/src/activity.c
index 5ffa662..8844e0c 100644
--- a/src/activity.c
+++ b/src/activity.c
@@ -67,12 +67,8 @@
if (!cli_has_level(appctx, ACCESS_LVL_ADMIN))
return 1;
- if (strcmp(args[2], "tasks") != 0) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Expects 'tasks'.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (strcmp(args[2], "tasks") != 0)
+ return cli_err(appctx, "Expects 'tasks'.\n");
if (strcmp(args[3], "on") == 0) {
unsigned int old = profiling;
@@ -89,12 +85,9 @@
while (!_HA_ATOMIC_CAS(&profiling, &old, (old & ~HA_PROF_TASKS_MASK) | HA_PROF_TASKS_OFF))
;
}
- else {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Expects 'on', 'auto', or 'off'.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ else
+ return cli_err(appctx, "Expects 'on', 'auto', or 'off'.\n");
+
return 1;
}
diff --git a/src/cli.c b/src/cli.c
index 1f6a845..1805671 100644
--- a/src/cli.c
+++ b/src/cli.c
@@ -41,7 +41,6 @@
#include <common/base64.h>
#include <types/applet.h>
-#include <types/cli.h>
#include <types/global.h>
#include <types/dns.h>
#include <types/stats.h>
@@ -50,6 +49,7 @@
#include <proto/backend.h>
#include <proto/channel.h>
#include <proto/checks.h>
+#include <proto/cli.h>
#include <proto/compression.h>
#include <proto/stats.h>
#include <proto/fd.h>
@@ -457,9 +457,7 @@
{
if ((appctx->cli_level & ACCESS_LVL_MASK) < level) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = stats_permission_denied_msg;
- appctx->st0 = CLI_ST_PRINT;
+ cli_err(appctx, stats_permission_denied_msg);
return 0;
}
return 1;
@@ -1303,12 +1301,9 @@
(*var)[len] == '=')
break;
}
- if (!*var) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Variable not found\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (!*var)
+ return cli_err(appctx, "Variable not found\n");
+
appctx->st2 = STAT_ST_END;
}
appctx->ctx.cli.p0 = var;
@@ -1343,31 +1338,19 @@
unsigned timeout;
const char *res;
- if (!*args[3]) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Expects an integer value.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (!*args[3])
+ return cli_err(appctx, "Expects an integer value.\n");
res = parse_time_err(args[3], &timeout, TIME_UNIT_S);
- if (res || timeout < 1) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Invalid timeout value.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (res || timeout < 1)
+ return cli_err(appctx, "Invalid timeout value.\n");
s->req.rto = s->res.wto = 1 + MS_TO_TICKS(timeout*1000);
task_wakeup(s->task, TASK_WOKEN_MSG); // recompute timeouts
return 1;
}
- else {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "'set timeout' only supports 'cli'.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+
+ return cli_err(appctx, "'set timeout' only supports 'cli'.\n");
}
/* parse a "set maxconn global" command. It always returns 1. */
@@ -1378,20 +1361,12 @@
if (!cli_has_level(appctx, ACCESS_LVL_ADMIN))
return 1;
- if (!*args[3]) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Expects an integer value.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (!*args[3])
+ return cli_err(appctx, "Expects an integer value.\n");
v = atoi(args[3]);
- if (v > global.hardmaxconn) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Value out of range.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (v > global.hardmaxconn)
+ return cli_err(appctx, "Value out of range.\n");
/* check for unlimited values */
if (v <= 0)
@@ -1429,30 +1404,21 @@
if (*args[2] && set_severity_output(&appctx->cli_severity_output, args[2]))
return 0;
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "one of 'none', 'number', 'string' is a required argument\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
+ return cli_err(appctx, "one of 'none', 'number', 'string' is a required argument\n");
}
/* show the level of the current CLI session */
static int cli_parse_show_lvl(char **args, char *payload, struct appctx *appctx, void *private)
{
-
- appctx->ctx.cli.severity = LOG_INFO;
if ((appctx->cli_level & ACCESS_LVL_MASK) == ACCESS_LVL_ADMIN)
- appctx->ctx.cli.msg = "admin\n";
+ return cli_msg(appctx, LOG_INFO, "admin\n");
else if ((appctx->cli_level & ACCESS_LVL_MASK) == ACCESS_LVL_OPER)
- appctx->ctx.cli.msg = "operator\n";
+ return cli_msg(appctx, LOG_INFO, "operator\n");
else if ((appctx->cli_level & ACCESS_LVL_MASK) == ACCESS_LVL_USER)
- appctx->ctx.cli.msg = "user\n";
+ return cli_msg(appctx, LOG_INFO, "user\n");
else
- appctx->ctx.cli.msg = "unknown\n";
-
- appctx->st0 = CLI_ST_PRINT;
- return 1;
-
+ return cli_msg(appctx, LOG_INFO, "unknown\n");
}
/* parse and set the CLI level dynamically */
@@ -1508,33 +1474,22 @@
mul = 1024;
}
else {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg =
+ return cli_err(appctx,
"'set rate-limit' only supports :\n"
" - 'connections global' to set the per-process maximum connection rate\n"
" - 'sessions global' to set the per-process maximum session rate\n"
#ifdef USE_OPENSSL
" - 'ssl-sessions global' to set the per-process maximum SSL session rate\n"
#endif
- " - 'http-compression global' to set the per-process maximum compression speed in kB/s\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
+ " - 'http-compression global' to set the per-process maximum compression speed in kB/s\n");
}
- if (!*args[4]) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Expects an integer value.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (!*args[4])
+ return cli_err(appctx, "Expects an integer value.\n");
v = atoi(args[4]);
- if (v < 0) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Value out of range.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (v < 0)
+ return cli_err(appctx, "Value out of range.\n");
*res = v * mul;
diff --git a/src/debug.c b/src/debug.c
index 0522f88..f378cd9 100644
--- a/src/debug.c
+++ b/src/debug.c
@@ -189,32 +189,18 @@
if (!cli_has_level(appctx, ACCESS_LVL_ADMIN))
return 1;
- if (!*args[3]) {
- appctx->ctx.cli.msg = "Missing file descriptor number.\n";
- goto reterr;
- }
+ if (!*args[3])
+ return cli_err(appctx, "Missing file descriptor number.\n");
fd = atoi(args[3]);
- if (fd < 0 || fd >= global.maxsock) {
- appctx->ctx.cli.msg = "File descriptor out of range.\n";
- goto reterr;
- }
+ if (fd < 0 || fd >= global.maxsock)
+ return cli_err(appctx, "File descriptor out of range.\n");
- if (!fdtab[fd].owner) {
- appctx->ctx.cli.msg = "File descriptor was already closed.\n";
- goto retinfo;
- }
+ if (!fdtab[fd].owner)
+ return cli_msg(appctx, LOG_INFO, "File descriptor was already closed.\n");
fd_delete(fd);
return 1;
- retinfo:
- appctx->ctx.cli.severity = LOG_INFO;
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- reterr:
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->st0 = CLI_ST_PRINT;
- return 1;
}
/* parse a "debug dev delay" command. It always returns 1. */
@@ -293,12 +279,8 @@
}
f = popen(trash.area, "re");
- if (!f) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Failed to execute command.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (!f)
+ return cli_err(appctx, "Failed to execute command.\n");
chunk_reset(&trash);
while (1) {
@@ -314,10 +296,7 @@
fclose(f);
trash.area[trash.data] = 0;
- appctx->ctx.cli.severity = LOG_INFO;
- appctx->ctx.cli.msg = trash.area;
- appctx->st0 = CLI_ST_PRINT;
- return 1;
+ return cli_msg(appctx, LOG_INFO, trash.area);
}
/* parse a "debug dev hex" command. It always returns 1. */
@@ -328,16 +307,12 @@
if (!cli_has_level(appctx, ACCESS_LVL_ADMIN))
return 1;
- if (!*args[3]) {
- appctx->ctx.cli.msg = "Missing memory address to dump from.\n";
- goto reterr;
- }
+ if (!*args[3])
+ return cli_err(appctx, "Missing memory address to dump from.\n");
start = strtoul(args[3], NULL, 0);
- if (!start) {
- appctx->ctx.cli.msg = "Will not dump from NULL address.\n";
- goto reterr;
- }
+ if (!start)
+ return cli_err(appctx, "Will not dump from NULL address.\n");
/* by default, dump ~128 till next block of 16 */
len = strtoul(args[4], NULL, 0);
@@ -347,14 +322,7 @@
chunk_reset(&trash);
dump_hex(&trash, " ", (const void *)start, len, 1);
trash.area[trash.data] = 0;
- appctx->ctx.cli.severity = LOG_INFO;
- appctx->ctx.cli.msg = trash.area;
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- reterr:
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->st0 = CLI_ST_PRINT;
- return 1;
+ return cli_msg(appctx, LOG_INFO, trash.area);
}
/* parse a "debug dev tkill" command. It always returns 1. */
@@ -369,12 +337,8 @@
if (*args[3])
thr = atoi(args[3]);
- if (thr < 0 || thr > global.nbthread) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Thread number out of range (use 0 for current).\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (thr < 0 || thr > global.nbthread)
+ return cli_err(appctx, "Thread number out of range (use 0 for current).\n");
if (*args[4])
sig = atoi(args[4]);
diff --git a/src/dns.c b/src/dns.c
index d59e96e..ef840e5 100644
--- a/src/dns.c
+++ b/src/dns.c
@@ -2018,12 +2018,8 @@
break;
}
}
- if (appctx->ctx.cli.p0 == NULL) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Can't find that resolvers section\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (appctx->ctx.cli.p0 == NULL)
+ return cli_err(appctx, "Can't find that resolvers section\n");
}
return 0;
}
diff --git a/src/map.c b/src/map.c
index 1a2190d..39a72c9 100644
--- a/src/map.c
+++ b/src/map.c
@@ -599,31 +599,19 @@
/* No parameter. */
if (!*args[2] || !*args[3]) {
- if (appctx->ctx.map.display_flags == PAT_REF_MAP) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Missing map identifier and/or key.\n";
- }
- else {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Missing ACL identifier and/or key.\n";
- }
- appctx->st0 = CLI_ST_PRINT;
- return 1;
+ if (appctx->ctx.map.display_flags == PAT_REF_MAP)
+ return cli_err(appctx, "Missing map identifier and/or key.\n");
+ else
+ return cli_err(appctx, "Missing ACL identifier and/or key.\n");
}
/* lookup into the maps */
appctx->ctx.map.ref = pat_ref_lookup_ref(args[2]);
if (!appctx->ctx.map.ref) {
- if (appctx->ctx.map.display_flags == PAT_REF_MAP) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Unknown map identifier. Please use #<id> or <file>.\n";
- }
- else {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Unknown ACL identifier. Please use #<id> or <file>.\n";
- }
- appctx->st0 = CLI_ST_PRINT;
- return 1;
+ if (appctx->ctx.map.display_flags == PAT_REF_MAP)
+ return cli_err(appctx, "Unknown map identifier. Please use #<id> or <file>.\n");
+ else
+ return cli_err(appctx, "Unknown ACL identifier. Please use #<id> or <file>.\n");
}
/* copy input string. The string must be allocated because
@@ -633,12 +621,8 @@
appctx->ctx.map.chunk.data = strlen(args[3]);
appctx->ctx.map.chunk.size = appctx->ctx.map.chunk.data + 1;
appctx->ctx.map.chunk.area = strdup(args[3]);
- if (!appctx->ctx.map.chunk.area) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Out of memory error.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (!appctx->ctx.map.chunk.area)
+ return cli_err(appctx, "Out of memory error.\n");
return 0;
}
@@ -676,16 +660,10 @@
appctx->ctx.map.ref = pat_ref_lookup_ref(args[2]);
if (!appctx->ctx.map.ref ||
!(appctx->ctx.map.ref->flags & appctx->ctx.map.display_flags)) {
- if (appctx->ctx.map.display_flags == PAT_REF_MAP) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Unknown map identifier. Please use #<id> or <file>.\n";
- }
- else {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Unknown ACL identifier. Please use #<id> or <file>.\n";
- }
- appctx->st0 = CLI_ST_PRINT;
- return 1;
+ if (appctx->ctx.map.display_flags == PAT_REF_MAP)
+ return cli_err(appctx, "Unknown map identifier. Please use #<id> or <file>.\n");
+ else
+ return cli_err(appctx, "Unknown ACL identifier. Please use #<id> or <file>.\n");
}
appctx->io_handler = cli_io_handler_pat_list;
appctx->io_release = cli_release_show_map;
@@ -704,21 +682,13 @@
appctx->ctx.map.display_flags = PAT_REF_MAP;
/* Expect three parameters: map name, key and new value. */
- if (!*args[2] || !*args[3] || !*args[4]) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "'set map' expects three parameters: map identifier, key and value.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (!*args[2] || !*args[3] || !*args[4])
+ return cli_err(appctx, "'set map' expects three parameters: map identifier, key and value.\n");
/* Lookup the reference in the maps. */
appctx->ctx.map.ref = pat_ref_lookup_ref(args[2]);
- if (!appctx->ctx.map.ref) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Unknown map identifier. Please use #<id> or <file>.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (!appctx->ctx.map.ref)
+ return cli_err(appctx, "Unknown map identifier. Please use #<id> or <file>.\n");
/* If the entry identifier start with a '#', it is considered as
* pointer id
@@ -730,38 +700,23 @@
/* Convert argument to integer value. */
conv = strtoll(&args[3][1], &error, 16);
- if (*error != '\0') {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Malformed identifier. Please use #<id> or <file>.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (*error != '\0')
+ return cli_err(appctx, "Malformed identifier. Please use #<id> or <file>.\n");
/* Convert and check integer to pointer. */
ref = (struct pat_ref_elt *)(long)conv;
- if ((long long int)(long)ref != conv) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Malformed identifier. Please use #<id> or <file>.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if ((long long int)(long)ref != conv)
+ return cli_err(appctx, "Malformed identifier. Please use #<id> or <file>.\n");
/* Try to modify the entry. */
err = NULL;
HA_SPIN_LOCK(PATREF_LOCK, &appctx->ctx.map.ref->lock);
if (!pat_ref_set_by_id(appctx->ctx.map.ref, ref, args[4], &err)) {
HA_SPIN_UNLOCK(PATREF_LOCK, &appctx->ctx.map.ref->lock);
- if (err) {
- memprintf(&err, "%s.\n", err);
- appctx->ctx.cli.err = err;
- appctx->st0 = CLI_ST_PRINT_FREE;
- }
- else {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Failed to update an entry.\n";
- appctx->st0 = CLI_ST_PRINT;
- }
- return 1;
+ if (err)
+ return cli_dynerr(appctx, memprintf(&err, "%s.\n", err));
+ else
+ return cli_err(appctx, "Failed to update an entry.\n");
}
HA_SPIN_UNLOCK(PATREF_LOCK, &appctx->ctx.map.ref->lock);
}
@@ -773,17 +728,10 @@
HA_SPIN_LOCK(PATREF_LOCK, &appctx->ctx.map.ref->lock);
if (!pat_ref_set(appctx->ctx.map.ref, args[3], args[4], &err)) {
HA_SPIN_UNLOCK(PATREF_LOCK, &appctx->ctx.map.ref->lock);
- if (err) {
- memprintf(&err, "%s.\n", err);
- appctx->ctx.cli.err = err;
- appctx->st0 = CLI_ST_PRINT_FREE;
- }
- else {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Failed to update an entry.\n";
- appctx->st0 = CLI_ST_PRINT;
- }
- return 1;
+ if (err)
+ return cli_dynerr(appctx, memprintf(&err, "%s.\n", err));
+ else
+ return cli_err(appctx, "Failed to update an entry.\n");
}
HA_SPIN_UNLOCK(PATREF_LOCK, &appctx->ctx.map.ref->lock);
}
@@ -829,35 +777,21 @@
*/
if (appctx->ctx.map.display_flags == PAT_REF_MAP) {
if ((!payload && (!*args[2] || !*args[3] || !*args[4])) ||
- (payload && !*args[2])) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "'add map' expects three parameters (map identifier, key and value) or one parameter (map identifier) and a payload\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ (payload && !*args[2]))
+ return cli_err(appctx,
+ "'add map' expects three parameters (map identifier, key and value)"
+ " or one parameter (map identifier) and a payload\n");
}
- else {
- if (!*args[2] || !*args[3]) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "'add acl' expects two parameters: ACL identifier and pattern.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
- }
+ else if (!*args[2] || !*args[3])
+ return cli_err(appctx, "'add acl' expects two parameters: ACL identifier and pattern.\n");
/* Lookup for the reference. */
appctx->ctx.map.ref = pat_ref_lookup_ref(args[2]);
if (!appctx->ctx.map.ref) {
- if (appctx->ctx.map.display_flags == PAT_REF_MAP) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Unknown map identifier. Please use #<id> or <file>.\n";
- }
- else {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Unknown ACL identifier. Please use #<id> or <file>.\n";
- }
- appctx->st0 = CLI_ST_PRINT;
- return 1;
+ if (appctx->ctx.map.display_flags == PAT_REF_MAP)
+ return cli_err(appctx, "Unknown map identifier. Please use #<id> or <file>.\n");
+ else
+ return cli_err(appctx, "Unknown ACL identifier. Please use #<id> or <file>.\n");
}
/* The command "add acl" is prohibited if the reference
@@ -865,29 +799,19 @@
*/
if ((appctx->ctx.map.display_flags & PAT_REF_ACL) &&
(appctx->ctx.map.ref->flags & PAT_REF_SMP)) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "This ACL is shared with a map containing samples. "
- "You must use the command 'add map' to add values.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
+ return cli_err(appctx,
+ "This ACL is shared with a map containing samples. "
+ "You must use the command 'add map' to add values.\n");
}
-
/* Add value(s). */
err = NULL;
if (!payload) {
ret = map_add_key_value(appctx, args[3], args[4], &err);
if (!ret) {
- if (err) {
- memprintf(&err, "%s.\n", err);
- appctx->ctx.cli.err = err;
- appctx->st0 = CLI_ST_PRINT_FREE;
- }
- else {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Failed to add an entry.\n";
- appctx->st0 = CLI_ST_PRINT;
- }
- return 1;
+ if (err)
+ return cli_dynerr(appctx, memprintf(&err, "%s.\n", err));
+ else
+ return cli_err(appctx, "Failed to add an entry.\n");
}
}
else {
@@ -902,12 +826,9 @@
l = strcspn(key, " \t");
payload += l;
- if (!*payload && appctx->ctx.map.display_flags == PAT_REF_MAP) {
- memprintf(&err, "Missing value for key '%s'.\n", key);
- appctx->ctx.cli.err = err;
- appctx->st0 = CLI_ST_PRINT_FREE;
- return 1;
- }
+ if (!*payload && appctx->ctx.map.display_flags == PAT_REF_MAP)
+ return cli_dynerr(appctx, memprintf(&err, "Missing value for key '%s'.\n", key));
+
key[l] = 0;
payload++;
@@ -922,17 +843,10 @@
ret = map_add_key_value(appctx, key, value, &err);
if (!ret) {
- if (err) {
- memprintf(&err, "%s.\n", err);
- appctx->ctx.cli.err = err;
- appctx->st0 = CLI_ST_PRINT_FREE;
- }
- else {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Failed to add a key.\n";
- appctx->st0 = CLI_ST_PRINT;
- }
- return 1;
+ if (err)
+ return cli_dynerr(appctx, memprintf(&err, "%s.\n", err));
+ else
+ return cli_err(appctx, "Failed to add a key.\n");
}
}
}
@@ -953,33 +867,18 @@
appctx->ctx.map.display_flags = PAT_REF_ACL;
/* Expect two parameters: map name and key. */
- if (appctx->ctx.map.display_flags == PAT_REF_MAP) {
- if (!*args[2] || !*args[3]) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "This command expects two parameters: map identifier and key.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
- }
-
- else {
- if (!*args[2] || !*args[3]) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "This command expects two parameters: ACL identifier and key.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (!*args[2] || !*args[3]) {
+ if (appctx->ctx.map.display_flags == PAT_REF_MAP)
+ return cli_err(appctx, "This command expects two parameters: map identifier and key.\n");
+ else
+ return cli_err(appctx, "This command expects two parameters: ACL identifier and key.\n");
}
/* Lookup the reference in the maps. */
appctx->ctx.map.ref = pat_ref_lookup_ref(args[2]);
if (!appctx->ctx.map.ref ||
- !(appctx->ctx.map.ref->flags & appctx->ctx.map.display_flags)) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Unknown map identifier. Please use #<id> or <file>.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ !(appctx->ctx.map.ref->flags & appctx->ctx.map.display_flags))
+ return cli_err(appctx, "Unknown map identifier. Please use #<id> or <file>.\n");
/* If the entry identifier start with a '#', it is considered as
* pointer id
@@ -991,31 +890,20 @@
/* Convert argument to integer value. */
conv = strtoll(&args[3][1], &error, 16);
- if (*error != '\0') {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Malformed identifier. Please use #<id> or <file>.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (*error != '\0')
+ return cli_err(appctx, "Malformed identifier. Please use #<id> or <file>.\n");
/* Convert and check integer to pointer. */
ref = (struct pat_ref_elt *)(long)conv;
- if ((long long int)(long)ref != conv) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Malformed identifier. Please use #<id> or <file>.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if ((long long int)(long)ref != conv)
+ return cli_err(appctx, "Malformed identifier. Please use #<id> or <file>.\n");
/* Try to delete the entry. */
HA_SPIN_LOCK(PATREF_LOCK, &appctx->ctx.map.ref->lock);
if (!pat_ref_delete_by_id(appctx->ctx.map.ref, ref)) {
HA_SPIN_UNLOCK(PATREF_LOCK, &appctx->ctx.map.ref->lock);
/* The entry is not found, send message. */
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Key not found.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
+ return cli_err(appctx, "Key not found.\n");
}
HA_SPIN_UNLOCK(PATREF_LOCK, &appctx->ctx.map.ref->lock);
}
@@ -1027,10 +915,7 @@
if (!pat_ref_delete(appctx->ctx.map.ref, args[3])) {
HA_SPIN_UNLOCK(PATREF_LOCK, &appctx->ctx.map.ref->lock);
/* The entry is not found, send message. */
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Key not found.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
+ return cli_err(appctx, "Key not found.\n");
}
HA_SPIN_UNLOCK(PATREF_LOCK, &appctx->ctx.map.ref->lock);
}
@@ -1052,32 +937,20 @@
/* no parameter */
if (!*args[2]) {
- if (appctx->ctx.map.display_flags == PAT_REF_MAP) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Missing map identifier.\n";
- }
- else {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Missing ACL identifier.\n";
- }
- appctx->st0 = CLI_ST_PRINT;
- return 1;
+ if (appctx->ctx.map.display_flags == PAT_REF_MAP)
+ return cli_err(appctx, "Missing map identifier.\n");
+ else
+ return cli_err(appctx, "Missing ACL identifier.\n");
}
/* lookup into the refs and check the map flag */
appctx->ctx.map.ref = pat_ref_lookup_ref(args[2]);
if (!appctx->ctx.map.ref ||
!(appctx->ctx.map.ref->flags & appctx->ctx.map.display_flags)) {
- if (appctx->ctx.map.display_flags == PAT_REF_MAP) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Unknown map identifier. Please use #<id> or <file>.\n";
- }
- else {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Unknown ACL identifier. Please use #<id> or <file>.\n";
- }
- appctx->st0 = CLI_ST_PRINT;
- return 1;
+ if (appctx->ctx.map.display_flags == PAT_REF_MAP)
+ return cli_err(appctx, "Unknown map identifier. Please use #<id> or <file>.\n");
+ else
+ return cli_err(appctx, "Unknown ACL identifier. Please use #<id> or <file>.\n");
}
/* Clear all. */
diff --git a/src/peers.c b/src/peers.c
index cb6998c..4695b5e 100644
--- a/src/peers.c
+++ b/src/peers.c
@@ -3015,12 +3015,8 @@
}
}
- if (!p) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "No such peers\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (!p)
+ return cli_err(appctx, "No such peers\n");
}
return 0;
diff --git a/src/proxy.c b/src/proxy.c
index 9d99ade..af4809f 100644
--- a/src/proxy.c
+++ b/src/proxy.c
@@ -1681,17 +1681,13 @@
struct proxy *px;
if (!*arg) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "A frontend name is expected.\n";
- appctx->st0 = CLI_ST_PRINT;
+ cli_err(appctx, "A frontend name is expected.\n");
return NULL;
}
px = proxy_fe_by_name(arg);
if (!px) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "No such frontend.\n";
- appctx->st0 = CLI_ST_PRINT;
+ cli_err(appctx, "No such frontend.\n");
return NULL;
}
return px;
@@ -1706,17 +1702,13 @@
struct proxy *px;
if (!*arg) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "A backend name is expected.\n";
- appctx->st0 = CLI_ST_PRINT;
+ cli_err(appctx, "A backend name is expected.\n");
return NULL;
}
px = proxy_be_by_name(arg);
if (!px) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "No such backend.\n";
- appctx->st0 = CLI_ST_PRINT;
+ cli_err(appctx, "No such backend.\n");
return NULL;
}
return px;
@@ -1736,12 +1728,9 @@
/* read server state from local file */
px = proxy_be_by_name(args[3]);
- if (!px) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Can't find backend.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (!px)
+ return cli_err(appctx, "Can't find backend.\n");
+
appctx->ctx.cli.p0 = px;
appctx->ctx.cli.i0 = px->uuid;
}
@@ -1984,20 +1973,12 @@
if (!px)
return 1;
- if (!*args[4]) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "String value expected.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (!*args[4])
+ return cli_err(appctx, "String value expected.\n");
newkey = strdup(args[4]);
- if (!newkey) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Failed to allocate memory.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (!newkey)
+ return cli_err(appctx, "Failed to allocate memory.\n");
/* Note: this lock is to make sure this doesn't change while another
* thread is in srv_set_dyncookie().
@@ -2033,20 +2014,12 @@
if (!px)
return 1;
- if (!*args[4]) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Integer value expected.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (!*args[4])
+ return cli_err(appctx, "Integer value expected.\n");
v = atoi(args[4]);
- if (v < 0) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Value out of range.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (v < 0)
+ return cli_err(appctx, "Value out of range.\n");
/* OK, the value is fine, so we assign it to the proxy and to all of
* its listeners. The blocked ones will be dequeued.
@@ -2082,12 +2055,8 @@
if (!px)
return 1;
- if (px->state == PR_STSTOPPED) {
- appctx->ctx.cli.severity = LOG_NOTICE;
- appctx->ctx.cli.msg = "Frontend was already shut down.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (px->state == PR_STSTOPPED)
+ return cli_msg(appctx, LOG_NOTICE, "Frontend was already shut down.\n");
ha_warning("Proxy %s stopped (FE: %lld conns, BE: %lld conns).\n",
px->id, px->fe_counters.cum_conn, px->be_counters.cum_conn);
@@ -2114,30 +2083,19 @@
if (!px)
return 1;
- if (px->state == PR_STSTOPPED) {
- appctx->ctx.cli.severity = LOG_NOTICE;
- appctx->ctx.cli.msg = "Frontend was previously shut down, cannot disable.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (px->state == PR_STSTOPPED)
+ return cli_msg(appctx, LOG_NOTICE, "Frontend was previously shut down, cannot disable.\n");
- if (px->state == PR_STPAUSED) {
- appctx->ctx.cli.severity = LOG_NOTICE;
- appctx->ctx.cli.msg = "Frontend is already disabled.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (px->state == PR_STPAUSED)
+ return cli_msg(appctx, LOG_NOTICE, "Frontend is already disabled.\n");
HA_SPIN_LOCK(PROXY_LOCK, &px->lock);
ret = pause_proxy(px);
HA_SPIN_UNLOCK(PROXY_LOCK, &px->lock);
- if (!ret) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Failed to pause frontend, check logs for precise cause.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (!ret)
+ return cli_err(appctx, "Failed to pause frontend, check logs for precise cause.\n");
+
return 1;
}
@@ -2157,30 +2115,18 @@
if (!px)
return 1;
- if (px->state == PR_STSTOPPED) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Frontend was previously shut down, cannot enable.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (px->state == PR_STSTOPPED)
+ return cli_err(appctx, "Frontend was previously shut down, cannot enable.\n");
- if (px->state != PR_STPAUSED) {
- appctx->ctx.cli.severity = LOG_NOTICE;
- appctx->ctx.cli.msg = "Frontend is already enabled.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (px->state != PR_STPAUSED)
+ return cli_msg(appctx, LOG_NOTICE, "Frontend is already enabled.\n");
HA_SPIN_LOCK(PROXY_LOCK, &px->lock);
ret = resume_proxy(px);
HA_SPIN_UNLOCK(PROXY_LOCK, &px->lock);
- if (!ret) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Failed to resume frontend, check logs for precise cause (port conflict?).\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (!ret)
+ return cli_err(appctx, "Failed to resume frontend, check logs for precise cause (port conflict?).\n");
return 1;
}
@@ -2201,12 +2147,8 @@
else
appctx->ctx.errors.iid = atoi(args[2]);
- if (!appctx->ctx.errors.iid) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "No such proxy.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (!appctx->ctx.errors.iid)
+ return cli_err(appctx, "No such proxy.\n");
}
else
appctx->ctx.errors.iid = -1; // dump all proxies
diff --git a/src/server.c b/src/server.c
index f95574a..10c4cf6 100644
--- a/src/server.c
+++ b/src/server.c
@@ -4619,23 +4619,17 @@
}
if (!*line || !*arg) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Require 'backend/server'.\n";
- appctx->st0 = CLI_ST_PRINT;
+ cli_err(appctx, "Require 'backend/server'.\n");
return NULL;
}
if (!get_backend_server(arg, line, &px, &sv)) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = px ? "No such server.\n" : "No such backend.\n";
- appctx->st0 = CLI_ST_PRINT;
+ cli_err(appctx, px ? "No such server.\n" : "No such backend.\n");
return NULL;
}
if (px->state == PR_STSTOPPED) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Proxy is disabled.\n";
- appctx->st0 = CLI_ST_PRINT;
+ cli_err(appctx, "Proxy is disabled.\n");
return NULL;
}
@@ -4660,11 +4654,8 @@
if (strcmp(args[3], "weight") == 0) {
warning = server_parse_weight_change_request(sv, args[4]);
- if (warning) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = warning;
- appctx->st0 = CLI_ST_PRINT;
- }
+ if (warning)
+ cli_err(appctx, warning);
}
else if (strcmp(args[3], "state") == 0) {
if (strcmp(args[4], "ready") == 0)
@@ -4673,18 +4664,12 @@
srv_adm_set_drain(sv);
else if (strcmp(args[4], "maint") == 0)
srv_adm_set_maint(sv);
- else {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "'set server <srv> state' expects 'ready', 'drain' and 'maint'.\n";
- appctx->st0 = CLI_ST_PRINT;
- }
+ else
+ cli_err(appctx, "'set server <srv> state' expects 'ready', 'drain' and 'maint'.\n");
}
else if (strcmp(args[3], "health") == 0) {
- if (sv->track) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "cannot change health on a tracking server.\n";
- appctx->st0 = CLI_ST_PRINT;
- }
+ if (sv->track)
+ cli_err(appctx, "cannot change health on a tracking server.\n");
else if (strcmp(args[4], "up") == 0) {
sv->check.health = sv->check.rise + sv->check.fall - 1;
srv_set_running(sv, "changed from CLI", NULL);
@@ -4697,18 +4682,12 @@
sv->check.health = 0;
srv_set_stopped(sv, "changed from CLI", NULL);
}
- else {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "'set server <srv> health' expects 'up', 'stopping', or 'down'.\n";
- appctx->st0 = CLI_ST_PRINT;
- }
+ else
+ cli_err(appctx, "'set server <srv> health' expects 'up', 'stopping', or 'down'.\n");
}
else if (strcmp(args[3], "agent") == 0) {
- if (!(sv->agent.state & CHK_ST_ENABLED)) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "agent checks are not enabled on this server.\n";
- appctx->st0 = CLI_ST_PRINT;
- }
+ if (!(sv->agent.state & CHK_ST_ENABLED))
+ cli_err(appctx, "agent checks are not enabled on this server.\n");
else if (strcmp(args[4], "up") == 0) {
sv->agent.health = sv->agent.rise + sv->agent.fall - 1;
srv_set_running(sv, "changed from CLI", NULL);
@@ -4717,37 +4696,23 @@
sv->agent.health = 0;
srv_set_stopped(sv, "changed from CLI", NULL);
}
- else {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "'set server <srv> agent' expects 'up' or 'down'.\n";
- appctx->st0 = CLI_ST_PRINT;
- }
+ else
+ cli_err(appctx, "'set server <srv> agent' expects 'up' or 'down'.\n");
}
else if (strcmp(args[3], "agent-addr") == 0) {
- if (!(sv->agent.state & CHK_ST_ENABLED)) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "agent checks are not enabled on this server.\n";
- appctx->st0 = CLI_ST_PRINT;
- } else {
- if (str2ip(args[4], &sv->agent.addr) == NULL) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "incorrect addr address given for agent.\n";
- appctx->st0 = CLI_ST_PRINT;
- }
- }
+ if (!(sv->agent.state & CHK_ST_ENABLED))
+ cli_err(appctx, "agent checks are not enabled on this server.\n");
+ else if (str2ip(args[4], &sv->agent.addr) == NULL)
+ cli_err(appctx, "incorrect addr address given for agent.\n");
}
else if (strcmp(args[3], "agent-send") == 0) {
- if (!(sv->agent.state & CHK_ST_ENABLED)) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "agent checks are not enabled on this server.\n";
- appctx->st0 = CLI_ST_PRINT;
- } else {
+ if (!(sv->agent.state & CHK_ST_ENABLED))
+ cli_err(appctx, "agent checks are not enabled on this server.\n");
+ else {
char *nss = strdup(args[4]);
- if (!nss) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "cannot allocate memory for new string.\n";
- appctx->st0 = CLI_ST_PRINT;
- } else {
+ if (!nss)
+ cli_err(appctx, "cannot allocate memory for new string.\n");
+ else {
free(sv->agent.send_string);
sv->agent.send_string = nss;
sv->agent.send_string_len = strlen(args[4]);
@@ -4757,36 +4722,26 @@
else if (strcmp(args[3], "check-port") == 0) {
int i = 0;
if (strl2irc(args[4], strlen(args[4]), &i) != 0) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "'set server <srv> check-port' expects an integer as argument.\n";
- appctx->st0 = CLI_ST_PRINT;
+ cli_err(appctx, "'set server <srv> check-port' expects an integer as argument.\n");
goto out_unlock;
}
if ((i < 0) || (i > 65535)) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "provided port is not valid.\n";
- appctx->st0 = CLI_ST_PRINT;
+ cli_err(appctx, "provided port is not valid.\n");
goto out_unlock;
}
/* prevent the update of port to 0 if MAPPORTS are in use */
if ((sv->flags & SRV_F_MAPPORTS) && (i == 0)) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "can't unset 'port' since MAPPORTS is in use.\n";
- appctx->st0 = CLI_ST_PRINT;
+ cli_err(appctx, "can't unset 'port' since MAPPORTS is in use.\n");
goto out_unlock;
}
sv->check.port = i;
- appctx->ctx.cli.severity = LOG_NOTICE;
- appctx->ctx.cli.msg = "health check port updated.\n";
- appctx->st0 = CLI_ST_PRINT;
+ cli_msg(appctx, LOG_NOTICE, "health check port updated.\n");
}
else if (strcmp(args[3], "addr") == 0) {
char *addr = NULL;
char *port = NULL;
if (strlen(args[4]) == 0) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "set server <b>/<s> addr requires an address and optionally a port.\n";
- appctx->st0 = CLI_ST_PRINT;
+ cli_err(appctx, "set server <b>/<s> addr requires an address and optionally a port.\n");
goto out_unlock;
}
else {
@@ -4796,31 +4751,23 @@
port = args[6];
}
warning = update_server_addr_port(sv, addr, port, "stats socket command");
- if (warning) {
- appctx->ctx.cli.severity = LOG_WARNING;
- appctx->ctx.cli.msg = warning;
- appctx->st0 = CLI_ST_PRINT;
- }
+ if (warning)
+ cli_msg(appctx, LOG_WARNING, warning);
srv_clr_admin_flag(sv, SRV_ADMF_RMAINT);
}
else if (strcmp(args[3], "fqdn") == 0) {
if (!*args[4]) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "set server <b>/<s> fqdn requires a FQDN.\n";
- appctx->st0 = CLI_ST_PRINT;
+ cli_err(appctx, "set server <b>/<s> fqdn requires a FQDN.\n");
goto out_unlock;
}
warning = update_server_fqdn(sv, args[4], "stats socket command", 0);
- if (warning) {
- appctx->ctx.cli.severity = LOG_WARNING;
- appctx->ctx.cli.msg = warning;
- appctx->st0 = CLI_ST_PRINT;
- }
+ if (warning)
+ cli_msg(appctx, LOG_WARNING, warning);
}
else {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "'set server <srv>' only supports 'agent', 'health', 'state', 'weight', 'addr', 'fqdn' and 'check-port'.\n";
- appctx->st0 = CLI_ST_PRINT;
+ cli_err(appctx,
+ "'set server <srv>' only supports 'agent', 'health', 'state',"
+ " 'weight', 'addr', 'fqdn' and 'check-port'.\n");
}
out_unlock:
HA_SPIN_UNLOCK(SERVER_LOCK, &sv->lock);
@@ -4842,19 +4789,11 @@
break;
}
- if (!*line) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Require 'backend/server'.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (!*line)
+ return cli_err(appctx, "Require 'backend/server'.\n");
- if (!get_backend_server(args[2], line, &px, &sv)) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = px ? "No such server.\n" : "No such backend.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (!get_backend_server(args[2], line, &px, &sv))
+ return cli_err(appctx, px ? "No such server.\n" : "No such backend.\n");
/* return server's effective weight at the moment */
snprintf(trash.area, trash.size, "%d (initial %d)\n", sv->uweight,
@@ -4885,11 +4824,8 @@
HA_SPIN_LOCK(SERVER_LOCK, &sv->lock);
warning = server_parse_weight_change_request(sv, args[3]);
- if (warning) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = warning;
- appctx->st0 = CLI_ST_PRINT;
- }
+ if (warning)
+ cli_err(appctx, warning);
HA_SPIN_UNLOCK(SERVER_LOCK, &sv->lock);
@@ -4915,11 +4851,8 @@
HA_SPIN_LOCK(SERVER_LOCK, &sv->lock);
warning = server_parse_maxconn_change_request(sv, args[4]);
- if (warning) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = warning;
- appctx->st0 = CLI_ST_PRINT;
- }
+ if (warning)
+ cli_err(appctx, warning);
HA_SPIN_UNLOCK(SERVER_LOCK, &sv->lock);
@@ -5004,12 +4937,8 @@
if (!sv)
return 1;
- if (!(sv->agent.state & CHK_ST_CONFIGURED)) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Agent was not configured on this server, cannot enable.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (!(sv->agent.state & CHK_ST_CONFIGURED))
+ return cli_err(appctx, "Agent was not configured on this server, cannot enable.\n");
HA_SPIN_LOCK(SERVER_LOCK, &sv->lock);
sv->agent.state |= CHK_ST_ENABLED;
diff --git a/src/ssl_sock.c b/src/ssl_sock.c
index a95ff65..06da1d9 100644
--- a/src/ssl_sock.c
+++ b/src/ssl_sock.c
@@ -9376,12 +9376,8 @@
appctx->ctx.cli.i0 = 1;
} else {
appctx->ctx.cli.p0 = tlskeys_ref_lookup_ref(args[2]);
- if (!appctx->ctx.cli.p0) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "'show tls-keys' unable to locate referenced filename\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (!appctx->ctx.cli.p0)
+ return cli_err(appctx, "'show tls-keys' unable to locate referenced filename\n");
}
appctx->io_handler = cli_io_handler_tlskeys_entries;
return 0;
@@ -9393,41 +9389,22 @@
int ret;
/* Expect two parameters: the filename and the new new TLS key in encoding */
- if (!*args[3] || !*args[4]) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "'set ssl tls-key' expects a filename and the new TLS key in base64 encoding.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (!*args[3] || !*args[4])
+ return cli_err(appctx, "'set ssl tls-key' expects a filename and the new TLS key in base64 encoding.\n");
ref = tlskeys_ref_lookup_ref(args[3]);
- if (!ref) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "'set ssl tls-key' unable to locate referenced filename\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (!ref)
+ return cli_err(appctx, "'set ssl tls-key' unable to locate referenced filename\n");
ret = base64dec(args[4], strlen(args[4]), trash.area, trash.size);
- if (ret < 0) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "'set ssl tls-key' received invalid base64 encoded TLS key.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (ret < 0)
+ return cli_err(appctx, "'set ssl tls-key' received invalid base64 encoded TLS key.\n");
trash.data = ret;
- if (ssl_sock_update_tlskey_ref(ref, &trash) < 0) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "'set ssl tls-key' received a key of wrong size.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
- appctx->ctx.cli.severity = LOG_INFO;
- appctx->ctx.cli.msg = "TLS ticket key updated!\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
+ if (ssl_sock_update_tlskey_ref(ref, &trash) < 0)
+ return cli_err(appctx, "'set ssl tls-key' received a key of wrong size.\n");
+ return cli_msg(appctx, LOG_INFO, "TLS ticket key updated!\n");
}
#endif
@@ -9441,12 +9418,8 @@
payload = args[3];
/* Expect one parameter: the new response in base64 encoding */
- if (!*payload) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "'set ssl ocsp-response' expects response in base64 encoding.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (!*payload)
+ return cli_err(appctx, "'set ssl ocsp-response' expects response in base64 encoding.\n");
/* remove \r and \n from the payload */
for (i = 0, j = 0; payload[i]; i++) {
@@ -9457,36 +9430,20 @@
payload[j] = 0;
ret = base64dec(payload, j, trash.area, trash.size);
- if (ret < 0) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "'set ssl ocsp-response' received invalid base64 encoded response.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (ret < 0)
+ return cli_err(appctx, "'set ssl ocsp-response' received invalid base64 encoded response.\n");
trash.data = ret;
if (ssl_sock_update_ocsp_response(&trash, &err)) {
- if (err) {
- memprintf(&err, "%s.\n", err);
- appctx->ctx.cli.err = err;
- appctx->st0 = CLI_ST_PRINT_FREE;
- }
- else {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Failed to update OCSP response.\n";
- appctx->st0 = CLI_ST_PRINT;
- }
- return 1;
+ if (err)
+ return cli_dynerr(appctx, memprintf(&err, "%s.\n", err));
+ else
+ return cli_err(appctx, "Failed to update OCSP response.\n");
}
- appctx->ctx.cli.severity = LOG_INFO;
- appctx->ctx.cli.msg = "OCSP Response updated!\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
+
+ return cli_msg(appctx, LOG_INFO, "OCSP Response updated!\n");
#else
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "HAProxy was compiled against a version of OpenSSL that doesn't support OCSP stapling.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
+ return cli_err(appctx, "HAProxy was compiled against a version of OpenSSL that doesn't support OCSP stapling.\n");
#endif
}
diff --git a/src/stats.c b/src/stats.c
index 6744163..01fcb45 100644
--- a/src/stats.c
+++ b/src/stats.c
@@ -3783,12 +3783,8 @@
else
appctx->ctx.stats.iid = atoi(args[2]);
- if (!appctx->ctx.stats.iid) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "No such proxy.\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (!appctx->ctx.stats.iid)
+ return cli_err(appctx, "No such proxy.\n");
appctx->ctx.stats.flags |= STAT_BOUND;
appctx->ctx.stats.type = atoi(args[3]);
diff --git a/src/stick_table.c b/src/stick_table.c
index 746cda3..fe5af7e 100644
--- a/src/stick_table.c
+++ b/src/stick_table.c
@@ -3388,12 +3388,8 @@
void *ptr;
struct freq_ctr_period *frqp;
- if (!*args[4]) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Key value expected\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (!*args[4])
+ return cli_err(appctx, "Key value expected\n");
switch (t->type) {
case SMP_T_IPV4:
@@ -3412,12 +3408,8 @@
val = strtoul(args[4], &endptr, 10);
if ((errno == ERANGE && val == ULONG_MAX) ||
(errno != 0 && val == 0) || endptr == args[4] ||
- val > 0xffffffff) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Invalid key\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ val > 0xffffffff)
+ return cli_err(appctx, "Invalid key\n");
uint32_key = (uint32_t) val;
static_table_key.key = &uint32_key;
break;
@@ -3430,24 +3422,14 @@
default:
switch (appctx->ctx.table.action) {
case STK_CLI_ACT_SHOW:
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Showing keys from tables of type other than ip, ipv6, string and integer is not supported\n";
- break;
+ return cli_err(appctx, "Showing keys from tables of type other than ip, ipv6, string and integer is not supported\n");
case STK_CLI_ACT_CLR:
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Removing keys from tables of type other than ip, ipv6, string and integer is not supported\n";
- break;
+ return cli_err(appctx, "Removing keys from tables of type other than ip, ipv6, string and integer is not supported\n");
case STK_CLI_ACT_SET:
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Inserting keys into tables of type other than ip, ipv6, string and integer is not supported\n";
- break;
+ return cli_err(appctx, "Inserting keys into tables of type other than ip, ipv6, string and integer is not supported\n");
default:
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Unknown action\n";
- break;
+ return cli_err(appctx, "Unknown action\n");
}
- appctx->st0 = CLI_ST_PRINT;
- return 1;
}
/* check permissions */
@@ -3481,30 +3463,20 @@
if (!stksess_kill(t, ts, 1)) {
/* don't delete an entry which is currently referenced */
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Entry currently in use, cannot remove\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
+ return cli_err(appctx, "Entry currently in use, cannot remove\n");
}
-
break;
case STK_CLI_ACT_SET:
ts = stktable_get_entry(t, &static_table_key);
if (!ts) {
/* don't delete an entry which is currently referenced */
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Unable to allocate a new entry\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
+ return cli_err(appctx, "Unable to allocate a new entry\n");
}
-
HA_RWLOCK_WRLOCK(STK_SESS_LOCK, &ts->lock);
for (cur_arg = 5; *args[cur_arg]; cur_arg += 2) {
if (strncmp(args[cur_arg], "data.", 5) != 0) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "\"data.<type>\" followed by a value expected\n";
- appctx->st0 = CLI_ST_PRINT;
+ cli_err(appctx, "\"data.<type>\" followed by a value expected\n");
HA_RWLOCK_WRUNLOCK(STK_SESS_LOCK, &ts->lock);
stktable_touch_local(t, ts, 1);
return 1;
@@ -3512,27 +3484,21 @@
data_type = stktable_get_data_type(args[cur_arg] + 5);
if (data_type < 0) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Unknown data type\n";
- appctx->st0 = CLI_ST_PRINT;
+ cli_err(appctx, "Unknown data type\n");
HA_RWLOCK_WRUNLOCK(STK_SESS_LOCK, &ts->lock);
stktable_touch_local(t, ts, 1);
return 1;
}
if (!t->data_ofs[data_type]) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Data type not stored in this table\n";
- appctx->st0 = CLI_ST_PRINT;
+ cli_err(appctx, "Data type not stored in this table\n");
HA_RWLOCK_WRUNLOCK(STK_SESS_LOCK, &ts->lock);
stktable_touch_local(t, ts, 1);
return 1;
}
if (!*args[cur_arg+1] || strl2llrc(args[cur_arg+1], strlen(args[cur_arg+1]), &value) != 0) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Require a valid integer value to store\n";
- appctx->st0 = CLI_ST_PRINT;
+ cli_err(appctx, "Require a valid integer value to store\n");
HA_RWLOCK_WRUNLOCK(STK_SESS_LOCK, &ts->lock);
stktable_touch_local(t, ts, 1);
return 1;
@@ -3572,10 +3538,7 @@
break;
default:
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Unknown action\n";
- appctx->st0 = CLI_ST_PRINT;
- break;
+ return cli_err(appctx, "Unknown action\n");
}
return 1;
}
@@ -3585,44 +3548,24 @@
*/
static int table_prepare_data_request(struct appctx *appctx, char **args)
{
- if (appctx->ctx.table.action != STK_CLI_ACT_SHOW && appctx->ctx.table.action != STK_CLI_ACT_CLR) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "content-based lookup is only supported with the \"show\" and \"clear\" actions\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (appctx->ctx.table.action != STK_CLI_ACT_SHOW && appctx->ctx.table.action != STK_CLI_ACT_CLR)
+ return cli_err(appctx, "content-based lookup is only supported with the \"show\" and \"clear\" actions\n");
/* condition on stored data value */
appctx->ctx.table.data_type = stktable_get_data_type(args[3] + 5);
- if (appctx->ctx.table.data_type < 0) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Unknown data type\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (appctx->ctx.table.data_type < 0)
+ return cli_err(appctx, "Unknown data type\n");
if (!((struct proxy *)appctx->ctx.table.target)->table ||
- !((struct proxy *)appctx->ctx.table.target)->table->data_ofs[appctx->ctx.table.data_type]) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Data type not stored in this table\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ !((struct proxy *)appctx->ctx.table.target)->table->data_ofs[appctx->ctx.table.data_type])
+ return cli_err(appctx, "Data type not stored in this table\n");
appctx->ctx.table.data_op = get_std_op(args[4]);
- if (appctx->ctx.table.data_op < 0) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Require and operator among \"eq\", \"ne\", \"le\", \"ge\", \"lt\", \"gt\"\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (appctx->ctx.table.data_op < 0)
+ return cli_err(appctx, "Require and operator among \"eq\", \"ne\", \"le\", \"ge\", \"lt\", \"gt\"\n");
- if (!*args[5] || strl2llrc(args[5], strlen(args[5]), &appctx->ctx.table.value) != 0) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Require a valid integer value to compare against\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (!*args[5] || strl2llrc(args[5], strlen(args[5]), &appctx->ctx.table.value) != 0)
+ return cli_err(appctx, "Require a valid integer value to compare against\n");
/* OK we're done, all the fields are set */
return 0;
@@ -3638,12 +3581,8 @@
if (*args[2]) {
appctx->ctx.table.target = stktable_find_by_name(args[2]);
- if (!appctx->ctx.table.target) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "No such table\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (!appctx->ctx.table.target)
+ return cli_err(appctx, "No such table\n");
}
else {
if (appctx->ctx.table.action != STK_CLI_ACT_SHOW)
@@ -3663,24 +3602,14 @@
err_args:
switch (appctx->ctx.table.action) {
case STK_CLI_ACT_SHOW:
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Optional argument only supports \"data.<store_data_type>\" <operator> <value> and key <key>\n";
- break;
+ return cli_err(appctx, "Optional argument only supports \"data.<store_data_type>\" <operator> <value> and key <key>\n");
case STK_CLI_ACT_CLR:
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Required arguments: <table> \"data.<store_data_type>\" <operator> <value> or <table> key <key>\n";
- break;
+ return cli_err(appctx, "Required arguments: <table> \"data.<store_data_type>\" <operator> <value> or <table> key <key>\n");
case STK_CLI_ACT_SET:
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Required arguments: <table> key <key> [data.<store_data_type> <value>]*\n";
- break;
+ return cli_err(appctx, "Required arguments: <table> key <key> [data.<store_data_type> <value>]*\n");
default:
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Unknown action\n";
- break;
+ return cli_err(appctx, "Unknown action\n");
}
- appctx->st0 = CLI_ST_PRINT;
- return 1;
}
/* This function is used to deal with table operations (dump or clear depending
diff --git a/src/stream.c b/src/stream.c
index 913de63..095565a 100644
--- a/src/stream.c
+++ b/src/stream.c
@@ -3624,12 +3624,8 @@
if (!cli_has_level(appctx, ACCESS_LVL_ADMIN))
return 1;
- if (!*args[2]) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "Session pointer expected (use 'show sess').\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (!*args[2])
+ return cli_err(appctx, "Session pointer expected (use 'show sess').\n");
ptr = (void *)strtoul(args[2], NULL, 0);
@@ -3640,12 +3636,8 @@
}
/* do we have the stream ? */
- if (strm != ptr) {
- appctx->ctx.cli.severity = LOG_ERR;
- appctx->ctx.cli.msg = "No such session (use 'show sess').\n";
- appctx->st0 = CLI_ST_PRINT;
- return 1;
- }
+ if (strm != ptr)
+ return cli_err(appctx, "No such session (use 'show sess').\n");
stream_shutdown(strm, SF_ERR_KILLED);
return 1;