BUG/MEDIUM: proxy: return "none" and "unknown" for unknown LB algos
When a backend doesn't use any known LB algorithm, backend_lb_algo_str()
returns NULL. It used to cause "nil" to be printed in the stats dump
since version 1.4 but causes 1.7 to try to parse this NULL to encode
it as a CSV string, causing a crash on "show stat" in this case.
The only situation where this can happen is when "transparent" or
"dispatch" are used in a proxy, in which case the LB algorithm is
BE_LB_ALGO_NONE. Thus now we explicitly report "none" when this
situation is detected, and we preventively report "unknown" if any
unknown algorithm is detected, which may happen if such an algo is
added in the future and the function is not updated.
This fix must be backported to 1.7 and may be backported as far as
1.4, though it has less impact there.
(cherry picked from commit b3e111b4fd99137b6b8c4d687282a497ed082111)
(cherry picked from commit 1b8659fa8ed25c159e8197cf532d0406fe6f96c7)
(cherry picked from commit 3bb7ae8faae03f4b115c4265c29f53374873b392)
diff --git a/src/backend.c b/src/backend.c
index baf02c2..1bf407b 100644
--- a/src/backend.c
+++ b/src/backend.c
@@ -1312,8 +1312,10 @@
return "hdr";
else if (algo == BE_LB_ALGO_RCH)
return "rdp-cookie";
+ else if (algo == BE_LB_ALGO_NONE)
+ return "none";
else
- return NULL;
+ return "unknown";
}
/* This function parses a "balance" statement in a backend section describing