]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: backend: don't use url_param_name as a hint for BE_LB_ALGO_PH
authorWilly Tarreau <w@1wt.eu>
Mon, 14 Jan 2019 14:17:46 +0000 (15:17 +0100)
committerWilly Tarreau <w@1wt.eu>
Mon, 14 Jan 2019 18:33:17 +0000 (19:33 +0100)
At a few places in the code we used to rely on this variable to guess
what LB algo was in place. This is wrong because if the defaults section
presets "balance url_param foo" and a backend uses "balance roundrobin",
these locations will still see this url_param_name set and consider it.
The harm is limited, as this only causes the beginning of the request
body to be buffered. And in general this is a bad practice which prevents
us from cleaning the lbprm stuff. Let's explicitly check the LB algo
instead.

This may be backported to all currently maintained versions.

src/proto_http.c
src/proto_htx.c

index 25e0e3efd131457d2f3cee8ac38e1ac84c97bc8e..245fa983230e315b15cfa519268f81de3efe48dc 100644 (file)
@@ -3050,7 +3050,8 @@ int http_process_request(struct stream *s, struct channel *req, int an_bit)
         * that parameter. This will be done in another analyser.
         */
        if (!(s->flags & (SF_ASSIGNED|SF_DIRECT)) &&
-           s->txn->meth == HTTP_METH_POST && s->be->url_param_name != NULL &&
+           s->txn->meth == HTTP_METH_POST &&
+           (s->be->lbprm.algo & BE_LB_ALGO) == BE_LB_ALGO_PH &&
            (msg->flags & (HTTP_MSGF_CNT_LEN|HTTP_MSGF_TE_CHNK))) {
                channel_dont_connect(req);
                req->analysers |= AN_REQ_HTTP_BODY;
index a9752cbfadcc779816f021d28218e7cd1cd8c8a9..236bfd04d56aca225190ce3afdd0e13b081421f9 100644 (file)
@@ -938,7 +938,8 @@ int htx_process_request(struct stream *s, struct channel *req, int an_bit)
         * that parameter. This will be done in another analyser.
         */
        if (!(s->flags & (SF_ASSIGNED|SF_DIRECT)) &&
-           s->txn->meth == HTTP_METH_POST && s->be->url_param_name != NULL) {
+           s->txn->meth == HTTP_METH_POST &&
+           (s->be->lbprm.algo & BE_LB_ALGO) == BE_LB_ALGO_PH) {
                channel_dont_connect(req);
                req->analysers |= AN_REQ_HTTP_BODY;
        }