Hello community,

here is the log from the commit of package haproxy for openSUSE:Factory checked 
in at 2020-10-08 13:07:38
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/haproxy (Old)
 and      /work/SRC/openSUSE:Factory/.haproxy.new.4249 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "haproxy"

Thu Oct  8 13:07:38 2020 rev:92 rq:839173 version:2.2.4+git0.de456726d

Changes:
--------
--- /work/SRC/openSUSE:Factory/haproxy/haproxy.changes  2020-09-14 
12:00:42.979464795 +0200
+++ /work/SRC/openSUSE:Factory/.haproxy.new.4249/haproxy.changes        
2020-10-08 13:09:00.110999563 +0200
@@ -1,0 +2,36 @@
+Fri Oct  2 14:38:51 UTC 2020 - Marcus Rueckert <mrueck...@suse.de>
+
+- use parallel build 
+
+-------------------------------------------------------------------
+Fri Oct 02 14:37:00 UTC 2020 - mrueck...@suse.de
+
+- Update to version 2.2.4+git0.de456726d:
+  * [RELEASE] Released version 2.2.4
+  * REGTEST: make map_regm_with_backref require 1.7
+  * REGTEST: make abns_socket.vtc require 1.8
+  * REGTEST: make agent-check.vtc require 1.8
+  * REGTEST: fix host part in balance-uri-path-only.vtc
+  * BUG/MINOR: ssl/crt-list: exit on warning out of crtlist_parse_line()
+  * DOC: agent-check: fix typo in "fail" word expected reply
+  * REGTESTS: use "command" instead of "which" for better POSIX compatibility
+  * BUILD: trace: include tools.h
+  * BUG/MEDIUM: listeners: do not pause foreign listeners
+  * REGTESTS: add a few load balancing tests
+  * MINOR: backend: add a new "path-only" option to "balance uri"
+  * MINOR: backend: make the "whole" option of balance uri take only one bit
+  * MINOR: h2/trace: also display the remaining frame length in traces
+  * BUG/MINOR: Fix memory leaks cfg_parse_peers
+  * BUG/MEDIUM: h2: report frame bits only for handled types
+  * BUG/MINOR: config: Fix memory leak on config parse listen
+  * BUG/MINOR: http-fetch: Don't set the sample type during the htx prefetch
+  * BUG/MINOR: h2/trace: do not display "stream error" after a frame ACK
+  * BUG/MINOR: ssl/crt-list: crt-list could end without a \n
+  * BUG/MEDIUM: ssl: Don't call ssl_sock_io_cb() directly.
+  * BUG/MINOR: server: report correct error message for invalid port on 
"socks4"
+  * BUG/MINOR: ssl: verifyhost is case sensitive
+  * BUG/MINOR: Fix type passed of sizeof() for calloc()
+  * BUG/MEDIUM: pattern: Renew the pattern expression revision when it is 
pruned
+  * BUILD: threads: better workaround for late loading of libgcc_s
+
+-------------------------------------------------------------------

Old:
----
  haproxy-2.2.3+git0.0e58a340d.tar.gz

New:
----
  haproxy-2.2.4+git0.de456726d.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ haproxy.spec ++++++
--- /var/tmp/diff_new_pack.4uFzt7/_old  2020-10-08 13:09:01.903001186 +0200
+++ /var/tmp/diff_new_pack.4uFzt7/_new  2020-10-08 13:09:01.907001189 +0200
@@ -53,7 +53,7 @@
 %endif
 
 Name:           haproxy
-Version:        2.2.3+git0.0e58a340d
+Version:        2.2.4+git0.de456726d
 Release:        0
 #
 #
@@ -138,7 +138,7 @@
 %patch3 -p1
 
 %build
-make \
+make %{?_smp_mflags} \
     TARGET=linux-glibc \
     CPU="%{_target_cpu}" \
     USE_PCRE=1 \

++++++ _service ++++++
--- /var/tmp/diff_new_pack.4uFzt7/_old  2020-10-08 13:09:01.943001222 +0200
+++ /var/tmp/diff_new_pack.4uFzt7/_new  2020-10-08 13:09:01.943001222 +0200
@@ -6,7 +6,7 @@
     <param name="versionformat">@PARENT_TAG@+git@TAG_OFFSET@.%h</param>
     <param name="versionrewrite-pattern">v(.*)</param>
     <param name="versionrewrite-replacement">\1</param>
-    <param name="revision">v2.2.3</param>
+    <param name="revision">v2.2.4</param>
     <param name="changesgenerate">enable</param>
   </service>
 

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.4uFzt7/_old  2020-10-08 13:09:01.971001247 +0200
+++ /var/tmp/diff_new_pack.4uFzt7/_new  2020-10-08 13:09:01.971001247 +0200
@@ -5,4 +5,4 @@
   </service>
 <service name="tar_scm">
                 <param 
name="url">http://git.haproxy.org/git/haproxy-2.2.git</param>
-              <param 
name="changesrevision">0e58a340da6ba142338cd6941ca87187b993e85e</param></service></servicedata>
\ No newline at end of file
+              <param 
name="changesrevision">de456726db6a9e71c1d917c6214b468d62fe8285</param></service></servicedata>
\ No newline at end of file

