v3.4-dev13
Breaking Changes📦 haproxyView on GitHub →
⚠ 2 breaking✨ 9 features🐛 40 fixes🔧 57 symbols
Summary
Version 3.4-dev13 includes numerous bug fixes across various modules like DNS, resolvers, proxy, and HTTP client. It also introduces new features such as automatic chroot, improved hash key support, and enhanced QUIC stream elasticity management.
⚠️ Breaking Changes
- The experimental status has been removed from dynamic backends, meaning they are now considered stable and may be used without the 'experimental' flag.
- TCP ALPN h3 is now rejected without the 'experimental' flag. To use it, ensure the 'experimental' flag is set.
Migration Steps
- Rename the 'token' from mux_proto_list to mux_proto.
✨ New Features
- Added automatic chroot feature for startup.
- Support for unprivileged chroot if possible.
- Support hash-key guid for stabler distribution in backends.
- Support hash-key id32 for cleaner distribution in servers.
- Added MUX <init_xprt> field for QMux handshake.
- Added conn_select_mux_fe() and conn_select_mux_be() to connection handling.
- Allow h3/QMux negotiation without explicit proto in SSL.
- Support stream elasticity during connection lifetime in mux_quic.
- Added USE_TRACE build option to disable traces.
🐛 Bug Fixes
- Corrected parameter value validation in get_server_ph_post().
- Properly failed on duplicate nameserver name detection in config/dns.
- Fixed long loops in additional records parse on name failure in dns.
- Fixed name compression pointer validation in resolv_read_name().
- Fixed memory leak of sockaddr in dns_session_init() error path.
- Better handling of OOM in srv_set_fqdn().
- Used proper source of pool_conn_name in srv_settings_cpy().
- Unlocked server lock on failure in cli_parse_set_server.
- Fixed dangling list pointer in resolvers_new() error paths.
- Fixed dangling dgram pointer on dns_dgram_init() failure path.
- Used proxy_drop() in parse_new_proxy() error path.
- Reported the expression error in the do-resolve() action parser.
- Fixed leaked dgram and dns_ring struct in parse_resolve_conf().
- Fixed leaked fields on cfg_parse_resolvers() error paths.
- Fixed missing task_idle destruction in resolvers_destroy().
- Used distinct flags for SESS_EV_END and _ERR in session/trace.
- Stored the connection error status in sock.
- Properly reported errno in chk_report_conn_err().
- Fixed possible memory leak in convert_ecdsa_sig() error path in jwt.
- Fixed OpenSSL 3.0 version check from > to >= in jws.
- Added missing return value check (EVP_PKEY_get_bn_param) in jws.
- Properly handled init-state value during haproxy startup in server.
- Destroyed http-client context if failing to start it in httpclient-cli.
- Skipped all h2c values from Upgrade headers during parsing in h1.
- Did not mask websocket protocol if multiple protocols used in h1.
- Fixed uninit variable in error label in httpclient-cli.
- Accepted server IDs above 2^31 and clarified error message in server.
- Fixed balance hash calculation when using hash-type none in backend.
- Prevented conn leak in case of xprt_qmux init failure.
- Did not exceed stream.max-concurrent on backend side in mux_quic.
- Fixed value of HTX_XFER_HDRS_ONLY flag in htx.
- Fixed transfer of HTX data to the applet in applet.
- Allocated a chunk of right size in htx_replace_blk_value().
- Did not forget to set srv_hash when needed in servers.
- Fixed committed_extra_streams dec on h2_init() error in h2.
- Do not update committed streams if elasticity disabled in h2.
- Implemented basic committed_extra_streams accounting in mux_quic.
- Used stream elasticity value for initial advertisement in quic.
- Stored the connection hash with the parameter cache in servers.
- Properly account for global.maxpipes in compute_ideal_maxconn() in limits.
Affected Symbols
get_server_ph_post()dns_session_init()resolv_read_name()srv_set_fqdn()srv_settings_cpy()cli_parse_set_serverresolvers_new()dns_dgram_init()parse_new_proxy()resolv_action_do_resolve()parse_resolve_conf()cfg_parse_resolvers()resolvers_destroy()proxy.hhttpclientdnschk_report_conn_err()convert_ecdsa_sig()EVP_PKEY_get_bn_paramhaproxy startuphttp-client contexth2c valuesUpgrade headerswebsocket protocolhaterm master pipemux_proto_listmux_protoconn_select_mux_fe()conn_select_mux_be()MUX <init_xprt>QMux handshakeTCP ALPN h3h3/QMux negotiationserver IDsbalance hash calculationhash-type nonehash-key id32hash-key guidchroot()committed_extra_streamsh2_init()stream elasticitymux_quicms_bidi_relQCC memberparameter cachexprt_qmux initUSE_TRACEglobal.maxpipescompute_ideal_maxconn()HTX_XFER_HDRS_ONLYhtx_xfer APIhtx_replace_blk_value()stick-tablesulongsize_tarray_size_or_fail()