When adding a server dynamically, we observe that when a backend has a
dynamic persistence cookie, the new server has no cookie as we receive
the following HTTP header:
set-cookie: test-cookie=; Expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/
Whereas we were expecting to receive something like the following, which
is what we receive for a server added in the config file:
set-cookie: test-cookie=abcdef1234567890; path=/

After investigating code path, srv_set_dyncookie() is never called when
adding a server through CLI, it is only called when parsing config file
or using "set server bkd1/srv1 addr".

To fix this, call srv_set_dyncookie() inside cli_parse_add_server().

This patch must be backported up to 2.4.
---
 src/server.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/src/server.c b/src/server.c
index 555cae82c..a93798f03 100644
--- a/src/server.c
+++ b/src/server.c
@@ -5732,6 +5732,11 @@ static int cli_parse_add_server(char **args, char 
*payload, struct appctx *appct
         */
        srv->rid = (srv_id_reuse_cnt) ? (srv_id_reuse_cnt / 2) : 0;
 
+       /* generate new server's dynamic cookie if enabled on backend */
+       if (be->ck_opts & PR_CK_DYNAMIC) {
+               srv_set_dyncookie(srv);
+       }
+
        /* adding server cannot fail when we reach this:
         * publishing EVENT_HDL_SUB_SERVER_ADD
         */
-- 
2.34.1

Reply via email to