Hi,

HAProxy 3.2.4 was released on 2025/08/13. It added 66 new commits after
version 3.2.3. Even though it's still the summer vacation here, it
contains a fair enough number of changes. Here is a summary of the main
ones.

For the SSL stack, a regression in certificate selection is fixed which
could cause issue if haproxy was configured with TLS 1.2 as maximum
version supported. Early-data support on the backend side is adjusted as
it was broken for some time now, as no data could be emitted prior to
the handshake completion. Also, a behavior change occurs for dynamic
certificates insertion via the CLI. The operation is relaxed as it is
not required anymore to specify the certificate directory. This requires
extra care though for the user to ensure that the certificate is present
accordingly on the filesystem so that it can still be accessed on
reload.

The HTTP/1 multiplexer is able now to respond with error-files when
encountering an early error prior to the stream creation, instead of
plain internal errors.

The QUIC stack receives several fixes. Since 3.2, it's compatible with
OpenSSL 3.5 API. The current release adjusts the haproxy QUIC SSL
library interface, as errors were reported with specific
distribution/libc flavour. Speaking of distribution, QUIC listeners on
FreeBSD were not functional if bound on a specific address. The upper
multiplexer layer and HTTP/3 is also improved to now properly deal with
HTTP 1xx interim responses. Also related to SSL 0-RTT, the header
"Early-data: 1" is now added on requests handled by haproxy as QUIC
0-RTT if the handshake is not yet completed. This is helpful to inform
servers that such request should be processed carefully. Finally, an
internal change during stream notification mechanism is introduced which
is transparent to most users, however if you ever encountered frozen
transfers it could be a solution for this.

The ACME feature is experimental in the 3.2 branch, so we're still
backporting improvements to this branch. We've fixed a number of bugs
that were preventing it from working correctly with both the "pebble"
and "smallstep" servers.  Traces have also been added to display the
content of decoded requests and responses from the server, which is very
helpful for debugging.

We've also implemented additional functionality for the DNS-01
challenge.  HAProxy is now able to emit a JSON object containing the
challenge token over the "dpapi" sink. The Data Plane API or a
third-party tool can read this sink, set up the challenge, and then
invoke the acme challenge_ready command via the CLI to continue the ACME
process. We now meet the minimum requirements for DNS-01, which means
you can now generate wildcards.

The httpclient is progressively refined as its usage is becoming more
prevalent. Most notably, it is able to deal better with large transfers.
It can also now properly handle interim and early HTTP responses.

On the LUA side, server iterator usage could cause a crash. Also, read
and write events are properly notify when using the socket class to
avoid infinite wait when the write side has been blocked earlier.
Finally, on the configuration side, the default-path keyword is now
properly taken into account by lua-load-per-thread directives.

For resolvers, a delay tempo was previously introduced between two
connections attemps to a DNS server. However, this could result in an
important CPU consumption due to a rescheduling in loop of the
connection task. Now, the timer is properly resetted after a successful
connection which is enough to solve the issue.

Log lines could be badly formatted on specific condition such as the
generation of the unique-id fetch via %ID notation.

On MacOS a crash is fixed when using master-worker and the system
resolver.

Many thanks to all the people who contributed to this release. As usual,
we encourage everyone to upgrade as soon as possible. And for those who
are interested, do not hesitate to look at our development releases as
this can give you a taste of the future 3.3 and it is a really valuable
help to the developers.

#############################################################################################
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.2/src/
   Git repository   : https://git.haproxy.org/git/haproxy-3.2.git/
   Git Web browsing : https://git.haproxy.org/?p=haproxy-3.2.git
   Changelog        : https://www.haproxy.org/download/3.2/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

