Hi,

HAProxy 2.6-dev11 was released on 2022/05/20. It added 106 new commits
after version 2.6-dev10.

Yes, there were still too many changes for a final version, that's often
like this when getting close to a release. And I couldn't finish the
renaming of the confusing stuff in the conn_stream layer, for which I'll
rely on Christopher's help next week. I now understand the trouble some
developers face when creating an applet and why the only practical
solution is to copy-paste existing stuff, because even some of the
existing functions' comments are ambiguous if you stumble on them with
the wrong idea of what they do, and I absolutely want to address this
for the release, or it will further complicate development in new
versions, or maintenance of 2.6 if we rename later.

Most of the changes are of minor importance, or bug fixes though, but
some are particularly interesting:

 - on the SSL front, a few global settings were added to configure the
   ssl-providers that come with OpenSSL 3 to replace the engines. At this
   point it's not totally clear to me how this will evolve, but since
   these are just global settings that are very likely to become necessary
   mid-term, it's better if they're readily available.

 - QUIC now provides a number of counters of retries, errors etc, and
   finally supports the Retry mechanism, which is the QUIC equivalent of
   the TCP SYN cookies. These are used to validate a client's connection
   request and make sure it's not a spoofed packet. They can be forced, or
   will be automatically enabled when a configurable number of incoming
   connections are not yet confirmed. This is done via the global
   "tune.quic.retry-threshold" parameter. BTW I'm just seeing that it's
   not documented yet; Fred, please do not forget to update it!

 - outgoing applets now support delayed initialization. I know it's a bit
   late for merging this but it addresses a long-existing problem with the
   peers and that could possibly be further emphasized with the http client.
   The problem was that outgoing applets were only created on the thread
   that required them, and for peers it was created during config parsing,
   thus all outgoing applets were on thread 1, possibly eating a lot of
   CPU on this thread. That's the issue that Maciej Zdeb reported a month
   ago. Maciej tried to address this but there was a chicken-and-egg issue
   that made it impossible to create the applets on another thread. Now
   that they can be initialized later, it's possible to schedule them on
   any thread, and Maciej's patches could be integrated as well, so the
   peers will no longer aggregate mostly on one thread.

 - a QUIC flow-control limitation that was preventing large POST requests
   from working was addressed, so with this last limitation removed, the
   stack is expected to be fully operational. In addition, the HTTP/3
   decoder now has better latency as it doesn't need to wait for a full
   data frame anymore before starting to decode and forward it.

 - a new global setting "cluster-secret" was added. For now it's only used
   by QUIC for cluster-wide crypto such as retries so that a connection
   retry can be validated by any node. It will likely be used for more QUIC
   stuff, and it makes sense to use it for anything else that is cluster-wide
   in the future so the option was named without "quic" in its name.

 - New option "http-restrict-req-hdr-names" was added at the proxy level.
   It can be used to inspect HTTP header names and decide what to do with
   those having any character other than alphanumerical or dash ("-"),
   either delete the header or reject the request. The purpose is to help
   protect application servers that map dash to underscore due to CGI
   inheritance, or worse, which crash when passed such characters. The
   option is automatically set to the delete mode in backends having
   FastCGI configured. This will eventually be backported, because we got
   reports of such broken application servers deployed in field where site
   owners count on haproxy to work around this problem.

 - some configuration issues related to QUIC remained, by which it was
   possible to combine incompatible values of "proto" and sockets, such
   as a QUIC bind with a "proto h2" or no "proto", or "proto quic" on a
   TCP line, or a QUIC address used in peers, or "quic" without "ssl" etc.
   And such combinations were problematic at runtime because the QUIC mux
   and transport cannot be split apart, so each being used with the wrong
   other part caused immediate crashes. This is what made "proto quic"
   mandatory for QUIC bind lines. This was finally sorted out so that
   incompatible combinations are now rejected at parsing time, "ssl" is
   implied but warns that it's missing, and that "proto quic" is no more
   necessary, as implied by the presence of "quic" in the address which
   implies the use of QUIC connections.

 - some build fixes on FreeBSD 13.1 and Solaris

 - the rest is essentially code cleanups

I essentially expect cleanups and fixes next week. If we face trouble,
there will be a dev12 by the end of the week. Otherwise we could imagine
releasing on Monday or Tuesday. So please test it, beat it, and report
problems. If you're curious about a feature that you expect to use soon,
please have a look at the related doc and report any confusing part you
would notice (or better, please propose fixes).

