Hi, HAProxy 3.3-dev3 was released on 2025/07/11. It added 80 new commits after version 3.3-dev2.
That's too many 3s in the release, last time such a thing happened was with 2.2-dev2 five years ago, that's 50% inflation in 5 years. Anyway. This version addresses a number of issues affecting the HTTP client in corner cases (handling of 1xx responses, responses received before end of body upload etc), and a small number of QUIC-related issues (backend, crashes and failures with OpenSSL 3.5 etc). OpenSSL 3.5.1 is now required to properly use the native QUIC API in OpenSSL 3.5 (it changed between the two to address some API issues). Regarding the non-bugfix stuff, I'm seeing it spread approximately like this: - the jwt_verify() converter now supports taking a certificate instead of a public key, which makes it compatible with dynamic updates. For this, the CLI's "commit ssl cert" command now accepts certificates without a private key. - the dns-accept-family now defaults to "auto" as planned in 3.2, so that machines lacking IPv6 connectivity stop learning IPv6 addresses from the DNS by default. Of course the previous mode remains available ("ipv4,ipv6"). - stats: a new flag appears in "show stats typed", indicating whether the considered metric is volatile ("V"), thus specific to the process, or persistent ("P"), thus related to the service. This is in order to progress towards the ability to support persistent counters across reloads (stay calm, we're not there yet). For now the types are indicated, that's all. - the distro name is now collected during boot when available and placed into the postmortem struct for debugging. We'll also add it to panics with a few other info (haproxy version, kernel version) that should help figure if a reported crash happened as reported or differently (sometimes containers are playing with users' nerves for example). - as planned in last announce, a warning is now emitted if a mailers section is configured but not used, as it likely indicates an older, non-migrated setup. - a counter of added/freed patterns (acl/map lines) is reported in the process' stats ("show info") in order to detect leaks that can be caused by scripts repeatedly uploading entries while improperly purging previous ones. - TCP MD5 signatures are supported on listeners and servers. These can be needed for example if you plan to place haproxy between two BGP routers. - more progress on the QUIC backend, automatic alpn is set, TLS version being restricted to 1.3 only, improvement of the :scheme handling in h3, support for dynamic servers. - the req_ssl* sample fetch parsers now all rely on the new generic function "smp_client_hello_parse()" that Mariam contributed a while ago and that was finally merged! - DeviceAtlas: the build process was improved to support installation in custom locations, and some build hints were added in the doc. - some build and CI updates (build-ssl detects and supports QuicTLS's cmake build system, CI now building with QUIC on OpenSSL 3.5, added ubuntu-24 to the CI, improved coverity scan via DEBUG_STRICT=2), and as usual some regtests. Also, those running reg-tests will need to update to the latest vtest2 (the instructions in the README under reg-tests are up-to-date). Commit dc46782efa from July 4th works fine for me and addresses the QUIC failures I was facing with an earlier version. Please find the usual URLs below : Site index : https://www.haproxy.org/ Documentation : https://docs.haproxy.org/ Wiki : https://github.com/haproxy/wiki/wiki Discourse : https://discourse.haproxy.org/ Slack channel : https://slack.haproxy.org/ Issue tracker : https://github.com/haproxy/haproxy/issues Q&A from devs : https://github.com/orgs/haproxy/discussions Sources : https://www.haproxy.org/download/3.3/src/ Git repository : https://git.haproxy.org/git/haproxy.git/ Git Web browsing : https://git.haproxy.org/?p=haproxy.git Changelog : https://www.haproxy.org/download/3.3/src/CHANGELOG Dataplane API : https://github.com/haproxytech/dataplaneapi/releases/latest Pending bugs : https://www.haproxy.org/l/pending-bugs Reviewed bugs : https://www.haproxy.org/l/reviewed-bugs Code reports : https://www.haproxy.org/l/code-reports Latest builds : https://www.haproxy.org/l/dev-packages Willy --- Complete changelog : Amaury Denoyelle (3): MINOR: cfgparse: enforce QUIC MUX compat on server line MINOR: server: support QUIC for dynamic servers BUG/MINOR: h3: fix https scheme request encoding for BE side Aurelien DARRAGON (9): MEDIUM: sink: change the sink mode type to PR_MODE_SYSLOG MEDIUM: server: move _srv_check_proxy_mode() checks from server init to finalize MINOR: server: move send-proxy* incompatibility check in _srv_check_proxy_mode() MINOR: mailers: warn if mailers are configured but not actually used BUG/MEDIUM: counters/server: fix server and proxy last_change mixup MEDIUM: server: add and use a separate last_change variable for internal use MEDIUM: proxy: add and use a separate last_change variable for internal use MINOR: counters: rename last_change counter to last_state_change MEDIUM: stats: add persistent state to typed output format Christopher Faulet (18): BUG/MEDIUM: hlua: Forbid any L6/L7 sample fetche functions from lua services BUG/MEDIUM: mux-h2: Properly handle connection error during preface sending MINOR: proto-tcp: Add support for TCP MD5 signature for listeners and servers BUILD: cfgparse-tcp: Add _GNU_SOURCE for TCP_MD5SIG_MAXKEYLEN BUG/MINOR: proto-tcp: Take care to initialized tcp_md5sig structure BUG/MINOR: http-act: Fix parsing of the expression argument for pause action MINOR: proto-tcp: Register a feature to report TCP MD5 signature support BUG/MEDIUM: http-client: Don't wake http-client applet if nothing was xferred BUG/MEDIUM: http-client: Properly inc input data when HTX blocks are xferred BUG/MEDIUM: http-client: Ask for more room when request data cannot be xferred BUG/MEDIUM: http-client: Test HTX_FL_EOM flag before commiting the HTX buffer BUG/MINOR: http-client: Ignore 1XX interim responses in non-HTX mode BUG/MINOR: http-client: Reject any 101-switching-protocols response BUG/MEDIUM: http-client: Drain the request if an early response is received BUG/MEDIUM: http-client: Notify applet has more data to deliver until the EOM MINOR: h1-htx: Add function to format an HTX message in its H1 representation BUG/MINOR: mux-h1: Use configured error files if possible for early H1 errors BUG/MINOR: h1-htx: Don't forget to init flags in h1_format_htx_msg function David Carlier (2): BUILD/MEDIUM: deviceatlas: fix when installed in custom locations. DOC: deviceatlas build clarifications Frederic Lecaille (11): BUG/MINOR: quic-be: Wrong retry_source_connection_id check BUG/MEDIUM: quic: SSL/TCP handshake failures with OpenSSL 3.5 BUG/MINOR: quic: Missing TLS 1.3 QUIC cipher suites and groups inits (OpenSSL 3.5 QUIC API) BUG/MINOR: quic-be: Malformed coalesced Initial packets MINOR: quic: Prevent QUIC backend use with the OpenSSL QUIC compatibility module (USE_OPENSS_COMPAT) MINOR: reg-tests: first QUIC+H3 reg tests (QUIC address validation) MINOR: quic-be: Set the backend alpn if not set by conf MINOR: quic-be: TLS version restriction to 1.3 MINOR: quic: Prevent QUIC build with OpenSSL 3.5 new QUIC API version < 3.5.1 BUG/MEDIUM: quic: Crash after QUIC server callbacks restoration (OpenSSL 3.5) REGTESTS: use two haproxy instances to distinguish the QUIC traces Ilia Shipitsin (4): CI: set DEBUG_STRICT=2 for coverity scan CI: enable USE_QUIC=1 for OpenSSL versions >= 3.5.0 CLEANUP: assorted typo fixes in the code, commits and doc BUILD: adjust scripts/build-ssl.sh to modern CMake system of QuicTLS Mariam John (1): MINOR: ssl: Introduce new smp_client_hello_parse() function Remi Tricot-Le Breton (11): BUG/MINOR: jwt: Copy input and parameters in dedicated buffers in jwt_verify converter DOC: Fix 'jwt_verify' converter doc MINOR: jwt: Rename pkey to pubkey in jwt_cert_tree_entry struct MINOR: jwt: Remove unused parameter in convert_ecdsa_sig MAJOR: jwt: Allow certificate instead of public key in jwt_verify converter MINOR: ssl: Allow 'commit ssl cert' with no privkey MINOR: ssl: Prevent delete on certificate used by jwt_verify REGTESTS: jwt: Add test with actual certificate passed to jwt_verify REGTESTS: jwt: Test update of certificate used in jwt_verify DOC: 'jwt_verify' converter now supports certificates CLEANUP: ssl: Rename ssl_trace-t.h to ssl_trace.h Valentine Krasnobaeva (1): MINOR: debug: add distro name and version in postmortem William Lallemand (13): MINOR: ssl: check TLS1.3 ciphersuites again in clienthello with recent AWS-LC BUG/MINOR: httpclient: wrongly named httpproxy flag MINOR: ssl/ocsp: stop using the flags from the httpclient CLI MEDIUM: httpclient: split the CLI from the actual httpclient API MEDIUM: httpclient: implement a way to use directly htx data MINOR: httpclient/cli: add --htx option BUG/MINOR: ssl: crash in ssl_sock_io_cb() with SSL traces and idle connections BUG/MINOR: ssl/ocsp: fix definition discrepancies with ocsp_update_init() MEDIUM: httpclient: add a Content-Length when the payload is known CI: github: add an OpenSSL 3.5.0 job CI: github: update the stable CI to ubuntu-24.04 CI: github: update to OpenSSL 3.5.1 CI: github: skip a ssl library version when latest is already in the list Willy Tarreau (7): REGTESTS: restrict execution to a single thread group BUILD: dev/phash: remove the accidentally committed a.out file MINOR: pattern: add a counter of added/freed patterns MEDIUM: resolvers: switch dns-accept-family to "auto" by default BUG/MINOR: resolvers: don't lower the case of binary DNS format MINOR: resolvers: do not duplicate the hostname_dn field BUG/MINOR: listener: really assign distinct IDs to shards ---