++++++ haproxy-2.2.3+git0.0e58a340d.tar.gz -> 
haproxy-2.2.4+git0.de456726d.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-2.2.3+git0.0e58a340d/CHANGELOG 
new/haproxy-2.2.4+git0.de456726d/CHANGELOG
--- old/haproxy-2.2.3+git0.0e58a340d/CHANGELOG  2020-09-08 15:56:30.000000000 
+0200
+++ new/haproxy-2.2.4+git0.de456726d/CHANGELOG  2020-09-30 06:50:05.000000000 
+0200
@@ -1,6 +1,33 @@
 ChangeLog :
 ===========
 
+2020/09/30 : 2.2.4
+    - BUILD: threads: better workaround for late loading of libgcc_s
+    - BUG/MEDIUM: pattern: Renew the pattern expression revision when it is 
pruned
+    - BUG/MINOR: Fix type passed of sizeof() for calloc()
+    - BUG/MINOR: ssl: verifyhost is case sensitive
+    - BUG/MINOR: server: report correct error message for invalid port on 
"socks4"
+    - BUG/MEDIUM: ssl: Don't call ssl_sock_io_cb() directly.
+    - BUG/MINOR: ssl/crt-list: crt-list could end without a \n
+    - BUG/MINOR: h2/trace: do not display "stream error" after a frame ACK
+    - BUG/MINOR: http-fetch: Don't set the sample type during the htx prefetch
+    - BUG/MINOR: config: Fix memory leak on config parse listen
+    - BUG/MEDIUM: h2: report frame bits only for handled types
+    - BUG/MINOR: Fix memory leaks cfg_parse_peers
+    - MINOR: h2/trace: also display the remaining frame length in traces
+    - MINOR: backend: make the "whole" option of balance uri take only one bit
+    - MINOR: backend: add a new "path-only" option to "balance uri"
+    - REGTESTS: add a few load balancing tests
+    - BUG/MEDIUM: listeners: do not pause foreign listeners
+    - BUILD: trace: include tools.h
+    - REGTESTS: use "command" instead of "which" for better POSIX compatibility
+    - DOC: agent-check: fix typo in "fail" word expected reply
+    - BUG/MINOR: ssl/crt-list: exit on warning out of crtlist_parse_line()
+    - REGTEST: fix host part in balance-uri-path-only.vtc
+    - REGTEST: make agent-check.vtc require 1.8
+    - REGTEST: make abns_socket.vtc require 1.8
+    - REGTEST: make map_regm_with_backref require 1.7
+
 2020/09/08 : 2.2.3
     - SCRIPTS: git-show-backports: make -m most only show the left branch
     - SCRIPTS: git-show-backports: emit the shell command to backport a commit
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-2.2.3+git0.0e58a340d/VERDATE 
new/haproxy-2.2.4+git0.de456726d/VERDATE
--- old/haproxy-2.2.3+git0.0e58a340d/VERDATE    2020-09-08 15:56:30.000000000 
+0200
+++ new/haproxy-2.2.4+git0.de456726d/VERDATE    2020-09-30 06:50:05.000000000 
+0200
@@ -1,2 +1,2 @@
 $Format:%ci$
-2020/09/08
+2020/09/30
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-2.2.3+git0.0e58a340d/VERSION 
new/haproxy-2.2.4+git0.de456726d/VERSION
--- old/haproxy-2.2.3+git0.0e58a340d/VERSION    2020-09-08 15:56:30.000000000 
+0200
+++ new/haproxy-2.2.4+git0.de456726d/VERSION    2020-09-30 06:50:05.000000000 
+0200
@@ -1 +1 @@
-2.2.3
+2.2.4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-2.2.3+git0.0e58a340d/doc/configuration.txt 
new/haproxy-2.2.4+git0.de456726d/doc/configuration.txt
--- old/haproxy-2.2.3+git0.0e58a340d/doc/configuration.txt      2020-09-08 
15:56:30.000000000 +0200
+++ new/haproxy-2.2.4+git0.de456726d/doc/configuration.txt      2020-09-30 
06:50:05.000000000 +0200
@@ -4,7 +4,7 @@
                          ----------------------
                               version 2.2
                              willy tarreau
-                              2020/09/08
+                              2020/09/30
 
 
 This document covers the configuration language as implemented in the version
@@ -3133,6 +3133,11 @@
                   slash in the request. If both parameters are specified, the
                   evaluation stops when either is reached.
 
+                  A "path-only" parameter indicates that the hashing key starts
+                  at the first '/' of the path. This can be used to ignore the
+                  authority part of absolute URIs, and to make sure that HTTP/1
+                  and HTTP/2 URIs will provide the same hash.
+
       url_param   The URL parameter specified in argument will be looked up in
                   the query string of each HTTP GET request.
 
@@ -12854,7 +12859,7 @@
     MAINT mode, thus it will not accept any new connections at all, and health
     checks will be stopped.
 