Please find the usual URLs below :
   Site index       : http://www.haproxy.org/
   Documentation    : http://docs.haproxy.org/
   Wiki             : https://github.com/haproxy/wiki/wiki
   Discourse        : http://discourse.haproxy.org/
   Slack channel    : https://slack.haproxy.org/
   Issue tracker    : https://github.com/haproxy/haproxy/issues
   Sources          : http://www.haproxy.org/download/2.6/src/
   Git repository   : http://git.haproxy.org/git/haproxy.git/
   Git Web browsing : http://git.haproxy.org/?p=haproxy.git
   Changelog        : http://www.haproxy.org/download/2.6/src/CHANGELOG
   Pending bugs     : http://www.haproxy.org/l/pending-bugs
   Reviewed bugs    : http://www.haproxy.org/l/reviewed-bugs
   Code reports     : http://www.haproxy.org/l/code-reports
   Latest builds    : http://www.haproxy.org/l/dev-packages

Willy
---
Complete changelog :
Amaury Denoyelle (25):
      BUG/MEDIUM: ncbuf: fix null buffer usage
      MINOR: ncbuf: fix warnings for testing build
      BUG/MEDIUM: quic: fix Rx buffering
      OPTIM: quic: realign empty Rx buffer
      BUG/MINOR: ncbuf: fix ncb_is_empty()
      MINOR: ncbuf: refactor ncb_advance()
      BUG/MINOR: mux-quic: update session's idle delay before stream creation
      MINOR: h3: do not wait a complete frame for demuxing
      MINOR: h3: flag demux as full on HTX full
      MEDIUM: mux-quic: implement recv on io-cb
      MINOR: mux-quic: remove qcc_decode_qcs() call in XPRT
      MINOR: mux-quic: reorganize flow-control frames emission
      MINOR: mux-quic: implement MAX_STREAM_DATA emission
      MINOR: mux-quic: implement MAX_DATA emission
      BUG/MINOR: mux-quic: support nul buffer with qc_free_ncbuf()
      MINOR: mux-quic: free RX buf if empty
      BUG/MINOR: quic: break for error on sendto
      MINOR: quic: abort on unlisted errno on sendto()
      MINOR: quic: detect EBADF on sendto()
      BUG/MEDIUM: quic: fix initialization for local/remote TPs
      CLEANUP: quic: adjust comment/coding style for TPs init
      MINOR: quic/mux-quic: define CONNECTION_CLOSE send API
      MINOR: mux-quic: emit FLOW_CONTROL_ERROR
      MINOR: mux-quic: emit STREAM_LIMIT_ERROR
      MINOR: mux-quic: close connection on error if different data at offset

Christopher Faulet (30):
      MEDIUM: http-ana: Add a proxy option to restrict chars in request header 
names
      CLEANUP: conn-stream: Remove cs_applet_shut declaration from header file
      MINOR: applet: Prepare appctx to own the session on frontend side
      MINOR: applet: Let the frontend appctx release the session
      MINOR: applet: Change return value for .init callback function
      MINOR: stream: Export stream_free()
      MINOR: applet: Add appctx_init() helper fnuction
      MINOR: applet: Add a function to finalize frontend appctx startup
      MINOR: applet: Add function to release appctx on error during init stage
      MEDIUM: dns: Refactor dns appctx creation
      MEDIUM: spoe: Refactor SPOE appctx creation
      MEDIUM: lua: Refactor cosocket appctx creation
      MEDIUM: httpclient: Refactor http-client appctx creation
      MINOR: sink: Add a ref to sink in the sink_forward_target structure
      MEDIUM: sink: Refactor sink forwarder appctx creation
      MINOR: peers: Add a ref to peers section in the peer structure
      MEDIUM: peers: Refactor peer appctx creation
      MINOR: applet: Add API to start applet on a thread subset
      MEDIUM: applet: Add support for async appctx startup on a thread subset
      MINOR: conn-stream/applet: Stop setting appctx as the endpoint context
      CLEANUP: proxy: Remove dead code when parsing 
"http-restrict-req-hdr-names" option
      REGTESTS: abortonclose: Fix some race conditions
      BUG/MINOR: spoe: Fix error handling in spoe_init_appctx()
      CLEANUP: peers: Remove unreachable code in peer_session_create()
      CLEANUP: httpclient: Remove useless test on ss_dst in 
