]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: http_ext: fix if-none regression in forwardfor option
authorAurelien DARRAGON <adarragon@haproxy.com>
Tue, 20 Jun 2023 12:55:11 +0000 (14:55 +0200)
committerChristopher Faulet <cfaulet@haproxy.com>
Tue, 20 Jun 2023 13:32:56 +0000 (15:32 +0200)
A regression was introduced in 730b983 ("MINOR: proxy: move 'forwardfor'
option to http_ext")

Indeed, when the forwardfor if-none option is specified on the frontend
but forwardfor is not specified at all on the backend: if-none from the
frontend is ignored.

But this behavior conflicts with the historical one, if-none should only
be ignored if forwardfor is also enabled on the backend and if-none is
not set there.

It should fix GH #2187.

This should be backported in 2.8 with 730b983 ("MINOR: proxy: move
'forwardfor' option to http_ext")

src/http_ext.c

index d1bae9c2ab5c48416010b8af5a48b6ce19cc8982..9d70086c702ac88c1b6f30064fcfa4764589c291 100644 (file)
@@ -790,8 +790,8 @@ int http_handle_xff_header(struct stream *s, struct channel *req)
                struct http_hdr_ctx ctx = { .blk = NULL };
                struct ist hdr = ((b_xff) ? b_xff->hdr_name : f_xff->hdr_name);
 
-               if (f_xff && f_xff->mode == HTTP_XFF_IFNONE &&
-                   b_xff && b_xff->mode == HTTP_XFF_IFNONE &&
+               if ((!f_xff || f_xff->mode == HTTP_XFF_IFNONE) &&
+                   (!b_xff || b_xff->mode == HTTP_XFF_IFNONE) &&
                    http_find_header(htx, hdr, &ctx, 0)) {
                        /* The header is set to be added only if none is present
                         * and we found it, so don't do anything.