-  - The words "down", "failed", or "stopped", optionally followed by a
+  - The words "down", "fail", or "stopped", optionally followed by a
     description string after a sharp ('#'). All of these mark the server's
     operating state as DOWN, but since the word itself is reported on the stats
     page, the difference allows an administrator to know if the situation was
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-2.2.3+git0.0e58a340d/include/haproxy/h2.h 
new/haproxy-2.2.4+git0.de456726d/include/haproxy/h2.h
--- old/haproxy-2.2.3+git0.0e58a340d/include/haproxy/h2.h       2020-09-08 
15:56:30.000000000 +0200
+++ new/haproxy-2.2.4+git0.de456726d/include/haproxy/h2.h       2020-09-30 
06:50:05.000000000 +0200
@@ -212,6 +212,8 @@
 /* returns a bit corresponding to the frame type */
 static inline unsigned int h2_ft_bit(enum h2_ft ft)
 {
+       if (ft >= H2_FT_ENTRIES)
+               return 0;
        return 1U << ft;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/haproxy-2.2.3+git0.0e58a340d/reg-tests/balance/balance-rr.vtc 
new/haproxy-2.2.4+git0.de456726d/reg-tests/balance/balance-rr.vtc
--- old/haproxy-2.2.3+git0.0e58a340d/reg-tests/balance/balance-rr.vtc   
1970-01-01 01:00:00.000000000 +0100
+++ new/haproxy-2.2.4+git0.de456726d/reg-tests/balance/balance-rr.vtc   
2020-09-30 06:50:05.000000000 +0200
@@ -0,0 +1,73 @@
+vtest "Test for balance roundrobin"
+feature ignore_unknown_macro
+
+server s1 {
+    rxreq
+    txresp -hdr "Server: s1"
+} -repeat 2 -start
+
+server s2 {
+    rxreq
+    txresp -hdr "Server: s2"
+} -repeat 2 -start
+
+server s3 {
+    rxreq
+    txresp -hdr "Server: s3"
+} -repeat 2 -start
+
+server s4 {
+    rxreq
+    txresp -hdr "Server: s4"
+} -repeat 2 -start
+
+haproxy h1 -arg "-L A" -conf {
+    defaults
+        mode http
+        timeout server 1s
+        timeout connect 1s
+        timeout client 1s
+
+    listen px
+        bind "fd@${px}"
+        balance roundrobin
+        server srv1 ${s1_addr}:${s1_port}
+        server srv2 ${s2_addr}:${s2_port}
+        server srv3 ${s3_addr}:${s3_port}
+        server srv4 ${s4_addr}:${s4_port}
+} -start
+
+client c1 -connect ${h1_px_sock} {
+    txreq -url "/url1"
+    rxresp
+    expect resp.status == 200
+    expect resp.http.Server ~ s1
+} -run
+
+client c2 -connect ${h1_px_sock} {
+    txreq -url "/url1"
+    rxresp
+    expect resp.status == 200
+    expect resp.http.Server ~ s2
+} -run
+
+client c3 -connect ${h1_px_sock} {
+    txreq -url "/url1"
+    rxresp
+    expect resp.status == 200
+    expect resp.http.Server ~ s3
+} -run
+
+client c4 -connect ${h1_px_sock} {
+    txreq -url "/url1"
+    rxresp
+    expect resp.status == 200
+    expect resp.http.Server ~ s4
+} -run
+
+client c5 -connect ${h1_px_sock} {
+    txreq -url "/url1"
+    rxresp
+    expect resp.status == 200
+    expect resp.http.Server ~ s1
+} -run
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/haproxy-2.2.3+git0.0e58a340d/reg-tests/balance/balance-uri-path-only.vtc 
new/haproxy-2.2.4+git0.de456726d/reg-tests/balance/balance-uri-path-only.vtc
--- 
old/haproxy-2.2.3+git0.0e58a340d/reg-tests/balance/balance-uri-path-only.vtc    
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/haproxy-2.2.4+git0.de456726d/reg-tests/balance/balance-uri-path-only.vtc    
    2020-09-30 06:50:05.000000000 +0200
@@ -0,0 +1,97 @@
+vtest "Test for balance URI"
+feature ignore_unknown_macro
+#REQUIRE_VERSION=2.2
+
+server s1 {
+    rxreq
+    txresp -hdr "Server: s1" -body "s1"
+} -repeat 5 -start
+
+server s2 {
+    rxreq
+    txresp -hdr "Server: s2" -body "s2"
+} -repeat 5 -start
+
+server s3 {
+    rxreq
+    txresp -hdr "Server: s3" -body "s3"
+} -repeat 5 -start
+
+server s4 {
+    rxreq
+    txresp -hdr "Server: s4" -body "s4"
+} -repeat 5 -start
+
+haproxy h1 -arg "-L A" -conf {
+    defaults
+        mode http
+        timeout server 1s
+        timeout connect 1s
+        timeout client 1s
+
+    listen px
+        bind "fd@${px}"
+        bind "fd@${pxh2}" proto h2
+        balance uri path-only
+        server srv1 ${s1_addr}:${s1_port}
+        server srv2 ${s2_addr}:${s2_port}
+        server srv3 ${s3_addr}:${s3_port}
+        server srv4 ${s4_addr}:${s4_port}
+} -start
+
+client c1 -connect ${h1_px_sock} {
+    txreq -url "http://127.0.0.1/url1";
+    rxresp
+    expect resp.status == 200
+    expect resp.http.Server ~ s2
+} -run
+
+client c2 -connect ${h1_px_sock} {
+    txreq -url "/url1?ignore=this-arg"
+    rxresp
+    expect resp.status == 200
+    expect resp.http.Server ~ s2
+} -run
+
+client c3 -connect ${h1_px_sock} {
+    txreq -url "http://127.0.0.1/url2";
+    rxresp
+    expect resp.status == 200
+    expect resp.http.Server ~ s3
+} -run
+
+client c4 -connect ${h1_px_sock} {
+    txreq -url "/url3"
+    rxresp
+    expect resp.status == 200
+    expect resp.http.Server ~ s4
+} -run
+
+client c5 -connect ${h1_px_sock} {
+    txreq -url "/url4"
+    rxresp
+    expect resp.status == 200
+    expect resp.http.Server ~ s1
+} -run
+
+client c6h2 -connect ${h1_pxh2_sock} {
+       txpri
+       stream 0 {
+               txsettings
+               rxsettings
+               txsettings -ack
+               rxsettings
+               expect settings.ack == true
+       } -run
+
+       stream 1 {
+               txreq \
+                 -req "GET" \
+                 -scheme "https" \
+                 -url "/url1"
+               rxhdrs
+               expect resp.status == 200
+               rxdata -all
+               expect resp.body == "s2"
+       } -run
+} -run
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/haproxy-2.2.3+git0.0e58a340d/reg-tests/balance/balance-uri.vtc 
new/haproxy-2.2.4+git0.de456726d/reg-tests/balance/balance-uri.vtc
--- old/haproxy-2.2.3+git0.0e58a340d/reg-tests/balance/balance-uri.vtc  
1970-01-01 01:00:00.000000000 +0100
+++ new/haproxy-2.2.4+git0.de456726d/reg-tests/balance/balance-uri.vtc  
2020-09-30 06:50:05.000000000 +0200
@@ -0,0 +1,74 @@
+vtest "Test for balance URI"
+feature ignore_unknown_macro
+#REQUIRE_VERSION=2.0
+
+server s1 {
+    rxreq
+    txresp -hdr "Server: s1"
+} -repeat 2 -start
+
+server s2 {
+    rxreq
+    txresp -hdr "Server: s2"
+} -repeat 2 -start
+
+server s3 {
+    rxreq
+    txresp -hdr "Server: s3"
+} -repeat 2 -start
+
+server s4 {
+    rxreq
+    txresp -hdr "Server: s4"
+} -repeat 2 -start
+
+haproxy h1 -arg "-L A" -conf {
+    defaults
+        mode http
+        timeout server 1s
+        timeout connect 1s
+        timeout client 1s
+
+    listen px
+        bind "fd@${px}"
+        balance uri
+        server srv1 ${s1_addr}:${s1_port}
+        server srv2 ${s2_addr}:${s2_port}
+        server srv3 ${s3_addr}:${s3_port}
+        server srv4 ${s4_addr}:${s4_port}
+} -start
+
+client c1 -connect ${h1_px_sock} {
+    txreq -url "/url1"
+    rxresp
+    expect resp.status == 200
+    expect resp.http.Server ~ s2
+} -run
+
+client c2 -connect ${h1_px_sock} {
+    txreq -url "/url1?ignore=this-arg"
+    rxresp
+    expect resp.status == 200
+    expect resp.http.Server ~ s2
+} -run
+
+client c3 -connect ${h1_px_sock} {
+    txreq -url "/url2"
+    rxresp
+    expect resp.status == 200
+    expect resp.http.Server ~ s3
+} -run
+
+client c4 -connect ${h1_px_sock} {
+    txreq -url "/url3"
+    rxresp
+    expect resp.status == 200
+    expect resp.http.Server ~ s4
+} -run
+
+client c5 -connect ${h1_px_sock} {
+    txreq -url "/url4"
+    rxresp
+    expect resp.status == 200
+    expect resp.http.Server ~ s1
+} -run
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/haproxy-2.2.3+git0.0e58a340d/reg-tests/checks/agent-check.vtc 
new/haproxy-2.2.4+git0.de456726d/reg-tests/checks/agent-check.vtc
--- old/haproxy-2.2.3+git0.0e58a340d/reg-tests/checks/agent-check.vtc   
2020-09-08 15:56:30.000000000 +0200
+++ new/haproxy-2.2.4+git0.de456726d/reg-tests/checks/agent-check.vtc   
2020-09-30 06:50:05.000000000 +0200
@@ -1,4 +1,5 @@
 varnishtest "Health-checks: agent-check"
+#REQUIRE_VERSION=1.8
 #REGTEST_TYPE=slow
 feature ignore_unknown_macro
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/haproxy-2.2.3+git0.0e58a340d/reg-tests/http-rules/map_regm_with_backref.vtc 
new/haproxy-2.2.4+git0.de456726d/reg-tests/http-rules/map_regm_with_backref.vtc
--- 
old/haproxy-2.2.3+git0.0e58a340d/reg-tests/http-rules/map_regm_with_backref.vtc 
    2020-09-08 15:56:30.000000000 +0200
+++ 
new/haproxy-2.2.4+git0.de456726d/reg-tests/http-rules/map_regm_with_backref.vtc 
    2020-09-30 06:50:05.000000000 +0200
@@ -10,7 +10,7 @@
 varnishtest "map_regm get_trash_chunk test"
 feature ignore_unknown_macro
 
-#REQUIRE_VERSION=1.6
+#REQUIRE_VERSION=1.7
 #REGTEST_TYPE=bug
 
 syslog S1 -level notice {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/haproxy-2.2.3+git0.0e58a340d/reg-tests/seamless-reload/abns_socket.vtc 
new/haproxy-2.2.4+git0.de456726d/reg-tests/seamless-reload/abns_socket.vtc
--- old/haproxy-2.2.3+git0.0e58a340d/reg-tests/seamless-reload/abns_socket.vtc  
2020-09-08 15:56:30.000000000 +0200
+++ new/haproxy-2.2.4+git0.de456726d/reg-tests/seamless-reload/abns_socket.vtc  
2020-09-30 06:50:05.000000000 +0200
@@ -13,6 +13,7 @@
 
 # abns@ sockets are not available on freebsd
 #EXCLUDE_TARGETS=freebsd,osx,generic
+#REQUIRE_VERSION=1.8
 #REGTEST_TYPE=bug
 
 haproxy h1 -W -conf {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-2.2.3+git0.0e58a340d/scripts/run-regtests.sh 
new/haproxy-2.2.4+git0.de456726d/scripts/run-regtests.sh
--- old/haproxy-2.2.3+git0.0e58a340d/scripts/run-regtests.sh    2020-09-08 
15:56:30.000000000 +0200
+++ new/haproxy-2.2.4+git0.de456726d/scripts/run-regtests.sh    2020-09-30 
06:50:05.000000000 +0200
@@ -191,8 +191,8 @@
     done
 
     for requiredbin in $require_binaries; do
-      which $requiredbin >/dev/null 2>&1
-      if [ "$?" -eq "1" ]; then
+      if ! command -v $requiredbin >/dev/null 2>&1
+      then
         echo "  Skip $i because '"$requiredbin"' is not installed"
         skiptest=1
       fi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-2.2.3+git0.0e58a340d/src/backend.c 
new/haproxy-2.2.4+git0.de456726d/src/backend.c
--- old/haproxy-2.2.3+git0.0e58a340d/src/backend.c      2020-09-08 
15:56:30.000000000 +0200
+++ new/haproxy-2.2.4+git0.de456726d/src/backend.c      2020-09-30 
06:50:05.000000000 +0200
@@ -195,8 +195,8 @@
  * it will either look for active servers, or for backup servers.
  * If any server is found, it will be returned. If no valid server is found,
  * NULL is returned. The lbprm.arg_opt{1,2,3} values correspond respectively to
- * the "whole" optional argument (boolean), the "len" argument (numeric) and
- * the "depth" argument (numeric).
+ * the "whole" optional argument (boolean, bit0), the "len" argument (numeric)
+ * and the "depth" argument (numeric).
  *
  * This code was contributed by Guillaume Dallaire, who also selected this hash
  * algorithm out of a tens because it gave him the best results.
@@ -227,7 +227,7 @@
                        if (slashes == px->lbprm.arg_opt3) /* depth+1 */
                                break;
                }
-               else if (c == '?' && !px->lbprm.arg_opt1) // "whole"
+               else if (c == '?' && !(px->lbprm.arg_opt1 & 1)) // "whole"
                        break;
                end++;
        }
@@ -701,6 +701,11 @@
                                        struct ist uri;
 
                                        uri = 
htx_sl_req_uri(http_get_stline(htxbuf(&s->req.buf)));
+                                       if (s->be->lbprm.arg_opt1 & 2) {
+                                               uri = http_get_path(uri);
+                                               if (!uri.ptr)
+                                                       uri = ist("");
+                                       }
                                        srv = get_server_uh(s->be, uri.ptr, 
uri.len, prev_srv);
                                }
                                break;