httpclient_applet_init()
      BUG/MEDIUM: config: Reset outline buffer size on realloc error in 
readcfgfile()
      BUG/MINOR: check: Reinit the buffer wait list at the end of a check
      MEDIUM: check: No longer shutdown the connection in .wake callback 
function
      REORG: check: Rename and export I/O callback function
      MEDIUM: check: Use the CS to handle subscriptions for read/write events

David CARLIER (1):
      BUILD/MINOR: cpuset fix build for FreeBSD 13.1

David Carlier (2):
      BUILD: fix build warning on solaris based systems with __maybe_unused.
      MINOR: tools: add get_exec_path implementation for solaris based systems.

Frédéric Lécaille (15):
      MINOR: quic: Dump initial derived secrets
      MINOR: quic_tls: Add quic_tls_derive_retry_token_secret()
      MINOR: quic_tls: Add quic_tls_decrypt2() implementation
      MINOR: quic: Retry implementation
      MINOR: cfgparse: Update for "cluster-secret" keyword for QUIC Retry
      MINOR: quic: Move quic_lstnr_dgram_dispatch() out of xprt_quic.c
      BUILD: stats: Missing headers inclusions from stats.h
      MINOR: quic_stats: Add a new stats module for QUIC
      MINOR: quic: Attach proxy QUIC stats counters to the QUIC connection
      BUG/MINOR: quic: Fix potential memory leak during QUIC connection 
allocations
      MINOR: quic: QUIC stats counters handling
      MINOR: quic: Add tune.quic.retry-threshold keyword
      MINOR: quic: Dynamic Retry implementation
      BUG/MINOR: quic: Fixe a typo in qc_idle_timer_task()
      BUG/MINOR: quic: Missing <conn_opening> stats counter decrementation

Ilya Shipitsin (2):
      CI: determine actual LibreSSL version dynamically
      CI: determine actual OpenSSL version dynamically

Maciej Zdeb (2):
      MINOR: peers: Track number of applets run by thread
      MEDIUM: peers: Balance applets across threads

Remi Tricot-Le Breton (5):
      MEDIUM: ssl: Delay random generator initialization after config parsing
      MINOR: ssl: Add 'ssl-propquery' global option
      MINOR: ssl: Add 'ssl-provider' global option
      BUG/MINOR: ssl: Fix crash when no private key is found in pem
      MINOR: ssl: Add 'ssl-provider-path' global option

Tim Duesterhus (4):
      CLEANUP: Add missing header to ssl_utils.c
      CLEANUP: Add missing header to hlua_fcn.c
      CLEANUP: Remove unused function hlua_get_top_error_string
      CLEANUP: http_ana: Make use of the return value of 
stream_generate_unique_id()

Willy Tarreau (20):
      BUG/MINOR: cfgparse: abort earlier in case of allocation error
      BUG/MINOR: peers: fix error reporting of "bind" lines
      CLEANUP: config: improve address parser error report for unmatched 
protocols
      CLEANUP: config: provide cleare hints about unsupported QUIC addresses
      MINOR: protocol: replace ctrl_type with xprt_type and clarify it
      MINOR: listener: provide a function to process all of a bind_conf's 
arguments
      MINOR: config: use the new bind_parse_args_list() to parse a "bind" line
      CLEANUP: listener: add a comment about what the BC_SSL_O_* flags are for
      MINOR: listener: add a new "options" entry in bind_conf
      CLEANUP: listener: replace all uses of bind_conf->is_ssl with BC_O_USE_SSL
      CLEANUP: listener: replace bind_conf->generate_cers with 
BC_O_GENERATE_CERTS
      CLEANUP: listener: replace bind_conf->quic_force_retry with 
BC_O_QUIC_FORCE_RETRY
      CLEANUP: listener: store stream vs dgram at the bind_conf level
      MINOR: listener: detect stream vs dgram conflict during parsing
      MINOR: listener: set the QUIC xprt layer immediately after parsing the 
args
      MINOR: listener/ssl: set the SSL xprt layer only once the whole config is 
known
      MINOR: connection: add flag MX_FL_FRAMED to mark muxes relying on framed 
xprt
      MINOR: config: detect and report mux and transport incompatibilities
      MINOR: listener: automatically select a QUIC mux with a QUIC transport
      MINOR: listener: automatically enable SSL if a QUIC transport is found

---

Reply via email to