Change8

v3.4-dev8

Breaking Changes
📦 haproxyView on GitHub →
1 breaking34 features🐛 46 fixes🔧 38 symbols

Summary

This release introduces significant improvements to logging, scheduling, and buffer management, alongside numerous bug fixes and new features for ACME, HTTP actions, and TCP checks. Key changes include the split of logging functions, enhanced scheduler behavior, and the introduction of small buffer support across various modules.

⚠️ Breaking Changes

  • The `htx_xfer_blks()` function has been replaced by `htx_xfer()`. Code using `htx_xfer_blks()` will need to be updated to use the new function.

Migration Steps

  1. Update code that uses `htx_xfer_blks()` to use `htx_xfer()` instead.

✨ New Features

  • Introduced `do_log_ctx()` as a split from `do_log()` for better context management in logging.
  • Added the ability to override logger->profile from `process_send_log_ctx()`.
  • Support for an optional 'profile <log_profile_name>' argument to the `do-log` action.
  • Scheduler now prevents running the same task multiple times in series.
  • Scheduler will not requeue a tasklet into the current queue.
  • Scheduler will not punish self-waking tasklets anymore, with specific handling for `TASK_WOKEN_ANY`.
  • Scheduler budgets have been adjusted to lower `TL_BULK`.
  • A limited frames processing budget has been assigned to `mux-h2`.
  • Introduced `htx_xfer` function to replace `htx_xfer_blks`.
  • Added helper functions to `htx` for transferring messages between smaller or larger buffers.
  • HTTP analysis (`http-ana`) now uses the HTX API to move data to a large buffer.
  • Added support for small chunks in the `chunk` module.
  • The `stream` module now attempts to use a small buffer for HTTP requests when queuing.
  • The `stream` module now attempts to use a small buffer when a TCP stream is queued.
  • The `stconn` module now uses a small buffer if possible for L7 retries.
  • The `tcpcheck` module now uses a small buffer if possible for healthchecks.
  • Added the `use-small-buffers` option to configure where small buffers are used.
  • Basic TXT record implementation for resolvers.
  • ACME module now stores the TXT record in `auth->token`.
  • Added DNS propagation pre-check for the DNS-01 challenge in ACME.
  • Introduced a new 'challenge-ready' option for ACME.
  • Added `set-headers-bin`, `add-headers-bin`, and `del-headers-bin` actions.
  • Stats module now hides the version by default and includes `stats-showversion`.
  • Added a sample expression field in arguments used by HTTP actions.
  • Reworked `*-headers-bin` actions in `http_act`.
  • Refactored how `tcp-check` rulesets are stored.
  • Added handling for `disable-on-404` and `send-state` within the `tcp-check` itself.
  • Added a flag to `tcpcheck` to indicate if a healthcheck uses SSL connections.
  • Added a function to stringify the healthcheck type in `tcpcheck`.
  • Split parsing functions in `tcpcheck` to prepare for healthcheck sections parsing.
  • Added parsing support for healthcheck sections in `tcpcheck`.
  • Extracted `tcpheck` ruleset post-configuration into a dedicated function.
  • Added `healthcheck server` keyword in `tcpcheck/server`.
  • Added the 'dns-timeout' keyword for the DNS-01 challenge in ACME.

🐛 Bug Fixes

  • Adjusted `accept()` error messages for `ENFILE` and `ENOMEM` in the `sock` module.
  • Fixed 62-bit overflow and 1-byte OOB reads in QPACK decoding.
  • Fixed multiple resource leaks in `acme_x509_req()`.
  • Fixed a leak of `ext_san` upon insertion error in ACME.
  • Corrected error message when checking for duplicate sections in ACME.
  • Fixed argument check in 'acme renew' command.
  • Fixed null dereference in `http-errors` config check.
  • Moved small buffers management from QUIC to dynbuf part.
  • Added helper functions to `dynbuf` for allocating large and small buffers.
  • QUIC module now uses `b_alloc_small()` to allocate small buffers.
  • Relaxed tests on the configured size of small buffers in the `config` module.
  • Reports a warning when an invalid large buffer size is set in `config`.
  • Reverted a change related to reporting pending errors to the stream in `mux-h2`.
  • Fixed leftover debugging test in single-run changes for `sched` build.
  • Fixed null check on `my_strndup()` in ACME.
  • Freed DER buffer on `a2base64url` error path in ACME.
  • Replaced `atol` with length-bounded `__strl2uic()` for `retry-after` in ACME.
  • Fixed argument check and error in 'acme challenge_ready'.
  • Potential null pointer dereference in `dl_collect_libs_cb` in `tools` build.
  • Fixed permission checks on the CLI for `ech`.
  • Fixed permission checks on the CLI for ACME.
  • Prevented reuse of the server xprt if it should not be reused in `check`.
  • Stored the protocol to be used in `struct check`.
  • Removed a useless `memset()` in `srv_update_check_addr_port` in `server`.
  • Warns only if `warnif_cond_conflicts` reports a conflict in `config`.
  • Properly tested `warnif_misplaced_*` return values in `config`.
  • Only considers client abort for `abortonclose` in `http-ana`.
  • Skips doing challenge if it is already valid in ACME.
  • Fixed task allocation leak upon error in ACME.
  • Fixed `htx_xfer()` to consume more data than expected.
  • Fixed tag listing by implementing proper API pagination in `github` CI.
  • Fixed typos and spelling in comments and documentation.
  • Closed connection on packet reception with incompatible frame in QUIC.
  • Removed useless `sc_new_from_haterm()` declaration in `stconn`.
  • Always declared the SC created from healthchecks as a back SC in `stconn`.
  • Reported glitches on early `RST_STREAM` in `mux-h2`.
  • Fixed length controls on `ip.fp` TCP options parsing in `net_helper`.
  • Fixed unterminated comment that broke the build in `net_helper`.
  • Fixed `set/add-headers-bin` actions to be compatible with ACL conditions.
  • Removed unexpected flag on `tcpcheck` rules for `httchck` option.
  • Prevented enabling `http_needed` when parsing HTTP samples in `tcpcheck`.
  • Used `tcpcheck` context for expressions parsing.
  • Removed needless exposure of `proxy_parse_tcpcheck()` in `tcpcheck`.
  • Fixed typo in comment in `net_helper`.
  • Don't set `MSG_MORE` on bodyless responses forwarded to client in `mux-h1`.
  • Properly handle decoding errors in `*-headers-bin` actions in `http_act`.

Affected Symbols