@@ -2420,7 +2425,7 @@
 
                curproxy->lbprm.algo &= ~BE_LB_ALGO;
                curproxy->lbprm.algo |= BE_LB_ALGO_UH;
-               curproxy->lbprm.arg_opt1 = 0; // "whole"
+               curproxy->lbprm.arg_opt1 = 0; // "whole", "path-only"
                curproxy->lbprm.arg_opt2 = 0; // "len"
                curproxy->lbprm.arg_opt3 = 0; // "depth"
 
@@ -2445,11 +2450,15 @@
                                arg += 2;
                        }
                        else if (!strcmp(args[arg], "whole")) {
-                               curproxy->lbprm.arg_opt1 = 1;
+                               curproxy->lbprm.arg_opt1 |= 1;
+                               arg += 1;
+                       }
+                       else if (!strcmp(args[arg], "path-only")) {
+                               curproxy->lbprm.arg_opt1 |= 2;
                                arg += 1;
                        }
                        else {
-                               memprintf(err, "%s only accepts parameters 
'len', 'depth', and 'whole' (got '%s').", args[0], args[arg]);
+                               memprintf(err, "%s only accepts parameters 
'len', 'depth', 'path-only', and 'whole' (got '%s').", args[0], args[arg]);
                                return -1;
                        }
                }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-2.2.3+git0.0e58a340d/src/calltrace.c 
new/haproxy-2.2.4+git0.de456726d/src/calltrace.c
--- old/haproxy-2.2.3+git0.0e58a340d/src/calltrace.c    2020-09-08 
15:56:30.000000000 +0200
+++ new/haproxy-2.2.4+git0.de456726d/src/calltrace.c    2020-09-30 
06:50:05.000000000 +0200
@@ -49,6 +49,7 @@
 #include <string.h>
 #include <haproxy/api.h>
 #include <haproxy/time.h>
+#include <haproxy/tools.h>
 
 static FILE *log;
 static int level;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-2.2.3+git0.0e58a340d/src/cfgparse-listen.c 
new/haproxy-2.2.4+git0.de456726d/src/cfgparse-listen.c
--- old/haproxy-2.2.3+git0.0e58a340d/src/cfgparse-listen.c      2020-09-08 
15:56:30.000000000 +0200
+++ new/haproxy-2.2.4+git0.de456726d/src/cfgparse-listen.c      2020-09-30 
06:50:05.000000000 +0200
@@ -471,6 +471,7 @@
                        goto out;
                }
 
