From: Cyril Bonté Date: Thu, 3 Mar 2011 19:49:04 +0000 (+0100) Subject: [BUG] stats: admin commands must check the proxy state X-Git-Tag: v1.5-dev8~303 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=613f0df88b435f61c270bda71921f7c6aedae6dd;p=thirdparty%2Fhaproxy.git [BUG] stats: admin commands must check the proxy state As reported by Bryan Talbot, enabling and disabling a server in a disabled proxy causes a segfault. Changing the weight can also cause a similar segfault. --- diff --git a/src/dumpstats.c b/src/dumpstats.c index 980b28485a..081e4cd371 100644 --- a/src/dumpstats.c +++ b/src/dumpstats.c @@ -639,6 +639,12 @@ int stats_sock_parse_request(struct stream_interface *si, char *line) return 1; } + if (px->state == PR_STSTOPPED) { + s->data_ctx.cli.msg = "Proxy is disabled.\n"; + si->st0 = STAT_CLI_PRINT; + return 1; + } + /* if the weight is terminated with '%', it is set relative to * the initial weight, otherwise it is absolute. */ @@ -749,6 +755,12 @@ int stats_sock_parse_request(struct stream_interface *si, char *line) return 1; } + if (px->state == PR_STSTOPPED) { + s->data_ctx.cli.msg = "Proxy is disabled.\n"; + si->st0 = STAT_CLI_PRINT; + return 1; + } + if (sv->state & SRV_MAINTAIN) { /* The server is really in maintenance, we can change the server state */ if (sv->tracked) { @@ -804,6 +816,12 @@ int stats_sock_parse_request(struct stream_interface *si, char *line) return 1; } + if (px->state == PR_STSTOPPED) { + s->data_ctx.cli.msg = "Proxy is disabled.\n"; + si->st0 = STAT_CLI_PRINT; + return 1; + } + if (! (sv->state & SRV_MAINTAIN)) { /* Not already in maintenance, we can change the server state */ sv->state |= SRV_MAINTAIN;