---
Complete changelog :
Amaury Denoyelle (12):
      BUG/MEDIUM: mux-quic: ensure Early-data header is set
      BUG/MEDIUM: h3: do not overwrite interim with final response
      BUG/MINOR: h3: properly realloc buffer after interim response encoding
      BUG/MINOR: h3: ensure that invalid status code are not encoded (FE side)
      MINOR: qmux: change API for snd_buf FIN transmission
      BUG/MEDIUM: h3: handle interim response properly on FE side
      MINOR: h3: remove unused outbuf in h3_resp_headers_send()
      BUG/MINOR: hq-interop: fix FIN transmission
      BUG/MINOR mux-quic: apply correctly timeout on output pending data
      BUG/MINOR: mux-quic: ensure close-spread-time is properly applied
      DOC: list missing global QUIC settings
      BUG/MEDIUM: mux-quic: adjust wakeup behavior

Aurelien DARRAGON (4):
      BUG/MEDIUM: logs: fix sess_build_logline_orig() recursion with options
      BUG/MINOR: hlua: take default-path into account with lua-load-per-thread
      BUG/MEDIUM: hlua_fcn: ensure systematic watcher cleanup for server list 
iterator
      BUG/MINOR: logs: fix log-steps extra log origins selection

Christopher Faulet (17):
      BUG/MINOR: hlua: Skip headers when a receive is performed on an HTTP 
applet
      BUG/MEDIUM: hlua: Report to SC when data were consumed on a lua socket
      BUG/MEDIUM: hlua: Report to SC when output data are blocked on a lua 
socket
      BUG/MEDIUM: dns: Reset reconnect tempo when connection is finally 
established
      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/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
      BUG/MINOR: applet: Don't trigger BUG_ON if the tid is not on appctx init
      CLEANUP: http-client: Remove useless indentation when sending request body
      BUG/MEDIUM: http-client: Test HTX_FL_EOM flag before commiting the HTX 
buffer

David Carlier (2):
      DOC: deviceatlas build clarifications
      MINOR: sock: update broken accept4 detection for older hardwares.

Frederic Lecaille (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)
      BUG/MINOR: quic: Wrong source address use on FreeBSD

Ilia Shipitsin (1):
      CLEANUP: acme: fix wrong spelling of "resources"

Lukas Tribus (2):
      DOC: management: fix typo in commit f4f93c56
      DOC: config: recommend single quoting passwords

Olivier Houchard (3):
      BUG/MEDIUM: threads: Disable the workaround to load libgcc_s on macOS
      BUG/MEDIUM: ssl: Fix 0rtt to the server
      BUG/MEDIUM: ssl: fix build with AWS-LC

Remi Tricot-Le Breton (2):
      CLEANUP: ssl: Rename ssl_trace-t.h to ssl_trace.h
      BUG/MINOR: init: Initialize random seed earlier in the init process

Valentine Krasnobaeva (2):
      BUG/MINOR: halog: exit with error when some output filters are set 
simultaneosly
      BUG/MINOR: stick-table: cap sticky counter idx with tune.nb_stk_ctr 
instead of MAX_SESS_STKCTR

William Lallemand (15):
      BUG/MEDIUM: ssl/clienthello: ECDSA with ssl-max-ver TLSv1.2 and no ECDSA 
ciphers
      BUG/MEDIUM: acme: use POST-as-GET instead of GET for resources
      MINOR: acme: remove acme_req_auth() and use acme_post_as_get() instead
      BUG/MINOR: acme: allow "processing" in challenge requests
      MINOR: acme: add ACME to the haproxy -vv feature list
      MINOR: acme: implement traces
      BUILD: acme: avoid declaring TRACE_SOURCE in acme-t.h
      MINOR: acme: emit a log for DNS-01 challenge response
      MINOR: acme: emit the DNS-01 challenge details on the dpapi sink
      MEDIUM: acme: allow to wait and restart the task for DNS-01
      MINOR: acme: update the log for DNS-01
      BUG/MINOR: acme: possible integer underflow in acme_txt_record()
      MEDIUM: acme: use lowercase for challenge names in configuration
      DOC: management: clarify usage of -V with -c
      MEDIUM: ssl/cli: relax crt insertion in crt-list of type directory

Willy Tarreau (3):
      BUG/MINOR: listener: really assign distinct IDs to shards
      BUILD: compat: provide relaxed versions of the MIN/MAX macros
      BUILD: compat: always set _POSIX_VERSION to ease comparisons

---

-- 
Amaury Denoyelle


Reply via email to