+               free(defproxy.conf.file);
                free(defproxy.check_command);
                free(defproxy.check_path);
                free(defproxy.cookie_name);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-2.2.3+git0.0e58a340d/src/cfgparse.c 
new/haproxy-2.2.4+git0.de456726d/src/cfgparse.c
--- old/haproxy-2.2.3+git0.0e58a340d/src/cfgparse.c     2020-09-08 
15:56:30.000000000 +0200
+++ new/haproxy-2.2.4+git0.de456726d/src/cfgparse.c     2020-09-30 
06:50:05.000000000 +0200
@@ -888,13 +888,18 @@
                if (!t || !id) {
                        ha_alert("parsing [%s:%d]: '%s %s' : memory allocation 
failed\n",
                                 file, linenum, args[0], args[1]);
+                       free(t);
+                       free(id);
                        err_code |= ERR_ALERT | ERR_FATAL;
                        goto out;
                }
 
                err_code |= parse_stick_table(file, linenum, args, t, id, id + 
prefix_len, curpeers);
-               if (err_code & ERR_FATAL)
+               if (err_code & ERR_FATAL) {
+                       free(t);
+                       free(id);
                        goto out;
+               }
 
                stktable_store_name(t);
                t->next = stktables_list;
@@ -3603,7 +3608,7 @@
                                for (i = 0; i < global.nbthread; i++)
                                        MT_LIST_INIT(&newsrv->safe_conns[i]);
 
