From 9a4da683a6a0ce312c7e302245d6e327858d7ee8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Nephtali?= Date: Mon, 16 Apr 2018 19:02:42 +0200 Subject: [PATCH] MINOR: cli: Ensure the CLI always outputs an error when it should MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When using the CLI_ST_PRINT_FREE state, always output something back if the faulty function did not fill the 'err' variable. The map/acl code could lead to a crash whereas the SSL code was silently failing. Signed-off-by: Aurélien Nephtali --- src/map.c | 38 ++++++++++++++++++++++++++++---------- src/ssl_sock.c | 5 +++++ 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/src/map.c b/src/map.c index 9313dc87e..7953c2a0b 100644 --- a/src/map.c +++ b/src/map.c @@ -723,15 +723,21 @@ static int cli_parse_set_map(char **args, struct appctx *appctx, void *private) return 1; } - /* Try to delete the entry. */ + /* 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) + if (err) { memprintf(&err, "%s.\n", err); - appctx->ctx.cli.err = err; - appctx->st0 = CLI_ST_PRINT_FREE; + 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; } HA_SPIN_UNLOCK(PATREF_LOCK, &appctx->ctx.map.ref->lock); @@ -744,10 +750,16 @@ static int cli_parse_set_map(char **args, struct appctx *appctx, void *private) 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) + if (err) { memprintf(&err, "%s.\n", err); - appctx->ctx.cli.err = err; - appctx->st0 = CLI_ST_PRINT_FREE; + 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; } HA_SPIN_UNLOCK(PATREF_LOCK, &appctx->ctx.map.ref->lock); @@ -829,10 +841,16 @@ static int cli_parse_add_map(char **args, struct appctx *appctx, void *private) ret = pat_ref_add(appctx->ctx.map.ref, args[3], NULL, &err); HA_SPIN_UNLOCK(PATREF_LOCK, &appctx->ctx.map.ref->lock); if (!ret) { - if (err) + if (err) { memprintf(&err, "%s.\n", err); - appctx->ctx.cli.err = err; - appctx->st0 = CLI_ST_PRINT_FREE; + 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; } diff --git a/src/ssl_sock.c b/src/ssl_sock.c index 8151cb381..23ad35b18 100644 --- a/src/ssl_sock.c +++ b/src/ssl_sock.c @@ -8588,6 +8588,11 @@ static int cli_parse_set_ocspresponse(char **args, struct appctx *appctx, void * 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; } appctx->ctx.cli.severity = LOG_INFO;