[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.
This commit is contained in:
Cyril Bonté 2011-03-03 20:49:04 +01:00 committed by Willy Tarreau
parent 1a4186d6a2
commit 613f0df88b

View File

@ -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;