-                               newsrv->curr_idle_thr = calloc(global.nbthread, 
sizeof(int));
+                               newsrv->curr_idle_thr = calloc(global.nbthread, 
sizeof(*newsrv->curr_idle_thr));
                                if (!newsrv->curr_idle_thr)
                                        goto err;
                                continue;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-2.2.3+git0.0e58a340d/src/http_fetch.c 
new/haproxy-2.2.4+git0.de456726d/src/http_fetch.c
--- old/haproxy-2.2.3+git0.0e58a340d/src/http_fetch.c   2020-09-08 
15:56:30.000000000 +0200
+++ new/haproxy-2.2.4+git0.de456726d/src/http_fetch.c   2020-09-30 
06:50:05.000000000 +0200
@@ -217,7 +217,6 @@
        }
        txn = s->txn;
        msg = (!(chn->flags & CF_ISRESP) ? &txn->req : &txn->rsp);
-       smp->data.type = SMP_T_BOOL;
 
        if (IS_HTX_STRM(s)) {
                htx = htxbuf(&chn->buf);
@@ -315,7 +314,6 @@
 
        /* everything's OK */
   end:
-       smp->data.u.sint = 1;
        return htx;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-2.2.3+git0.0e58a340d/src/listener.c 
new/haproxy-2.2.4+git0.de456726d/src/listener.c
--- old/haproxy-2.2.3+git0.0e58a340d/src/listener.c     2020-09-08 
15:56:30.000000000 +0200
+++ new/haproxy-2.2.4+git0.de456726d/src/listener.c     2020-09-30 
06:50:05.000000000 +0200
@@ -298,6 +298,10 @@
        if (l->state <= LI_ZOMBIE)
                goto end;
 
+       if ((global.mode & (MODE_DAEMON | MODE_MWORKER)) &&
+           !(proc_mask(l->bind_conf->bind_proc) & pid_bit))
+               goto end;
+
        if (l->proto->pause) {
                /* Returns < 0 in case of failure, 0 if the listener
                 * was totally stopped, or > 0 if correctly paused.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-2.2.3+git0.0e58a340d/src/mux_h2.c 
new/haproxy-2.2.4+git0.de456726d/src/mux_h2.c
--- old/haproxy-2.2.3+git0.0e58a340d/src/mux_h2.c       2020-09-08 
15:56:30.000000000 +0200
+++ new/haproxy-2.2.4+git0.de456726d/src/mux_h2.c       2020-09-30 
06:50:05.000000000 +0200
@@ -508,7 +508,7 @@
 
                if (h2c->dsi >= 0 &&
                    (mask & (H2_EV_RX_FRAME|H2_EV_RX_FHDR)) == 
(H2_EV_RX_FRAME|H2_EV_RX_FHDR)) {
-                       chunk_appendf(&trace_buf, " dft=%s/%02x", 
h2_ft_str(h2c->dft), h2c->dff);
+                       chunk_appendf(&trace_buf, " dft=%s/%02x dfl=%d", 
h2_ft_str(h2c->dft), h2c->dff, h2c->dfl);
                }
 
                if (h2s) {
@@ -3190,7 +3190,8 @@
                }
 
                if (h2c->st0 != H2_CS_FRAME_H) {
-                       TRACE_DEVEL("stream error, skip frame payload", 
H2_EV_RX_FRAME, h2c->conn, h2s);
+                       if (h2c->dfl)
+                               TRACE_DEVEL("skipping remaining frame payload", 
H2_EV_RX_FRAME, h2c->conn, h2s);
                        ret = MIN(b_data(&h2c->dbuf), h2c->dfl);
                        b_del(&h2c->dbuf, ret);
                        h2c->dfl -= ret;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-2.2.3+git0.0e58a340d/src/pattern.c 
new/haproxy-2.2.4+git0.de456726d/src/pattern.c
--- old/haproxy-2.2.3+git0.0e58a340d/src/pattern.c      2020-09-08 
15:56:30.000000000 +0200
+++ new/haproxy-2.2.4+git0.de456726d/src/pattern.c      2020-09-30 
06:50:05.000000000 +0200
@@ -1093,6 +1093,7 @@
        struct pattern_list *pat, *tmp;
 
        list_for_each_entry_safe(pat, tmp, &expr->patterns, list) {
+               LIST_DEL(&pat->list);
                free(pat->pat.data);
                free(pat);
        }
@@ -1100,6 +1101,7 @@
        free_pattern_tree(&expr->pattern_tree);
        free_pattern_tree(&expr->pattern_tree_2);
        LIST_INIT(&expr->patterns);
+       expr->revision = rdtsc();
 }
 
 void pat_prune_ptr(struct pattern_expr *expr)
@@ -1107,6 +1109,7 @@
        struct pattern_list *pat, *tmp;
 
        list_for_each_entry_safe(pat, tmp, &expr->patterns, list) {
+               LIST_DEL(&pat->list);
                free(pat->pat.ptr.ptr);
                free(pat->pat.data);
                free(pat);
@@ -1115,6 +1118,7 @@
        free_pattern_tree(&expr->pattern_tree);
        free_pattern_tree(&expr->pattern_tree_2);
        LIST_INIT(&expr->patterns);
+       expr->revision = rdtsc();
 }
 
 void pat_prune_reg(struct pattern_expr *expr)
@@ -1122,6 +1126,7 @@
        struct pattern_list *pat, *tmp;
 
        list_for_each_entry_safe(pat, tmp, &expr->patterns, list) {
+               LIST_DEL(&pat->list);
                regex_free(pat->pat.ptr.ptr);
                free(pat->pat.data);
                free(pat);
@@ -1130,6 +1135,7 @@
        free_pattern_tree(&expr->pattern_tree);
        free_pattern_tree(&expr->pattern_tree_2);
        LIST_INIT(&expr->patterns);
+       expr->revision = rdtsc();
 }
 
 /*
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-2.2.3+git0.0e58a340d/src/server.c 
new/haproxy-2.2.4+git0.de456726d/src/server.c
--- old/haproxy-2.2.3+git0.0e58a340d/src/server.c       2020-09-08 
15:56:30.000000000 +0200
+++ new/haproxy-2.2.4+git0.de456726d/src/server.c       2020-09-30 
06:50:05.000000000 +0200
@@ -877,8 +877,8 @@
                goto err;
        }
 
-       if (!port_low) {
-               ha_alert("'%s': invalid port range %d-%d.\n", args[*cur_arg], 
port_low, port_high);
+       if (port_low <= 0 || port_low > 65535) {
+               ha_alert("'%s': invalid port %d.\n", args[*cur_arg], port_low);
                goto err;
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-2.2.3+git0.0e58a340d/src/ssl_crtlist.c 
new/haproxy-2.2.4+git0.de456726d/src/ssl_crtlist.c
--- old/haproxy-2.2.3+git0.0e58a340d/src/ssl_crtlist.c  2020-09-08 
15:56:30.000000000 +0200
+++ new/haproxy-2.2.4+git0.de456726d/src/ssl_crtlist.c  2020-09-30 
06:50:05.000000000 +0200
@@ -380,10 +380,10 @@
                        cfgerr |= ERR_ALERT | ERR_FATAL;
                        goto error;
                }
-
-               *(end - 1) = '\0'; /* line parser mustn't receive any \n */
+               if (*(end - 1) == '\n')
+                       *(end - 1) = '\0'; /* line parser mustn't receive any 
\n */
                cfgerr |= crtlist_parse_line(thisline, &crt_path, entry, file, 
linenum, err);
-               if (cfgerr)
+               if (cfgerr & ERR_CODE)
                        goto error;
 
                /* empty line */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-2.2.3+git0.0e58a340d/src/ssl_sock.c 
new/haproxy-2.2.4+git0.de456726d/src/ssl_sock.c
--- old/haproxy-2.2.3+git0.0e58a340d/src/ssl_sock.c     2020-09-08 
15:56:30.000000000 +0200
+++ new/haproxy-2.2.4+git0.de456726d/src/ssl_sock.c     2020-09-30 
06:50:05.000000000 +0200
@@ -674,7 +674,7 @@
        /* crypto engine is available, let's notify the associated
         * connection that it can pursue its processing.
         */
-       ssl_sock_io_cb(NULL, ctx, 0);
+       tasklet_wakeup(ctx->wait_event.tasklet);
 }
 
 /*
@@ -4456,7 +4456,7 @@
        size_t prefixlen, suffixlen;
 
        /* Trivial case */
-       if (strcmp(pattern, hostname) == 0)
+       if (strcasecmp(pattern, hostname) == 0)
                return 1;
 
        /* The rest of this logic is based on RFC 6125, section 6.4.3
@@ -4487,7 +4487,7 @@
        /* Make sure all labels match except the leftmost */
        hostname_left_label_end = strchr(hostname, '.');
        if (!hostname_left_label_end
-           || strcmp(pattern_left_label_end, hostname_left_label_end) != 0)
+           || strcasecmp(pattern_left_label_end, hostname_left_label_end) != 0)
                return 0;
 
        /* Make sure the leftmost label of the hostname is long enough
@@ -4499,8 +4499,8 @@
         * wildcard */
        prefixlen = pattern_wildcard - pattern;
        suffixlen = pattern_left_label_end - (pattern_wildcard + 1);
