[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 980b284..081e4cd 100644
--- a/src/dumpstats.c
+++ b/src/dumpstats.c
@@ -639,6 +639,12 @@
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 @@
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 @@
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;