v3.4-dev11
Breaking Changes📦 haproxyView on GitHub →
⚠ 1 breaking✨ 12 features🐛 69 fixes🔧 24 symbols
Summary
This release introduces an MPSC ring buffer, enhances QUIC and H2 support, and includes numerous bug fixes across various modules. Key new features include ACME EAB support and improved JWE/JWS capabilities.
⚠️ Breaking Changes
- The `USE_OTEL` build option has been removed. The OpenTelemetry addon is now built using the `EXTRA_MAKE` option. To enable OpenTelemetry, you need to modify your build process to include it via `EXTRA_MAKE`.
Migration Steps
- Update build process to use `EXTRA_MAKE` for building the OpenTelemetry addon instead of the `USE_OTEL` option.
✨ New Features
- Added an MPSC (Multi-Producer, Single-Consumer) ring buffer implementation.
- Extended the `shut` command to the application protocol layer in `mux-quic`.
- Implemented stream reset on shut abort/kill-conn for `h3/hq_interop`.
- Added an `EXTRA_MAKE` option to easily build addons.
- Implemented External Account Binding (EAB) for ACME.
- Allowed specifying a custom MAC algorithm for EAB in ACME.
- Added an option to enable/disable algorithms or encryption algorithms for `jwt_decrypt`.
- Added a new message flag to indicate extended CONNECT support in `mux-h2`.
- Added decoding for `:protocol` in traces for H2.
- Added support for HMAC in `jws_b64_protected()` and made nonce optional.
- Introduced `jws_b64_hmac_signature()` function for HMAC signing.
- Allowed specifying a tgid with `show fd` in CLI.
🐛 Bug Fixes
- Fixed segfault on `newOrder` with empty authorizations in ACME.
- Skipped auth/challenge steps when `newOrder` returns a certificate in ACME.
- Did not free existing sinks on allocation error in sink.
- Made `parse_store()` return an error on `var_set()` failure in vars.
- Did not store the variable twice with `set-var-fmt` in vars.
- Only printed the first invalid character in `fill_desc()` in vars.
- Validated `idx > 0` in `hpack_valid_idx()` in hpack.
- Reworked the QUIC RX code for optimization.
- Stored the DCID as an offset in QUIC.
- Reduced the size of `struct quic_dgram` for optimization.
- Handled cases where an address is not available in QUIC.
- Fixed master CLI connection slot leak on client disconnect.
- Implemented stream reset on shut abort/kill-conn for `h3/hq_interop`.
- Fixed a possible argument corruption in `smp_fetch_acl_parse()` in acl.
- Did not leak a map descriptor on load error in map.
- Fixed some map-related help messages in map/cli.
- Released the reference on failure to load from file in pattern.
- Removed duplicate test in `parse_acl_expr()` and unused variable in acl.
- Fixed buffer overflow with `sockaddr_in46` in QUIC.
- Fixed stalled renewal when opportunistic DNS check fails in ACME.
- Fixed trace crash on datagram receive in QUIC.
- Fixed trace spacing when datagram is displayed in QUIC.
- Removed the outdated condition to release h2c on timeout in `mux-h2`.
- Fixed the body_len check when parsing request trailers in `mux-h2`.
- Preset `MSGF_BODY_CL` on `H2_SF_DATA_CLEN` in `h2c_dec_hdrs()` in `mux-h2`.
- Always validated the source address in responses in DNS.
- Properly reported error for http health-checks in tcpcheck.
- Removed duplicated line when resolvers proxy is initialized in resolvers.
- Freed new requester on error when linking a resolution in resolvers.
- Fixed lookup for a hostname in the state-file tree in resolvers.
- Freed opts on parse error in `resolv_parse_do_resolve()` in resolvers.
- Also fixed `tcp_options_list` for OOB write loop in `net_helper`.
- Checked output buffer size in `aes_cbc_enc` converter in ssl/sample.
- Fixed private session retrieval on NTLM in `http-ana`.
- Fixed user and operator permission via `@@<pid>` in master CLI in `mworker/cli`.
- Checked `ci_insert()` return value in `pcli_parse_request()` in `mworker/cli`.
- Added decoding for `:protocol` in traces for H2.
- Conditioned the processing of 8441 extension to global setting in `mux-h2`.
- Only accepted `:protocol` with extended CONNECT in H2.
- Contact mail should be optional, don't pass ToS bool in ACME.
- Removed duplicated return statement in `smp_fetch_stver()` in `http-fetch`.
- Adjusted `smp_fetch_url32_src()` comment in `http-fetch`.
- Fixed indentation of `sample_fetch_keywords` in `http-fetch`.
- Checked return values of unchecked buffer operations in `http_fetch`.
- Fixed `http_auth_bearer()` when custom header is used in `http-fetch`.
- Removed reserved block on error during contig chunks parsing in `h1_htx`.
- Removed duplicated block to know if `haterm` must drain in `haterm`.
- Immediately reported error when draining the request in `haterm`.
- Removed useless `IS_HTX_SC()` test in `haterm`.
- Fixed a possible integer overflow on the request body length in `haterm`.
- Subscribed for receives until request was fully drained in `haterm`.
- Did not set `HTX_FL_EOM` flag on 100-Continue responses in `haterm`.
- Properly handled end of request and end of response in `haterm`.
- Properly handled client timeout in `haterm`.
- Fixed condition to use direct data forwarding in `haterm`.
- Reported a 400-bad-request error on receive error in `haterm`.
- Removed now useless `req_body` field from `hstream` in `haterm`.
- Reset stream after app shutdown for HTTP/0.9 in `mux_quic`.
- Did not perform unnecessary timeout handling on BE side in `mux_quic`.
- Adjusted `qcc_is_dead()` to account detached streams in `mux_quic`.
- Simplified `MUX_CTL_GET_NBSTRM` in `mux_quic`.
- Used the sequence number with kTLS and TLS 1.2 in ssl.
- Fixed max stream ID reuse estimation in `mux_quic`.
- Released BE conns if reuse definitely blocked in `mux_quic`.
- Refreshed timeout only if I/O performed in `mux_quic`.
- Properly consumed padding for DATA frames in `mux-h2`.
- Fixed the detection of the ext connect support in `mux-h2`.
- Fixed `jwt.decrypt_alg_list` to work correctly in `jwe`.
- Properly checked permissions on CLI's set/clear cmd in `stick-table`.