-       if ((prefixlen && (memcmp(pattern, hostname, prefixlen) != 0))
-           || (suffixlen && (memcmp(pattern_wildcard + 1, 
hostname_left_label_end - suffixlen, suffixlen) != 0)))
+       if ((prefixlen && (strncasecmp(pattern, hostname, prefixlen) != 0))
+           || (suffixlen && (strncasecmp(pattern_wildcard + 1, 
hostname_left_label_end - suffixlen, suffixlen) != 0)))
                return 0;
 
        return 1;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haproxy-2.2.3+git0.0e58a340d/src/thread.c 
new/haproxy-2.2.4+git0.de456726d/src/thread.c
--- old/haproxy-2.2.3+git0.0e58a340d/src/thread.c       2020-09-08 
15:56:30.000000000 +0200
+++ new/haproxy-2.2.4+git0.de456726d/src/thread.c       2020-09-30 
06:50:05.000000000 +0200
@@ -189,6 +189,27 @@
        return ret;
 }
 
+/* Depending on the platform and how libpthread was built, pthread_exit() may
+ * involve some code in libgcc_s that would be loaded on exit for the first
+ * time, causing aborts if the process is chrooted. It's harmless bit very
+ * dirty. There isn't much we can do to make sure libgcc_s is loaded only if
+ * needed, so what we do here is that during early boot we create a dummy
+ * thread that immediately exits. This will lead to libgcc_s being loaded
+ * during boot on the platforms where it's required.
+ */
+static void *dummy_thread_function(void *data)
+{
+       pthread_exit(NULL);
+       return NULL;
+}
+
+static inline void preload_libgcc_s(void)
+{
+       pthread_t dummy_thread;
+       pthread_create(&dummy_thread, NULL, dummy_thread_function, NULL);
+       pthread_join(dummy_thread, NULL);
+}
+
 __attribute__((constructor))
 static void __thread_init(void)
 {
@@ -201,17 +222,7 @@
                exit(1);
        }
 
-#if defined(__GNUC__) && (__GNUC__ >= 3) && defined(__GNU_LIBRARY__) && 
!defined(__clang__)
-       /* make sure libgcc_s is already loaded, because pthread_exit() may
-        * may need it on exit after the chroot! _Unwind_Find_FDE() is defined
-        * there since gcc 3.0, has no side effect, doesn't take any argument
-        * and seems to be present on all supported platforms.
-        */
-       {
-               extern void _Unwind_Find_FDE(void);
-               _Unwind_Find_FDE();
-       }
-#endif
+       preload_libgcc_s();
 
        thread_cpus_enabled_at_boot = thread_cpus_enabled();
 


Reply via email to