Hi,

HAProxy 2.2-dev1 was released on 2020/01/22. It added 241 new commits
after version 2.2-dev0.

While many of us were apparently serving as a feedback loop between a
screen and a keyboard, time was still flying and 2 months elapsed since
2.1 was released. So I thought it was about time to issue a new
development preview to ease testing.

Let's keep the door open for discussions about upcoming changes for the
next 2 months (till end of March) and reserve the last two months to
finish and fix, aiming at a 2.2 release around end of May.

Now, regarding the changes that came in between 2.1 and 2.2-dev1, I'm
noticing approximately these (for those not listed, sorry if I forgot
your work, feel free to chime in) :

  - a significant number of code cleanups and harmless refactoring
    (connection, dns, HTTP/TCP actions)

  - rework of errorfiles: new "http-errors" sections to ease their share
    between sections, and the ability to specifiy the one to use on "deny"
    rules.

  - DNS traffic reduction for SRV records by reusing information already
    available in extension parts of the response packet

  - better reporting of internal processing errors. In the past, adding
    a header in too large a buffer would be silently ignored. Now we can
    finally fail and report an error by chosing between strict or relaxed
    mode using the "strict-mode" action.

  - some security hardening, such as preventing the creation of processes
    at runtime by default, and preventing the process from switching UIDs
    again, in order to limit the risks of abuses of bugs or uncontrollable
    inherited Lua libraries. This is now enabled by default, and this will
    break external checks, which will require to add the new global option
    "insecure-fork-wanted", and even "insecure-setuid-wanted" if calling a
    setuid binary (both options should ring a bell for the users who really
    want to depend on them).

  - Lua's GC is not systematically called anymore when dealing with outgoing
    connections. This almost doubles the Lua's performance in such use cases.

  - some performance improvements at the connection layer resulting in
    less syscalls on average, especially for epoll.

  - the "debug" converter is now always available and it logs to internal
    event sinks (ring buffer, stdout, stderr).

  - a number of new sample fetch functions expose HTX internals to help
    live debugging.

  - addition of status codes "404" and "410" for http-request deny

  - new "replace-path" HTTP action to help replace old "reqrep" rules. It
    works like replace-uri but only acts on the path. This makes a
    difference in H2 or with absolute requests in HTTP/1.

  - new "attr" field added to the "cookie" directive, in order to set cookie
    attributes when adding persistence cookies.

  - new CLI command "show ssl cert" to report detailed information on loaded
    certificates, such as validity dates, issuer, alt names etc.

  - LDAPv3 alternate output format for ssl_{c,f}_{i,s}_dn sample fetches.

  - de-duplication of ca-file and crl-file, which should also save startup
    speed and memory when there are many of them.

  - 10 new regtests (thanks!)

  - 84 bugs fixed

These are already quite a nice number of improvements. I suspect that next
versions might degrade a little bit as usual depending how things go, which
is also another reason to keep an expectedly clean reference version to work
on. If possible I'd like to release more often for the next ones to keep
changes visible and easy to test.

Ah, last thing, I messed up with the release, there are two RELEASE commits,
don't worry you're not drunk. But I noticed it far too late to fix it with
a forced push, so my punishment will be to look stupid now (I sensed it was
already the case anyway so that's OK).

Please find the usual URLs below :
   Site index       : http://www.haproxy.org/
   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.2/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.2/src/CHANGELOG
   Cyril's HTML doc : http://cbonte.github.io/haproxy-dconv/

Willy
---
Complete changelog :
Baptiste Assmann (2):
      MEDIUM: dns: use Additional records from SRV responses
      BUG/MINOR: http_act: don't check capture id in backend

Ben51Degrees (1):
      BUG/MINOR: 51d: Fix bug when HTX is enabled

Christopher Faulet (84):
      BUG/MINOR: h1: Don't test the host header during response parsing
      BUG/MINOR: http-htx: Don't make http_find_header() fail if the value is 
empty
      BUG/MINOR: fcgi-app: Make the directive pass-header case insensitive
      BUG/MINOR: stats: Fix HTML output for the frontends heading
      BUG/MEDIUM: mux-h1: Never reuse H1 connection if a shutw is pending
      BUG/MINOR: mux-h1: Don't rely on CO_FL_SOCK_RD_SH to set H1C_F_CS_SHUTDOWN
      BUG/MINOR: mux-h1: Fix conditions to know whether or not we may receive 
data
      BUG/MINOR: mux-h1: Be sure to set CS_FL_WANT_ROOM when EOM can't be added
      BUG/MEDIUM: mux-fcgi: Handle cases where the HTX EOM block cannot be 
inserted
      MEDIUM: h1-htx: Add HTX EOM block when the message is in H1_MSG_DONE state
      MINOR: http-htx: Add some htx sample fetches for debugging purpose
      REGTEST: Add an HTX reg-test to check an edge case
      BUG/MAJOR: mux-h1: Don't pretend the input channel's buffer is full if 
empty
      BUG/MEDIUM: stream: Be sure to never assign a TCP backend to an HTX stream
      BUG/MINOR: h1: Report the right error position when a header value is 
invalid
      BUG/MINOR: proxy: Fix input data copy when an error is captured
      BUG/MINOR: channel: inject output data at the end of output
      BUG/MINOR: stream-int: Don't trigger L7 retry if max retries is already 
reached
      MINOR: http-htx: Move htx sample fetches in the scope "internal"
      MINOR: http-htx: Rename 'internal.htx_blk.val' to 'internal.htx_blk.data'
      MINOR: http-htx: Make 'internal.htx_blk_data' return a binary string
      DOC: Add a section to document the internal sample fetches
      MINOR: mux-h1: Inherit send flags from the upper layer
      MINOR: contrib/prometheus-exporter: Add heathcheck status/code in server 
metrics
      BUG/MINOR: http-ana/filters: Wait end of the http_end callback for all 
filters
      BUG/MINOR: http-rules: Remove buggy deinit functions for HTTP rules
      BUG/MINOR: stick-table: Use MAX_SESS_STKCTR as the max track ID during 
parsing
      MEDIUM: http-rules: Register an action keyword for all http rules
      MINOR: tcp-rules: Always set from which ruleset a rule comes from
      MINOR: actions: Use ACT_RET_CONT code to ignore an error from a custom 
action
      MINOR: tcp-rules: Kill connections when custom actions return ACT_RET_ERR
      MINOR: http-rules: Return an error when custom actions return ACT_RET_ERR
      MINOR: counters: Add a counter to report internal processing errors
      MEDIUM: http-ana: Properly handle internal processing errors
      MINOR: http-rules: Add a rule result to report internal error
      MINOR: http-rules: Handle internal errors during HTTP rules evaluation
      MINOR: http-rules: Add more return codes to let custom actions act as 
normal ones
      MINOR: tcp-rules: Handle denied/aborted/invalid connections from TCP rules
      MINOR: http-rules: Handle denied/aborted/invalid connections from HTTP 
rules
      MINOR: stats: Report internal errors in the proxies/listeners/servers 
stats
      MINOR: contrib/prometheus-exporter: Export internal errors per 
proxy/server
      MINOR: counters: Remove failed_secu counter and use denied_resp instead
      MINOR: counters: Review conditions to increment counters from analysers
      MINOR: http-ana: Add a txn flag to support soft/strict message rewrites
      MINOR: http-rules: Handle all message rewrites the same way
      MINOR: http-rules: Add a rule to enable or disable the strict rewriting 
mode
      MEDIUM: http-rules: Enable the strict rewriting mode by default
      REGTEST: Fix format of set-uri HTTP request rule in h1or2_to_h1c.vtc
      MINOR: actions: Add a function pointer to release args used by actions
      MINOR: actions: Regroup some info about HTTP rules in the same struct
      MINOR: http-rules/tcp-rules: Call the defined action function first if 
defined
      MINOR: actions: Rename the act_flag enum into act_opt
      MINOR: actions: Add flags to configure the action behaviour
      MINOR: actions: Use an integer to set the action type
      MINOR: http-rules: Use a specific action type for some custom HTTP actions
      MINOR: http-rules: Make replace-header and replace-value custom actions
      MINOR: http-rules: Make set-header and add-header custom actions
      MINOR: http-rules: Make set/del-map and add/del-acl custom actions
      MINOR: http-rules: Group all processing of early-hint rule in its case 
clause
      MEDIUM: http-rules: Make early-hint custom actions
      MINOR: http-rule/tcp-rules: Make track-sc* custom actions
      MINOR: tcp-rules: Make tcp-request capture a custom action
      MINOR: http-rules: Add release functions for existing HTTP actions
      BUG/MINOR: http-rules: Fix memory releases on error path during action 
parsing
      MINOR: tcp-rules: Add release functions for existing TCP actions
      BUG/MINOR: tcp-rules: Fix memory releases on error path during action 
parsing
      MINOR: http-htx: Add functions to read a raw error file and convert it in 
HTX
      MINOR: http-htx: Add functions to create HTX redirect message
      MINOR: config: Use dedicated function to parse proxy's errorfiles
      MINOR: config: Use dedicated function to parse proxy's errorloc
      MEDIUM: http-htx/proxy: Use a global and centralized storage for HTTP 
error messages
      MINOR: proxy: Register keywords to parse errorfile and errorloc directives
      MINOR: http-htx: Add a new section to create groups of custom HTTP errors
      MEDIUM: proxy: Add a directive to reference an http-errors section in a 
proxy
      MINOR: http-rules: Update txn flags and status when a deny rule is 
executed
      MINOR: http-rules: Support an optional status on deny rules for http 
reponses
      MINOR: http-rules: Use same function to parse request and response deny 
actions
      MINOR: http-ana: Add an error message in the txn and send it when defined
      MEDIUM: http-rules: Support an optional error message in http deny rules
      REGTEST: Add a strict rewriting mode reg test
      REGEST: Add reg tests about error files
      BUG/MINOR: http_htx: Fix some leaks on error path when error files are 
loaded
      CLEANUP: http-ana: Remove useless test on txn when the error message is 
retrieved
      MINOR: proxy/http-ana: Add support of extra attributes for the cookie 
directive

Elliot Otchet (1):
      MINOR: ssl: Add support for returning the dn samples from 
ssl_(c|f)_(i|s)_dn in LDAP v3 (RFC2253) format.

Emmanuel Hocdet (10):
      MINOR: ssl: deduplicate ca-file
      MINOR: ssl: compute ca-list from deduplicate ca-file
      MINOR: ssl: deduplicate crl-file
      BUG/MINOR: ssl: fix SSL_CTX_set1_chain compatibility for openssl < 1.0.2
      BUG/MINOR: ssl: fix X509 compatibility for openssl < 1.1.0
      BUG/MINOR: ssl: certificate choice can be unexpected with openssl >= 1.1.1
      MINOR: ssl: accept 'verify' bind option with 'set ssl cert'
      BUG/MINOR: ssl: ssl_sock_load_ocsp_response_from_file memory leak
      BUG/MINOR: ssl: ssl_sock_load_issuer_file_into_ckch memory leak
      BUG/MINOR: ssl: ssl_sock_load_sctl_from_file memory leak

Florian Tham (2):
      MINOR: http: Add 410 to http-request deny
      MINOR: http: Add 404 to http-request deny

Ilya Shipitsin (8):
      BUILD: travis-ci: link with ssl libraries using rpath instead of 
LD_LIBRARY_PATH/DYLD_LIBRARY_PATH
      BUILD: travis-ci: reenable address sanitizer for clang builds
      BUILD: CI: modernize cirrus-ci
      BUILD: cirrus-ci: choose proper openssl package name
      REGTEST: set_ssl_cert.vtc: replace "echo" with "printf"
      BUILD: CI: introduce ARM64 builds
      BUILD: ssl: more elegant anti-replay feature presence check
      BUG/MINOR: ssl: fix build on development versions of openssl-1.1.x

Jerome Magnin (3):
      BUG/MINOR: stream: don't mistake match rules for store-request rules
      BUG/MINOR: pattern: handle errors from fgets when trying to load patterns
      BUILD: pattern: include errno.h

Julien Pivotto (2):
      DOC: Fix ordered list in summary
      DOC: proxies: HAProxy only supports 3 connection modes

Kevin Zhu (1):
      BUG/MEDIUM: http-ana: Truncate the response when a redirect rule is 
applied

Lukas Tribus (1):
      BUILD: ssl: improve SSL_CTX_set_ecdh_auto compatibility

Mathias Weiersmueller (1):
      DOC: clarify matching strings on binary fetches

Olivier Houchard (12):
      BUG/MEDIUM: tasks: Make sure we switch wait queues in task_set_affinity().
      BUG/MEDIUM: checks: Make sure we set the task affinity just before 
connecting.
      BUG/MEDIUM: kqueue: Make sure we report read events even when no data.
      BUG/MEDIUM: ssl: Don't set the max early data we can receive too early.
      BUG/MEDIUM: ssl: Revamp the way early data are handled.
      BUG/MEDIUM: fd/threads: fix a concurrency issue between add and rm on the 
same fd
      BUG/MEDIUM: checks: Only attempt to do handshakes if the connection is 
ready.
      BUG/MEDIUM: connections: Hold the lock when wanting to kill a connection.
      MINOR: ssl: Remove unused variable "need_out".
      BUG/MEDIUM: tasks: Use the MT macros in tasklet_free().
      BUG/MEDIUM: mux_h1: Don't call h1_send if we subscribed().
      BUG/MEDIUM: raw_sock: Make sur the fd and conn are sync.

Rosen Penev (1):
      BUG/MINOR: ssl: openssl-compat: Fix getm_ defines

Tim Duesterhus (7):
      CLEANUP: ssl: Clean up error handling
      DOC: Clarify behavior of server maxconn in HTTP mode
      MINOR: sample: Validate the number of bits for the sha2 converter
      DOC: Fix copy and paste mistake in http-response replace-value doc
      BUG/MINOR: cache: Fix leak of cache name in error path
      BUG/MINOR: dns: Make dns_query_id_seed unsigned
      CLEANUP: Consistently `unsigned int` for bitfields

William Dauchy (9):
      BUG/MINOR: contrib/prometheus-exporter: decode parameter and value only
      CLEANUP: dns: resolution can never be null
      MINOR: config: disable busy polling on old processes
      CLEANUP: mux-h2: remove unused goto "out_free_h2s"
      CLEANUP: server: remove unused err section in server_finalize_init
      CLEANUP: ssl: remove opendir call in ssl_sock_load_cert
      DOC: clarify crt-base usage
      CLEANUP: compression: remove unused deinit_comp_ctx section
      CLEANUP: proxy: simplify proxy_parse_rate_limit proxy checks

William Lallemand (12):
      DOC: ssl/cli: set/commit/abort ssl cert
      BUG/MINOR: ssl/cli: 'ssl cert' cmd only usable w/ admin rights
      BUG/MINOR: ssl/cli: don't overwrite the filters variable
      MINOR: ssl/cli: 'show ssl cert' give information on the certificates
      BUG/MINOR: ssl/cli: fix build for openssl < 1.0.2
      REGTEST: ssl: test the "set ssl cert" CLI command
      REGTEST: run-regtests: implement #REQUIRE_BINARIES
      BUG/MINOR: cli/mworker: can't start haproxy with 2 programs
      REGTEST: mcli/mcli_start_progs: start 2 programs
      BUG/MEDIUM: mworker: remain in mworker mode during reload
      BUG/MEDIUM: cli: _getsocks must send the peers sockets
      CLEANUP: cli: deduplicate the code in _getsocks

Willy Tarreau (84):
      DOC: this is development again
      MINOR: version: this is development again, update the status
      SCRIPTS: update create-release to fix the changelog on new branches
      BUILD/MINOR: trace: fix use of long type in a few printf format strings
      DOC: move the "group" keyword at the right place
      MEDIUM: init: prevent process and thread creation at runtime
      BUG/MEDIUM: stream-int: don't subscribed for recv when we're trying to 
flush data
      BUG/MINOR: stream-int: avoid calling rcv_buf() when splicing is still 
possible
      BUG/MEDIUM: listener/thread: fix a race when pausing a listener
      MINOR: debug: replace popen() with pipe+fork() in "debug dev exec"
      MEDIUM: init: set NO_NEW_PRIVS by default when supported
      BUG/MINOR: proxy: make soft_stop() also close FDs in LI_PAUSED state
      BUG/MINOR: listener/threads: always use atomic ops to clear the FD events
      BUG/MINOR: listener: also clear the error flag on a paused listener
      BUG/MEDIUM: listener/threads: fix a remaining race in the listener's 
accept()
      MINOR: listener: make the wait paths cleaner and more reliable
      MINOR: listener: split dequeue_all_listener() in two
      REORG: listener: move the global listener queue code to listener.c
      DOC: document the listener state transitions
      BUG/MAJOR: dns: add minimalist error processing on the Rx path
      BUG/MEDIUM: proto_udp/threads: recv() and send() must not be exclusive.
      DOC: listeners: add a few missing transitions
      BUG/MINOR: tasks: only requeue a task if it was already in the queue
      MINOR: tasks: split wake_expired_tasks() in two parts to avoid useless 
wakeups
      DOC: remove references to the outdated architecture.txt
      BUG/MINOR: log: fix minor resource leaks on logformat error path
      BUG/MINOR: mworker: properly pass SIGTTOU/SIGTTIN to workers
      BUG/MINOR: listener: do not immediately resume on transient error
      BUG/MINOR: server: make "agent-addr" work on default-server line
      BUG/MINOR: listener: fix off-by-one in state name check
      BUILD/MINOR: unix sockets: silence an absurd gcc warning about strncpy()
      DOC: clarify the fact that replace-uri works on a full URI
      BUG/MINOR: sample: fix the closing bracket and LF in the debug converter
      BUG/MINOR: sample: always check converters' arguments
      MINOR: debug: support logging to various sinks
      MINOR: http: add a new "replace-path" action
      MINOR: task: only check TASK_WOKEN_ANY to decide to requeue a task
      BUG/MAJOR: task: add a new TASK_SHARED_WQ flag to fix foreing requeuing
      MINOR: fd/threads: make _GET_NEXT()/_GET_PREV() use the volatile attribute
      REGTEST: make the "set ssl cert" require version 2.1
      BUG/MEDIUM: state-file: do not allocate a full buffer for each server 
entry
      BUG/MINOR: state-file: do not store duplicates in the global tree
      BUG/MINOR: state-file: do not leak memory on parse errors
      BUG/MINOR: checks: refine which errno values are really errors.
      BUG/MINOR: connection: only wake send/recv callbacks if the FD is active
      CLEANUP: connection: conn->xprt is never NULL
      MINOR: pollers: add a new flag to indicate pollers reporting ERR & HUP
      MEDIUM: tcp: make tcp_connect_probe() consider ERR/HUP
      REORG: connection: move tcp_connect_probe() to conn_fd_check()
      MINOR: connection: check for connection validation earlier
      MINOR: connection: remove the double test on xprt_done_cb()
      CLEANUP: connection: merge CO_FL_NOTIFY_DATA and CO_FL_NOTIFY_DONE
      MINOR: poller: do not call the IO handler if the FD is not active
      OPTIM: epoll: always poll for recv if neither active nor ready
      OPTIM: polling: do not create update entries for FD removal
      BUG/MEDIUM: session: do not report a failure when rejecting a session
      MEDIUM: dns: implement synchronous send
      MINOR: raw_sock: make sure to disable polling once everything is sent
      BUG/MAJOR: listener: do not schedule a task-less proxy
      BUG/MINOR: mux-h2: use a safe list_for_each_entry in h2_send()
      BUG/MEDIUM: mux-h2: fix missing test on sending_list in previous patch
      MEDIUM: lua: don't call the GC as often when dealing with outgoing 
connections
      BUG/MEDIUM: mux-h2: don't stop sending when crossing a buffer boundary
      BUG/MAJOR: hashes: fix the signedness of the hash inputs
      REGTEST: add sample_fetches/hashes.vtc to validate hashes
      BUG/MEDIUM: connection: add a mux flag to indicate splice usability
      MINOR: connection: move the CO_FL_WAIT_ROOM cleanup to the reader only
      MINOR: stream-int: remove dependency on CO_FL_WAIT_ROOM for rcv_buf()
      MEDIUM: connection: get rid of CO_FL_CURR_* flags
      MEDIUM: mux-h2: do not try to stop sending streams on blocked mux
      MEDIUM: mux-fcgi: do not try to stop sending streams on blocked mux
      MEDIUM: mux-h2: do not make an h2s subscribe to itself on deferred shut
      MEDIUM: mux-fcgi: do not make an fstrm subscribe to itself on deferred 
shut
      REORG: stream/backend: move backend-specific stuff to backend.c
      MEDIUM: backend: move the connection finalization step to 
back_handle_st_con()
      MEDIUM: connection: merge the send_wait and recv_wait entries
      MEDIUM: xprt: merge recv_wait and send_wait in xprt_handshake
      MEDIUM: ssl: merge recv_wait and send_wait in ssl_sock
      MEDIUM: mux-h1: merge recv_wait and send_wait
      MEDIUM: mux-h2: merge recv_wait and send_wait event notifications
      MEDIUM: mux-fcgi: merge recv_wait and send_wait event notifications
      MINOR: connection: make the last arg of subscribe() a struct wait_event*
      CLEANUP: pattern: remove the pat_time definition
      [RELEASE] Released version 2.2-dev1

---

Reply via email to