                                                         -*- coding: utf-8 -*-
Changes with Apache 2.5.1

  *) mod_authnz_ldap.c: Make sure the authentication variables are set in
     all cases where another module is the source of the authentication,
     and that authenticated user is looked up in LDAP. [Graham Leggett]

  *) mod_autht_jwt: New module to handle RFC 7519 JWT tokens within
     bearer tokens, both as part of the aaa framework, and as a way to
     generate tokens and pass them to backend servers and services.
     [Graham Leggett]

  *) mod_auth_bearer: New module to handle RFC 6750 Bearer tokens, using
     the token_checker hook. [Graham Leggett]

  *) mod_autht_core: New module to handle provider aliases for token
     authentication. [Graham Leggett]

  *) core: Add the token_checker hook, that allows authentication to take
     place using mechanisms other than username/password, such as bearer
     tokens. [Graham Leggett]

  *) mod_alias: When an alias is declared inside a Location, make sure
     the balance of the URL is preserved to match the alias declared
     outside a location. Fixes an error where all requests are mapped
     to the root of the location. [Graham Leggett]

  *) core: Be explicit if an enclosing directive contains a path or a
     regex. [Graham Leggett]

  *) mod_http2: fixed a crash during connection termination. See PR 66539.
     [Stefan Eissing]

  *) mod_mime: Do not match the extention against possible query string
     parameters in case ProxyPass was used with the nocanon option.
     [Ruediger Pluem]

  *) mod_proxy: In case that AllowEncodedSlashes is set to NoDecode do not
     double encode encoded slashes in the URL sent by the reverse proxy to the
     backend. [Ruediger Pluem]

  *) mod_rewrite: Add BCTLS flag similar to B, but only escaping the characters
     checked by 2.4.56 in the query string. [Eric Covener]

  *) mod_md:
     - Enabling ED25519 support and certificate transparency information when
       building with libressl v3.5.0 and newer. Thanks to Giovanni Bechis.
     - MDChallengeDns01 can now be configured for individual domains.
       Thanks to Jérôme Billiras (@bilhackmac) for the initial PR.
     - Fixed a bug found by Jérôme Billiras (@bilhackmac) that caused the challenge
       teardown not being invoked as it should.
     [Stefan Eissing]

  *) core: Add formats %{z} and %{strftime-format} to ErrorLogFormat, and make
     sure that if the format is configured early enough it applies to every log
     line.  PR 62161.  [Yann Ylavic]

  *) mod_proxy: Check before forwarding that a nocanon path has not been
     rewritten with spaces during processing.  [Yann Ylavic]

  *) mod_rewrite: Re-allow some proxy and redirect substitutions flagged as
     403 errors in 2.4.56. [Eric Covener]

  *) mod_rewrite: Fix a 2.4.56 regression for substitutions ending
     in a question mark. [Eric Covener]

  *) Add a SSL_SHARED_CIPHER environment variable with the list of
     client/server permitted ciphers. [Dirk-Willem van Gulik]

  *) mod_http2: field values (headers and trailers) are stripped of
     leading/trailing whitespace (space +htab) before being processed
     or send in a response. This is compatible behaviour to HTTP/1.1
     parsers that strip incoming headers of such characters.
     [Stefan Eissing]

  *) build: Use 'command -v' instead of 'which' which is more portable.
     PR 66130 [Sam James <sam@gentoo.org>]

  *) mod_dav: Allow to disable lock discovery via an DAVLockDiscovery
     expression (per-request). PR 66313. [Emmanuel Dreyfus <manu netbsd.org>]

  *) mod_ssl: when a proxy connection had handled a request using SSL, an
     error was logged when "SSLProxyEngine" was only configured in the
     location/proxy section and not the overall server. The connection
     continued to work, the error log was in error. Fixed PR66190.
     [Stefan Eissing]

  *) mod_proxy: Ignore (and warn about) enablereuse=on for ProxyPassMatch when
     some dollar substitution (backreference) happens in the hostname or port
     part of the URL.  [Yann Ylavic]

  *) rotatelogs: Add -T flag to allow subsequent rotated logfiles to be
     truncated without the initial logfile being truncated.  [Eric Covener]

  *) mod_md: a new directive `MDStoreLocks` can be used on cluster
     setups with a shared file system for `MDStoreDir` to order
     activation of renewed certificates when several cluster nodes are
     restarted at the same time. Store locks are not enabled by default.
     Restored curl_easy cleanup behaviour from v2.4.14 and refactored
     the use of curl_multi for OCSP requests to work with that.
     Fixes <https://github.com/icing/mod_md/issues/293>.

  *) mod_proxy_ajp: Report an error if the AJP backend sends an invalid number
     of headers. [Ruediger Pluem]

  *) mod_proxy_http2: apply the standard httpd content type handling
     to responses from the backend, as other proxy modules do. Fixes PR 66391.
     Thanks to Jérôme Billiras for providing the patch.
     [Stefan Eissing]

  *) mod_http2: fixed trailer handling. Empty response bodies
     prevented trailers from being sent to a client. See
     <https://github.com/icing/mod_h2/issues/233> for how
     this affected gRPC use.
     [Stefan Eissing]

  *) mod_proxy_http2: use only the ':authority' header to forward 'Host'
     information to a backend. Deduce ':authority' from what the client
     sent when 'ProxyPreserveHost' is on.
     [Stefan Eissing]

  *) core: Improve the AH00124 error message about too many redirects by logging
     the URI of the request. PR 66403 [Ruediger Pluem]

  *) mod_proxy_uwsgi: Stricter backend HTTP response parsing/validation.
     [Yann Ylavic]

  *) mod_http2: new directive 'H2MaxDataFrameLen n' to limit the maximum
     amount of response body bytes put into a single HTTP/2 DATA frame.
     Setting this to 0 places no limit (but the max size allowed by the
     protocol is observed).
     The module, by default, tries to use the maximum size possible, which is
     somewhat around 16KB. This sets the maximum. When less response data is
     available, smaller frames will be sent.

  *) mod_http2: client resets of HTTP/2 streams led to unwanted 500 errors
     reported in access logs and error documents. The processing of the
     reset was correct, only unneccesary reporting was caused.
     [Stefan Eissing]

  *) mod_proxy: Fix double encoding of the uri-path of the request forwarded
     to the origin server, when using mapping=encoded|servlet.  [Yann Ylavic]

  *) mod_dav: Open the lock database read-only when possible.
     PR 36636 [Wilson Felipe <wfelipe gmail.com>, manu]

  *) mod_ldap: LDAPConnectionPoolTTL should accept negative values in order to
     allow connections of any age to be reused. Up to now, a negative value
     was handled as an error when parsing the configuration file.  PR 66421.
     [nailyk <bzapache nailyk.fr>, Christophe Jaillet]

  *) mod_proxy_hcheck: Re-enable workers in standard ERROR state. PR 66302.
     [Alessandro Cavaliere <alessandro.cavalier7 unibo.it>]

  *) mod_proxy_hcheck: Detect AJP/CPING support correctly. PR 66300.
     [Alessandro Cavaliere <alessandro.cavalier7 unibo.it>]

  *) mod_proxy_hcheck: hcmethod now allows for HTTP/1.1 requests
     using GET11, HEAD11 and/or OPTIONS11. [Jim Jagielski]

  *) mod_md:  a bug was fixed that caused very large MDomains
     with the combined DNS names exceeding ~7k to fail, as
     request bodies would contain partially wrong data from
     uninitialized memory. This would have appeared as failure
     in signing-up/renewing such configurations.
     [Stefan Eissing, Ronald Crane (Zippenhop LLC)]

  *) mod_proxy_http: Avoid 417 responses for non forwardable 100-continue.
     PR 65666.  [Yann Ylavic]

  *) mod_ssl: SSLFIPS compatible with OpenSSL 3.0.  PR 66063.
     [Petr Sumbera <petr.sumbera oracle.com>, Yann Ylavic]

  *) core: the conf/mime.types has been updated in conformance with RFC 9239:
     - .js moved from 'application/javascript' to 'text/javascript'
     - .mjs was added as 'text/javascript'
     [Mathias Bynens <@mathiasbynens> via PR 318]

  *) mod_md: the `MDCertificateAuthority` directive can take more than one URL/name of
     an ACME CA. This gives a failover for renewals when several consecutive attempts
     to get a certificate failed.
     A new directive was added: `MDRetryDelay` sets the delay of retries.
     A new directive was added: `MDRetryFailover` sets the number of errored
     attempts before an alternate CA is selected for certificate renewals.
     [Stefan Eissing]

  *) mod_heartmonitor: Set the documented default value
     "10" for HeartbeatMaxServers instead of "0". With "0"
     no shared memory slotmem was initialized. [Rainer Jung]

  *) mod_md:  fixed a bug leading to failed transfers for OCSP
     stapling information when more than 6 certificates needed
     updates in the same run. [Stefan Eissing]

  *) mod_http2: use the new REQUEST buckets to forward request
     on secondary connections. Use the now generic
     ap_process_connection() in h2 workers to process those.
     [Stefan Eissing]

  *) Implement full auto status ("key: value" type status output).
     Especially not only status summary counts for certificates and
     OCSP stapling but also lists. Auto status format is similar to
     what was used for mod_proxy_balancer.
     [Rainer Jung]

  *) core/mod_http: use REQUEST meta buckets and a new HTTP/1.x specific
     input filter to separate the handling for HTTP requests from the
     handling of HTTP/1.x request parsing and checks.
     A new HTTP1_REQUEST_IN filter installs itself on http/1.1 connections
     before a request is being read. It generates either a REQUEST meta
     bucket on success or an ERROR bucket with the proposed response status.
     The core connection processing, relying on ap_read_request(), now expects
     a REQUEST or ERROR bucket from the input filters and is agnostic to
     specific HTTP versions and how they bring requests into the server.
     [Stefan Eissing]

  *) mod_http2: remove unused and insecure code. Fixes PR66037.
     Thanks to Ronald Crane (Zippenhop LLC) for reporting this.
     [Stefan Eissing]

  *) mod_md: added support for managing certificates via a
     local tailscale demon for users of that secure networking.
     This gives trusted certificates for tailscale  assigned
     domain names in the *.ts.net space.
     [Stefan Eissing]

  *) mod_md: a possible NULL pointer deref was fixed in
     the JSON code for persisting time periods (start+end).
     Fixes #282 on mod_md's github.
     Thanks to @marcstern for finding this.

  *) core: Avoid an overflow on large inputs in ap_is_matchexp.  PR 66033
     [Ruediger Pluem]

  *) core/mod_http: use RESPONSE meta buckets and a new HTTP/1.x specific
     filter to send responses through the output filter chain.
     Specifically: the HTTP_HEADER output filter and ap_send_interim_response()
     create a RESPONSE bucket and no longer are concerned with HTTP/1.x
     serialization.
     A new HTTP1_RESPONSE_OUT transcode filter writes the proper HTTP/1.x
     bytes when dealing with a RESPONSE bucket. That filter installs itself
     on the pre_read_request hook when the connection has protocol 'http/1.1'.
     [Stefan Eissing]

  *) MPM event: Restart children processes killed before idle maintenance.
     PR 65769.  [Yann Ylavic, Ruediger Pluem]

  *) core: Disable TCP_NOPUSH optimization on OSX since it might introduce
     transmission delays.  PR 66019.  [Yann Ylavic]

  *) ab: Allow for TLSv1.3 when the SSL library supports it.
     [abhilash1232 gmail.com, xiaolongx.jiang intel.com, Yann Ylavic]

  *) ab: Add the -W option to use worker threads, allowing for multiple CPUs
     to handle the load.  [Yann Ylavic]

  *) mod_substitute: Fix an integer overflow that can happen in very special
     setups.  PR 66034 [Ruediger Pluem]

  *) core: make ap_escape_quotes() work correctly on strings
     with more than MAX_INT/2 characters, counting quotes double.
     Credit to <generalbugs@zippenhop.com> for finding this.
     [Stefan Eissing]

  *) core: adding a new hook and method to the API:
     create_secondary_connection and ap_create_secondary_connection()
     to setup connections related to a "master" one, as used in
     the HTTP/2 protocol implementation.
  *) mod_http2: using the new API calls to get rid of knowledge
     about how the core handles conn_rec specifics.
     Improvements in pollset stream handling to use less sets.
     Using atomic read/writes instead of volatiles now.
     Keeping a reserve of "transit" pools and bucket_allocs for
     use on secondary connections to avoid repeated setup/teardowns.

  *) mod_proxy: Set a status code of 502 in case the backend just closed the
     connection in reply to our forwarded request.  [Ruediger Pluem]

  *) MPM event: Fix accounting of active/total processes on ungraceful restart,
     PR 66004 (follow up to PR 65626 from 2.4.52).  [Yann Ylavic]

  *) mod_proxy: Add backend port to log messages to
     ease identification of involved service.  [Rainer Jung]

  *) mod_systemd: Systemd socket activation can now be enabled at
     build time but disabled at run time, if mod_systemd is not
     loaded.  [Lubos Uhliarik <luhliari redhat.com>]

  *) ab: Add an optional ramp delay when starting concurrent connections so
     as to not trigger denial of service protection in the network. Report
     levels of concurrency achieved in cases where the test completes before
     full concurrency is achieved. [Graham Leggett]

  *) mod_http2: preserve the port number given in a HTTP/1.1
     request that was Upgraded to HTTP/2. Fixes PR65881.
     [Stefan Eissing]

  *) mod_http2: :scheme pseudo-header values, not matching the
     connection scheme, are forwarded via absolute uris to the
     http protocol processing to preserve semantics of the request.
     Checks on combinations of pseudo-headers values/absence
     have been added as described in RFC 7540.
     Fixes <https://github.com/icing/mod_h2/issues/230>.
     [Stefan Eissing]

  *) core/mpm: add hook 'child_stopped` that gets called when the MPM has
     stopped all processing in a child process. This is when all running
     threads shall be stopped and joined.
     [Stefan Eissing]

  *) core: Make sure and check that LimitXMLRequestBody fits in system memory.
     [Ruediger Pluem, Yann Ylavic]

  *) ab: Fix the detection for when the server performed a legitimate
     connection close as per RFC7230 6.3.1. We must check whedther the
     connection was previously kept alive, and not whether the current
     closed request is keepalive. [Graham Leggett]

  *) mod_rewrite: Make URI-to-filename rewrites work transparently with
     proxy early mappings (mapping=servlet/decoded).  [Yann Ylavic]

  *) mod_md: do not interfere with requests to /.well-known/acme-challenge/
     resources if challenge type 'http-01' is not configured for a domain.
     Fixes <https://github.com/icing/mod_md/issues/279>.
     [Stefan Eissing]

  *) mod_proxy: Bump limit of proxy workers names to 384 characters.  PR 53218
     [Yann Ylavic]

  *) core: Simpler connection close logic if discarding the request body fails.
     [Yann Ylavic, Ruediger Pluem]

  *) mod_proxy: Use the maxium of front end and backend timeouts instead of the
     minimum when tunneling requests (websockets, CONNECT requests).
     Backend timeouts can be configured more selectively (per worker if needed)
     as front end timeouts and typically the backend timeouts reflect the
     application requirements better.  PR 65886 [Ruediger Pluem]

  *) mod_watchdog: use the `child_stopping` and `child_stopped` hooks
     to shutdown workers before pool destruction releases global
     resources and libraries.
     [Stefan Eissing]

  *) ab: Respond appropriately to SSL_ERROR_WANT_READ and SSL_ERROR_WANT_WRITE.
     Previously the correct event was polled for, but the response to the poll
     would call write instead of read, and read instead of write. PR 55952
     [Graham Leggett]

  *) mod_md: the status description in MDomain's JSON, exposed in the
     md-status handler (if configure) did sometimes not carry the correct
     message when certificates needed renew.
     [Stefan Eissing]

  *) mod_tls: Fix a linkage issue with rustls when compiled
     with rust 1.55, 1.56 or 1.57. This prevents the loading
     of the module because of an undefined symbol: fmaf
     See https://github.com/rustls/rustls-ffi/issues/133
     [Christophe Jaillet]

  *) ap_regex: Use Thread Local Storage (TLS) to recycle ap_regexec() buffers
     when an efficient TLS implementation is available. [Yann Ylavic]

  *) mod_reqtimeout: Fix missing handshake= timeout enforcement.  [Yann Ylavic]

  *) mod_dav: Fix regression when gathering properties which could lead to huge
     memory consumption proportional to the number of resources.
     [Evgeny Kotkov, Ruediger Pluem]

  *) mod_unixd: CoreDumpDirectory requires enabling tracing on FreeBSD 11+.
     PR 65819.  [David CARLIER <devnexen gmail.com>]

  *) mpm_event: Fix a possible listener deadlock on heavy load when restarting
     and/or reaching MaxConnectionsPerChild.  PR 65769.  [Yann Ylavic]

  *) http: Enforce that fully qualified uri-paths not to be forward-proxied
     have an http(s) scheme, and that the ones to be forward proxied have a
     hostname, per HTTP specifications.  [Ruediger Pluem, Yann Ylavic]

  *) mod_http2: fixed a bug in v2.0.0 that could lead to an infinite
     loop when clients close connections prematurely.
     Enhanced the scoreboard status updates on h2 connections for
     mod_status. 'server-status' now gives a better idea what the
     connection is working on.
     [Stefan Eissing]

  *) mod_http: Correctly sent a 100 Continue status code when sending an interim
     response as result of an Expect: 100-Continue in the request and not the
     current status code of the request. PR 65725 [Ruediger Pluem]

  *) mod_proxy_connect: Honor the smallest of the backend or client timeout
     while tunneling.  [Yann Ylavic]

  *) mod_http2: a regression in v1.15.24 of the modules was fixed that
     could lead to httpd child processes not being terminated on a
     graceful reload or when reaching MaxConnectionsPerChild.
     When unprocessed h2 requests were queued at the time, these could stall.
     See <https://github.com/icing/mod_h2/issues/212>.
     [@hansborr, @famzah, Stefan Eissing]

  *) mod_proxy_uwsgi: Remove duplicate slashes at the beginning of PATH_INFO.
     PR 65616.  [Ruediger Pluem]

  *) mod_md: Fix memory leak in case of failures to load the private key.
     PR 65620 [ Filipe Casal <filipe.casal@trailofbits.com> ]

  * mod_http2: the new pollset implementation is disabled when
    compiling with an APR version less than 1.6.

  *) mod_autoindex: Add "IndexForbiddenReturn404" to return 404 instead of a
     403 when Options does not included "indexes". [Eric Covener]

  *) mod_dir: Add "NotFound" option to "DirectorySlash" directive to return
     404 instead of a DirectorySlash redirect. [Eric Covener]

  *) mod_md: adding v2.4.8 with the following changes
     - Added support for ACME External Account Binding (EAB).
       Use the new directive `MDExternalAccountBinding` to provide the
       server with the value for key identifier and hmac as provided by
       your CA.
       While working on some servers, EAB handling is not uniform
       across CAs. First tests with a Sectigo Certificate Manager in
       demo mode are successful. But ZeroSSL, for example, seems to
       regard EAB values as a one-time-use-only thing, which makes them
       fail if you create a seconde account or retry the creation of the
       first account with the same EAB.
     - The directive 'MDCertificateAuthority' now checks if its parameter
       is a http/https url or one of a set of known names. Those are
       'LetsEncrypt', 'LetsEncrypt-Test', 'Buypass' and 'Buypass-Test'
       for now and they are not case-sensitive.
       The default of LetsEncrypt is unchanged.
     - `MDContactEmail` can now be specified inside a `<MDomain dnsname>`
       section.
     - Treating 401 HTTP status codes for orders like 403, since some ACME
       servers seem to prefer that for accessing oders from other accounts.
     - When retrieving certificate chains, try to read the repsonse even
       if the HTTP Content-Type is unrecognized.
     - Fixed a bug that reset the error counter of a certificate renewal
       and prevented the increasing delays in further attempts.
     - Fixed the renewal process giving up every time on an already existing
       order with some invalid domains. Now, if such are seen in a previous
       order, a new order is created for a clean start over again.
       See <https://github.com/icing/mod_md/issues/268>
     - Fixed a mixup in md-status handler when static certificate files
       and renewal was configured at the same time.

  *) mod_http2:
     - Fixed an issue since 1.15.24 that "Server" headers in proxied requests
       were overwritten instead of preserved. [PR by @daum3ns]
     - Added directove 'H2StreamTimeout' to configure a separate value for HTTP/2
       streams, overriding server's 'Timeout' configuration. [rpluem]
     - HTTP/2 connections now use pollsets to monitor the status of the
       ongoing streams and their main connection when host OS allows this.
     - Removed work-arounds for older versions of libnghttp2 and checking
       during configure that at least version 1.15.0 is present.
     - The HTTP/2 connection state handler, based on an experiment and draft
       at the IETF http working group (abandoned for some time), has been removed.
     - H2SerializeHeaders no longer has an effect. A warning is logged when it is
       set to "on". The switch enabled the internal writing of requests to be parsed
       by the internal HTTP/1.1 protocol handler and was introduced to avoid
       potential incompatibilities during the introduction of HTTP/2.
     - Removed the abort/redo of tasks when mood swings lower the active limit.
     [Ruediger Pluem, daum3ns, Stefan Eissing]

  *) core: Be safe with ap_lingering_close() called with a socket NULL-ed by
     a third-party module.  PR 65627.
     [acmondor <bz.apache.org acmondor.ca>, Yann Ylavic]

  *) mpm_event: Restart stopping of idle children after a load peak. PR 65626.
     [Yann Ylavic, Ruediger Pluem]

  *) mod_proxy: SetEnv proxy-nohalfclose (or alike) allows to disable TCP
     half-close forwarding when tunneling protocols.  [Yann Ylavic]

  *) mod_tls: added mod_tls from abetterinternet, donated
     by ISRG/Prossimo <https://github.com/abetterinternet/mod_tls>.
     - adds font-/backend TLS (v1.2/v1.3) via the Rust rustls crate
       and its rustls-ffi C binding <https://github.com/rustls/rustls-ffi>.
     - documentation at <https://github.com/abetterinternet/mod_tls>
       (adding to Apache's manual TBD)
     - build support for Apache httpd configure on *nix platforms,
       rustls is linked statically into mod_tls.

  *) mod_md: values for External Account Binding (EAB) can
     now also be configured to be read from a separate JSON
     file. This allows to keep server configuration permissions
     world readable without exposing secrets.
     [Stefan Eissing]

  *) core: Add ap_unescape_url_ex() for better decoding control, and deprecate
     unused AP_NORMALIZE_DROP_PARAMETERS flag.
     [Yann Ylavic, Ruediger Pluem, Stefan Eissing, Joe Orton]

  *) core: AP_NORMALIZE_DECODE_UNRESERVED should normalize the second dot in
     the uri-path when it's preceded by a dot.  [Yann Ylavic]

  *) mod_proxy: New tunnel_forward hooking mechanism allowing modules to handle
     Upgrade(d) protocols data.  [Yann Ylavic]

  *) mod_dav: Correctly handle errors returned by dav providers on REPORT
     requests. [Ruediger Pluem]

  *) mod_rewrite: Fix UDS ("unix:") scheme for [P] rules.  PR 57691 + 65590.
     [Janne Peltonen <janne.peltonen sange.fi>]

  *) mod_proxy: Handle UDS URIs with empty hostname ("unix:///...") as if they
     had no hostname ("unix:/...").  [Yann Ylavic]

  *) event mpm: Correctly count active child processes in parent process if
     child process dies due to MaxConnectionsPerChild.
     PR 65592 [Ruediger Pluem]

  *) core: Add ap_pre_connection() as a wrapper to ap_run_pre_connection()
     and use it to prevent that failures in running the pre_connection
     hook cause crashes afterwards. [Ruediger Pluem]

  *) mod_md: fixed a bug in handling multiple parallel OCSP requests. These could
     run into an assertion which terminated (and restarted) the child process where
     the task was running. Eventually, all OCSP responses were collected, but not
     in the way that things are supposed to work.
     See also <https://bz.apache.org/bugzilla/show_bug.cgi?id=65567>.
     The bug was possibly triggered when more than one OCSP status needed updating
     at the same time. For example for several renewed certificates after a server
     reload.

  *) mod_md: when MDMessageCmd for a 'challenge-setup:<type>:<dnsname>'
     fails (!= 0 exit), the renewal process is aborted and an error is
     reported for the MDomain. This provides scripts that distribute
     information in a cluster to abort early with bothering an ACME
     server to validate a dns name that will not work. The common
     retry logic will make another attempt in the future, as with
     other failures.
     Fixed a bug when adding private key specs to an already working
     MDomain, see <https://github.com/icing/mod_md/issues/260>.
     [Stefan Eissing]

  *) core: Add ap_create_connection() to create either a server or client/proxy
     connection.

  *) mod_http2: when a server is restarted gracefully, any idle h2 worker
     threads are shut down immediately. [Stefan Eissing]

  *) core: Initialize the request fields on read failure to avoid NULLs.
     [Yann Ylavic]

  *) mod_proxy: Do not canonicalize the proxied URL when both "nocanon" and
     "ProxyPassInterpolateEnv On" are configured.  PR 65549.
     [Joel Self <joelself gmail.com>]

  *) mpm_event: Fix children processes possibly not stopped on graceful
     restart.  PR 63169.  [Joel Self <joelself gmail.com>]

  *) mod_unique_id: Reduce the time window where duplicates may be generated
     PR 65159
     [Christophe Jaillet]

  *) Revert "mod_unique_id: Fix potential duplicated ID generation under heavy load.
     PR 65159" added in 2.4.47.
     This causes issue on Windows.
     [Christophe Jaillet]

  *) mod_proxy_uwsgi: Fix PATH_INFO setting for generic worker.  [Yann Ylavic]

  *) mod_md: Certificate/keys pairs are verified as matching before a renewal is accepted
     as successful or a staged renewal is replacing the existing certificates.
     This avoid potential mess ups in the md store file system to render the active
     certificates non-working. [@mkauf]

  *) mod_proxy: Fix a potential infinite loop when tunneling Upgrade(d)
     protocols from mod_proxy_http, and a timeout triggering falsely when
     using mod_proxy_wstunnel, mod_proxy_connect or mod_proxy_http with
     upgrade= setting.  PRs 65521 and 65519.  [Yann Ylavic]

  *) mod_proxy: Faster unix socket path parsing in the "proxy:" URL.
     [Yann Ylavic]

  *) mpm_event: Fix graceful stop/restart of children processes if connections
     are in lingering close for too long.  [Yann Ylavic]

  *) mod_md: fixed a potential null pointer dereference if ACME/OCSP
     server returned 2xx responses without content type. Reported by chuangwen.
     [chuangwen, Stefan Eissing]

  * core/mpm: add hook 'child_stopping` that gets called when the MPM is
    stopping a child process. The additional `graceful` parameter allows
    registered hooks to free resources early during a graceful shutdown.
    [Yann Ylavic, Stefan Eissing]

  *) mod_proxy: Fix icomplete initialization of BalancerMember(s) from the
     balancer-manager, which can lead to a crash.  [Yann Ylavic]

  *) mod_http2:
   - Aborting requests via RST_STREAM no longer affect the available
     resources of a connection when the first chunk of the response
     body has been sent.
   - H2Min/MaxWorkers behave as intended again. The module will initially
     create H2MinWorkers threads and add up to H2MaxWorkers when needed. These
     additional workers time out when idle after H2MaxWorkerIdleSeconds and
     disappear again.
   - Added a timeout to h2 worker cleanup to exit latest after 5 seconds of
     waiting on idle workers to terminate. This happens after all connections
     have been processed. a WARNING is logged in case workers lagged behind.
   - When the shutdown of a child is detected (e.g. graceful shutdown), the
     module will terminate all idle workers above H2MinWorkers right away.
     This detection currently only happens when a HTTP/2 connection is active.
     [Stefan Eissing]

  *) mod_md:
     - Domain names in `<MDomain ...>` can now appear in quoted form.
     - Fixed a failure in ACME challenge selection that aborted further searches
       when the tls-alpn-01 method did not seem to be suitable.
     - Changed the tls-alpn-01 setup to only become unsuitable when none of the
       dns names showed support for a configured 'Protocols ... acme-tls/1'. This
       allows use of tls-alpn-01 for dns names that are not mapped to a VirtualHost.
     [Stefan Eissing]

  *) core/mod_proxy/mod_ssl:
     Adding `outgoing` flag to conn_rec, indicating a connection is
     initiated by the server to somewhere, in contrast to incoming
     connections from clients.
     Adding 'ap_ssl_bind_outgoing()` function that marks a connection
     as outgoing and is used by mod_proxy instead of the previous
     optional function `ssl_engine_set`. This enables other SSL
     module to secure proxy connections.
     The optional functions `ssl_engine_set`, `ssl_engine_disable` and
     `ssl_proxy_enable` are now provided by the core to have backward
     compatibility with non-httpd modules that might use them. mod_ssl
     itself no longer registers these functions, but keeps them in its
     header for backward compatibility.
     The core provided optional function wrap any registered function
     like it was done for `ssl_is_ssl`.
     [Stefan Eissing]

  *) mod_h2: Don't strip headers from 304 responses.  [Yann Ylavic]

  *) mod_proxy: Fix possible reuse/merging of Proxy(Pass)Match worker instances
     with others when their URLs contain a '$' substitution.  PR 65419.
     [Yann Ylavic]

  *) mpm_prefork: Block signals for child_init hooks to prevent potential
     threads created from there to catch MPM's signals.
     [Ruediger Pluem, Yann Ylavic]

  *) mod_ssl: tighten the handling of ALPN for outgoing (proxy)
     connections. If ALPN protocols are provided and sent to the
     remote server, the received protocol selected is inspected
     and checked for a match. Without match, the peer handshake
     fails.
     An exception is the proposal of "http/1.1" where it is
     accepted if the remote server did not answer ALPN with
     a selected protocol. This accomodates for hosts that do
     not observe/support ALPN and speak http/1.x be default.

  * mod_log_config/mod_ssl: moved the log_handlers registered by mod_ssl
    into mod_log_config itself. These now use the global `ap_ssl_var_lookup()`
    functions and work for all running SSL modules.
    The dependency from mod_ssl to mod_log_config and its header is removed.
    mod_ssl now provides the content of "{errstr}c" as variable "SSL_CLIENT_VERIFY_ERRSTR".
    This change should be fully compatible to all deployed configurations.
    [Stefan Eissing]

  *) dbm: Split the loading of a dbm driver from the opening of a dbm file. When
     an attempt to load a dbm driver fails, log clearly which driver triggered
     the error (not "default"), and what the error was. [Graham Leggett]

  *) core: Fix a regression that stripped the ETag header from 304 responses.
     PR 61820 [Ruediger Pluem, Roy T. Fielding]

  *) core/mod_ssl/mod_md: adding OCSP response provisioning as core feature. This
     allows modules to access and provide OCSP response data without being tied
     of each other. The data is exchanged in standard, portable formats (PEM encoded
     certificates and DER encoded responses), so that the actual SSL/crypto
     implementations used by the modules are independant of each other.
     Registration and retrieval happen in the context of a server (server_rec)
     which modules may use to decide if they are configured for this or not.
     The area of changes:
     1. core: defines 2 functions in include/http_ssl.h, so that modules may
        register a certificate, together with its issuer certificate for OCSP
        response provisioning and ask for current response data (DER bytes) later.
        Also, 2 hooks are defined that allow modules to implement this OCSP
        provisioning.
     2. mod_ssl uses the new functions, in addition to what it did already, to
        register its certificates this way. If no one is interested in providing
        OCSP, it falls back to its own (if configured) stapling implementation.
     3. mod_md registers itself at the core hooks for OCSP provisioning. Depending
        on configuration, it will accept registrations of its own certificates only,
        all certificates or none.
     [Stefan Eissing]

  *) mod_proxy_wstunnel: Add ProxyWebsocketFallbackToProxyHttp to opt-out the
     fallback to mod_proxy_http for WebSocket upgrade and tunneling.
     [Yann Ylavic]

  *) mod_proxy_hcheck: Honor worker timeout settings.  [Yann Ylavic]

  *) mod_lua: Add support to Lua 5.4 [Joe Orton, Giovanni Bechis, Ruediger Pluem]

  *) mod_md: Tolerate a missing "revokeCert" or "keyChange" resource.
     [Fraser Tweedale <ftweedal redhat.com>]

  *) mod_ssl: Add SSL_{CLIENT,SERVER}_B64CERT variables with
     base64-encoded DER certificates.  Add SSL_CLIENT_B64CERT_CHAIN_n
     equivalents for SSL_CLIENT_CERT_CHAIN_n, and new
     "ExportBase64CertData" argument for SSLOptions.  PR 65169.
     [Joe Orton]

  *) mod_proxy_balancer: Include nonce in XML output.  PR 63074.
     Federico Mennite <federico.mennite lifeware.ch>

  *) mod_http2: Fixed a race condition that could lead to streams being
     aborted (RST to the client), although a response had been produced.
     [Stefan Eissing]

  *) mod_unique_id: Fix potential duplicated ID generation under heavy load.
     PR 65159
     [Jonas Müntener <jonas.muentener ergon.ch>, Christophe Jaillet]

  *) core: provide ap_ssl_* functions in new http_ssl.h header file.
     [Stefan Eissing]

  *) mod_socache_shmcb: Avoid double SHM cleanup and possible crash on
     restart/stop.  PR 59798.  [Yann Ylavic]

  *) mod_md: v2.4.0 with improvements and bugfixes
     - MDPrivateKeys allows the specification of several types. Beside "RSA" plus
     optional key lengths elliptic curves can be configured. This means you can
     have multiple certificates for a Managed Domain with different key types.
     With ```MDPrivateKeys secp384r1 rsa2048``` you get one ECDSA  and one RSA
     certificate and all modern client will use the shorter ECDSA, while older
     client will get the RSA certificate.
     Many thanks to @tlhackque who pushed and helped on this.
     - Support added for MDomains consisting of a wildcard. Configuring
     ```MDomain *.host.net``` will match all virtual hosts matching that pattern
     and obtain one certificate for it (assuming you have 'dns-01' challenge
     support configured). Addresses #239.
     - Removed support for ACMEv1 servers. The only known installation used to
     be Let's Encrypt which has disabled that version more than a year ago for
     new accounts.
     - Andreas Ulm (<https://github.com/root360-AndreasUlm>) implemented the
     ```renewing``` call to ```MDMessageCmd``` that can deny a certificate
     renewal attempt. This is useful in clustered installations, as
     discussed in #233).
     - New event ```challenge-setup:<type>:<domain>```, triggered when the
     challenge data for a domain has been created. This is invoked before the
     ACME server is told to check for it. The type is one of the ACME challenge
     types. This is invoked for every DNS name in a MDomain.
     - The max delay for retries has been raised to daily (this is like all
     retries jittered somewhat to avoid repeats at fixed time of day).
     - Certain error codes reported by the ACME server that indicate a problem
     with the configured data now immediately switch to daily retries. For
     example: if the ACME server rejects a contact email or a domain name,
     frequent retries will most likely not solve the problem. But daily retries
     still make sense as there might be an error at the server and un-supervised
     certificate renewal is the goal. Refs #222.
     - Test case and work around for domain names > 64 octets. Fixes #227.
     When the first DNS name of an MD is longer than 63 octets, the certificate
     request will not contain a CN field, but leave it up to the CA to choose one.
     Currently, Lets Encrypt looks for a shorter name in the SAN list given and
     fails the request if none is found. But it is really up to the CA (and what
     browsers/libs accept here) and may change over the years. That is why
     the decision is best made at the CA.
     - Retry delays now have a random +/-[0-50]% modification applied to let
     retries from several servers spread out more, should they have been
     restarted at the same time of day.
     - Fixed several places where the 'badNonce' return code from an ACME server
     was not handled correctly. The test server 'pebble' simulates this behaviour
     by default and helps nicely in verifying this behaviour. Thanks, pebble!
     - Set the default `MDActivationDelay` to 0. This was confusing to users that
     new certificates were deemed not usably before a day of delay. When clocks are
     correct, using a new certificate right away should not pose a problem.
     - When handling ACME authorization resources, the module no longer requires
     the server to return a "Location" header, as was necessary in ACMEv1.
     Fixes #216.
     - Fixed a theoretical uninitialized read when testing for JSON error responses
     from the ACME CA. Reported at <https://bz.apache.org/bugzilla/show_bug.cgi?id=64297>.
     - ACME problem reports from CAs that include parameters in the Content-Type
     header are handled correctly. (Previously, the problem text would not be
     reported and retries could exist CA limits.)
     - Account Update transactions to V2 CAs now use the correct POST-AS-GET method.
     Previously, an empty JSON object was sent - which apparently LE accepted,
     but others reject.
     - MDCertificateFile and MDCertificateKeyFile can now be specified several
     times to add multiple, static certificates to a MDomain.
     [Stefan Eissing, @tlhackque, Andreas Ulm]

  *) mod_session: Improve session parsing.  [Yann Yalvic]

  *) mod_proxy_hcheck: Don't pile up health checks if the previous one did
     not finish before hcinterval.  PR 63010.  [Yann Ylavic]

  *) core: Adding SSL related inquiry functions to the server API.
     These function are always available, even when no module providing
     SSL is loaded. They provide their own "shadowing" implementation for
     the optional functions of similar name that mod_ssl and impersonators
     of mod_ssl provide.
     This enables loading of several SSL providing modules when all but
     one of them registers itself into the new hooks. Two old-style SSL
     modules will not work, as they replace the others optional functions
     with their own.
     Modules using the old-style optional functions will continue to work
     as core supplies its own versions of those.
     The following has been added so far:
     - ap_ssl_conn_is_ssl() to query if a connection is using SSL.
     - ap_ssl_var_lookup() to query SSL related variables for a
       server/connection/request.
     - Hooks for 'ssl_conn_is_ssl' and 'ssl_var_lookup' where modules
       providing SSL can install their own value supplying functions.
     - ap_ssl_add_cert_files() to enable other modules like mod_md to provide
       certificate and keys for an SSL module like mod_ssl.
     - ap_ssl_add_fallback_cert_files() to enable other modules like mod_md to
       provide a fallback certificate in case no 'proper' certificate is
       available for an SSL module like mod_ssl.
     - ap_ssl_answer_challenge() to enable other modules like mod_md to
       provide a certificate as used in the RFC 8555 'tls-alpn-01' challenge
       for the ACME protocol for an SSL module like mod_ssl. The function
       and its hook provide PEM encoded data instead of file names.
     - Hooks for 'ssl_add_cert_files', 'ssl_add_fallback_cert_files' and
       'ssl_answer_challenge' where modules like mod_md can provide providers
       to the above mentioned functions.
     [Stefan Eissing]

  *) mod_http2: new option 'H2OutputBuffering on/off' which controls the
     buffering of stream output. The default is on, which is the behaviour of
     previous mod-h2 versions. When off, all bytes are made available immediately
     to the main connection for sending them out to the client. This fixes interop
     issues with certain flavours of gRPC. [Stefan Eissing]

  *) mod_authnz_ldap: Prevent authentications with empty passwords for the
     initial bind to fail with status 500. [Ruediger Pluem]

  *) mod_http2: Fixed reporting of transferred bytes for mod_logio for
     modifiers %O (and %S) to report the number of transferred header and
     body lengths. This is still only an approximation of the bytes on the
     connection. The data is subject to header compression and h2 framing
     afterwards. [Stefan Eissing]

  *) mod_cgid: Intercept and log stderr output correctly on Unix systems
     supporting fd passing.  PR 54221.  [Joe Orton]

  *) mod_auth_digest: Fast validation of the nonce's base64 to fail early if
     the format can't match anyway.  [Yann Ylavic]

  *) mod_xml2enc: Update check to match MIME types matching
     "+xml" rather than anything containing "xml", avoiding
     corruption of Microsoft OOXML formats.  PR 64339.
     [Joseph Heenan <joseph.heenan fintechlabs.io>]

  *) mod_proxy_wstunnel: Leave Upgrade requests handling to mod_proxy_http,
     allowing for (non-)Upgrade negotiation with the origin server.
     [Yann Ylavic]

  *) mod_ssl: SSLProxyMachineCertificateFile/Path may reference files
     which include CA certificates; those CA certs are treated as if
     configured with SSLProxyMachineCertificateChainFile.  [Joe Orton]

  *) mpm_event: don't reset connections after lingering close, restoring prior
     to 2.4.28 behaviour.  [Yann Ylavic]

  *) mod_dav_fs: Improve logging output when failing to open files for
     writing.  PR 64413.  [Bingyu Shen <ahshenbingyu gmail.com>]

  *) mod_proxy: Add optional third argument for ProxyRemote, which
     configures Basic authentication credentials to pass to the remote
     proxy.  PR 37355.  [Joe Orton]

  *) mod_proxy_http: Fix 100-continue deadlock for spooled request bodies,
     leading to Request Timeout (408).  PR 63855.  [Yann Ylavic]

  *) http: Allow unknown response status' lines returned in the form of
     "HTTP/x.x xxx Status xxx".  [Yann Ylavic]

  *) mod_proxy_fcgi: Honor "SetEnv proxy-sendcl" to forward a chunked
     Transfer-Encoding from the client, spooling the request body when needed
     to provide a Content-Length to the backend.  PR 57087.  [Yann Ylavic]

  *) mpm_event: kill connections in keepalive state only when there is no more
     workers available, not when the maximum number of connections is reached,
     restoring prior to 2.4.30 behaviour.  [Yann Ylavic]

  *) mod_allowmethods: Allow methods to be added/removed with +/- prefix.  PR64785.
     [Marcel Montes <spiceman gmail.com>]

  *) mod_unique_id: Use base64url encoding for UNIQUE_ID variable,
     avoiding the use of '@'.  PR 57044.
     [Michael Kaufmann <apache-bugzilla michael-kaufmann.ch>]

  *) core: add ReadBufferSize, FlushMaxThreshold and FlushMaxPipelined
     directives.  [Yann Ylavic]

  *) mod_md: lowered the required minimal libcurl version from 7.50 to 7.29
     as proposed by <alexander.gerasimov@codeit.pro>.

  *) mod_http2: Log requests and sent the configured error response in case of
     early detected errors like too many or too long headers.
     [Ruediger Pluem, Stefan Eissing]

  *) mod_proxy_uwsgi: Fix a crash when sending environment variables with no
     value. PR 64598 [Ruediger Pluem]

  *) mod_cgi/mod_cgid: Avoid a second read from a CGI script after a
     timeout, which effectively doubled the configured timeout setting.
     PR 64709.  [Joe Orton]

  *) core: handle headers when replying a 304 following RFC7234.
     [Giovanni Bechis]

  *) mod_http2: remove support for abandoned http-wg draft
     <https://datatracker.ietf.org/doc/draft-kazuho-h2-cache-digest/>.
     [Stefan Eissing]

  *) mod_proxy_uwsgi: Error out on HTTP header larger than 16K (hard
     protocol limit).  [Yann Ylavic]

  *) mod_dav: Some DAV extensions, like CalDAV, specify both document
     elements and property elements that need to be taken into account
     when generating a property. The document element and property element
     are made available in the dav_liveprop_elem structure under the
     DAV_PROP_ELEMENT key in the resource pool. [Graham Leggett]

  *) mod_dav: Add utility functions dav_validate_root_ns(),
     dav_find_child_ns(), dav_find_next_ns(), dav_find_attr_ns() and
     dav_find_attr() so that other modules get to play too.
     [Graham Leggett]

  *) mod_http2:
     Fixes <https://github.com/icing/mod_h2/issues/200>:
     "LimitRequestFields 0" now disables the limit, as documented.
     Fixes <https://github.com/icing/mod_h2/issues/201>:
     Do not count repeated headers with same name against the field
     count limit. The are merged internally, as if sent in a single HTTP/1 line.
     [Stefan Eissing]

  *) mod_http2: Avoid segfaults in case of handling certain responses for
     already aborted connections.  [Stefan Eissing, Ruediger Pluem]

  *) core: Remove support for the Content-MD5 header, removed in RFC7231.
     Functions ap_md5digest() and ap_md5contextTo64() removed, and
     ContentDigest directive. [Graham Leggett]

  *) mod_dav: Allow other DAV modules to use dav_get_resource().
     [Graham Leggett]

  *) mpm_common: remove ap_mpm_unregister_poll_callback() and
     mpm_unregister_poll_callback hook. [Yann Ylavic]

  *) mod_proxy_http: add asynchronous handling of Upgrade(d) protocols,
     where idle connections are returned to the MPM and rescheduled on
     another thread when ready. [Yann Ylavic]

  *) mod_dav: Add method_precondition hook. WebDAV extensions define
     conditions that must exist before a WebDAV method can be executed.
     This hook allows a WebDAV extension to verify these preconditions.
     [Graham Leggett]

  *) Add hooks deliver_report and gather_reports to mod_dav.h. Allows other
     modules apart from versioning implementations to handle the REPORT method.
     [Graham Leggett]

  *) Add dav_get_provider(), dav_open_lockdb() and dav_close_lockdb() mod_dav.h.
     [Graham Leggett]

  *) "[mod_dav_fs etag handling] should really honor the FileETag setting".
     - It now does.
     - Add "Digest" to FileETag directive, allowing a strong ETag to be
       generated using a file digest.
     - Add ap_make_etag_ex() and ap_set_etag_fd() to allow full control over
       ETag generation.
     - Add concept of "binary notes" to request_rec, allowing packed bit flags
       to be added to a request.
     - First binary note - AP_REQUEST_STRONG_ETAG - allows modules to force
       the ETag to a strong ETag to comply with RFC requirements, such as those
       mandated by various WebDAV extensions.
     [Graham Leggett]

  *) mod_ssl: Fix a race condition and possible crash when using a proxy client
     certificate (SSLProxyMachineCertificateFile).
     [Armin Abfalterer <a.abfalterer gmail.com>]

  *) mod_proxy: recognize parameters from ProxyPassMatch workers with dollar
     substitution, such that they apply to the backend connection.  Note that
     connection reuse is disabled by default to avoid compatibility issues.
     [Takashi Sato, Jan Kaluza, Eric Covener, Yann Ylavic, Jean-Frederic Clere]

  *) mod_proxy_http: remove proxy-sendchunked and proxy-sendchunks
     handling, the default behaviour being now to stream the request body
     using Content-Length when the length is known and fall back to chunked
     Transfer-Encoding otherwise (unless proxy-sendcl is set thus requiring
     that the request body be spooled to memory or filesystem). [Yann Ylavic]

  *) mod_ldap: Avoid performance overhead of APR-util rebind cache for
     OpenLDAP 2.2+.  PR 64414.  [Joe Orton]

  *) mod_proxy_http: flush spooled request body in one go to avoid
     leaking (or long lived) temporary file. PR 64452. [Yann Ylavic]

  *) mod_proxy_fcgi: ProxyFCGISetEnvIf unsets variables when expression
     evaluates to false.  PR64365. [Michael König <mail ikoenig.net>]

  *) mod_proxy_http: handle Upgrade request, 101 (Switching Protocol) response
     and switched protocol forwarding.  [Yann Ylavic]

  *) mod_ssl: The "ssl_var_lookup" optional function API now takes a
     const char *name argument and returns a const char * string
     value.  The pool argument must now be non-NULL.  [Joe Orton]

  *) mod_ssl: With OpenSSL 1.1.1 and later, SSLRandomSeed is now
     ignored.  OpenSSL must be configured with a suitable entropy
     source, or mod_ssl will fail to start up.  [Joe Orton]

  *) mod_ssl: With OpenSSL 1.1.1 and later, client-initiated
     renegotiation in TLSv1.2 and earlier is blocked at SSL library
     level (with a TLS warning alert sent), rather than by aborting
     the connection inside mod_ssl.  [Joe Orton]

  *) core: Add optional "options=" argument to Listen.  Supported
     keywords are "freebind", "reuseport" and "v6only".  PR 61865.
     [Jan Kaluza, Lubos Uhliarik <luhliari redhat.com>, Joe Orton]

  *) config: Allow for environment variable substitution with default value,
     for when the variable is not defined, using format ${VAR?=default value}.
     [Yann Ylavic]

  *) htcacheclean: Empty directories in CacheRoot are still present even after
     using "-t". PR64313 [Petros Marios Prokopiou <pprokopi redhat.com>,
     Ruediger Pluem, Jean-Frederic Clere]

  *) mod_reqtimeout: Cannot override default Virtualhost's mod_reqtimeout.
     PR64295 [Jean-Frederic Clere]

  *) mod_proxy: Allow ProxyErrorOverride to be restricted to specific status
     codes.  PR63628. [Martin Drößler <mail martindroessler.de>]

  *) configtest: Issue a warning for non-existent directories in <Directory> config
     sections. PR63079. [Stephane Blondon <stephane.blondon gmail.com>].

  *) mod_proxy_http: Fix random memory-corruption in case of an error while
     reading a response from the backend.
     PR 64234 [Ruediger Pluem, Barnim Dzwillo <dzwillo@strato.de>]

  *) core: Use a temporary file when writing the pid file, avoiding
     startup failure if an empty pidfile is left over from a
     previous crashed or aborted invocation of httpd.  PR 63140.
     [Nicolas Carrier <carrier.nicolas0 gmail.com>, Joe Orton]

  *) mod_http2: Fixes issue where mod_unique_id would generate non-unique request
     identifier under load, see <https://github.com/icing/mod_h2/issues/195>.
     [Michael Kaufmann, Stefan Eissing]

  *) mod_session_cookie: Add SessionCookieMaxAge to allow the mod_session
     cookie to be sent as a "session cookie" with no expiration even when the
     SessionMaxAge will be enforced on the server. PR56040 [Eric Covener]

  *) mod_session: Fix an issue that blocked new sessions being created after
     session expiration or other session errors. PR56052 [Eric Covener]

  *) mod_proxy_hcheck: Allow healthcheck expressions to use %{Content-Type}.
     PR64140. [Renier Velazco <renier.velazco upr.edu>]

  *) mod_ssl: Fix memory leak of OCSP stapling response. [Yann Ylavic]

  *) mod_authz_groupfile: Drop AH01666 from loglevel "error" to "info".
     PR64172.

  *) mod_usertrack: Add CookieSameSite, CookieHTTPOnly, and CookieSecure
     to allow customization of the usertrack cookie. PR64077.
     [Prashant Keshvani <prashant2400 gmail.com>, Eric Covener]

  *) mpm_event: avoid possible KeepAlveTimeout off by -100 ms.
     [Eric Covener, Yann Ylavic]

  *) mod_md:
     - Prefer MDContactEmail directive to ServerAdmin for registration. New directive
       thanks to Timothe Litt (@tlhackque).
     - protocol check for pre-configured "tls-alpn-01" challenge has been improved. It will now
       check all matching virtual hosts for protocol support. Thanks to @mkauf.
     - Corrected a check when OCSP stapling was configured for hosts
       where the responsible MDomain is not clear, by Michal Karm Babacek (@Karm).
     - Softening the restrictions where mod_md configuration directives may appear. This should
       allow for use in <If> and <Macro> sections. If all possible variations lead to the configuration
       you wanted in the first place, is another matter.
     [Michael Kaufmann <mail michael-kaufmann.ch>, Timothe Litt (@tlhackque),
      Michal Karm Babacek (@Karm), Stefan Eissing (@icing)]

  *) core: ap_method_mask_t type added for method bitmasks, changed
     from apr_int64_t and used for the method_mask field in
     ap_method_list_t, AP_METHOD_BIT, allowed field of request_rec,
     limited field of cmd_parms.  PR 63885.  [Joe Orton]

  *) mod_ssl: Do not keep connections to OCSP responders alive when doing
     OCSP requests.  PR 64135.  [Ruediger Pluem]

  *) mod_ssl: Disable client verification on ACME ALPN challenges. Fixes github
     issue mod_md#172 (https://github.com/icing/mod_md/issues/172).
     [Michael Kaufmann <mail michael-kaufmann.ch>, Stefan Eissing]

  *) mod_rewrite: Extend the [CO] (cookie) flag of RewriteRule to accept a
     SameSite attribute. [Eric Covener]

  *) Update DOCTYPE tags in server-generated HTML. PR62989.
     [Andra Farkas <deepbluemistake gmail.com>, Giovanni Bechis <giovanni paclan.it>]

  *) mod_setenvif: Passing an env-variable parameter of "--early" in non-perdir
     context runs directives from this module before `RequestHeader ... early`
     are evaluated. This allows results of SetEnvIf conditionals to be used
     to modify request headers in early mode. [Eric Covener]

  *) config: Speed up graceful restarts by using pre-hashed command table. PR 64066.
     [Giovanni Bechis <giovanni paclan.it>, Jim Jagielski]

  *) mod_lua: Add r:headers_in_table, r:headers_out_table, r:err_headers_out_table,
     r:notes_table, r:subprocess_env_table as read-only native table alternatives
     that can be iterated over. [Eric Covener]

  *) configure: Add manualdir and proxycachedir to the APR_ENABLE_LAYOUT macro call.
     [Graham Leggett]

  *) Add support for cross compiling to apxs. If apxs is being executed from somewhere
     other than its target location, add that prefix to includes and library directories.
     Without this, apxs would fail to find config_vars.mk and exit. [Graham Leggett]

  *) Add a config layout for OpenWRT. [Graham Leggett]

  *) mod_http2: Fixed rare cases where a h2 worker could deadlock the main connection.
     [Yann Ylavic, Stefan Eissing]

  *) mod_lua: Accept nil assignments to the exposed tables (r.subprocess_env,
     r.headers_out, etc) to remove the key from the table. PR63971.
     [Eric Covener]

  *) mod_http2: Fixed interaction with mod_reqtimeout. A loaded mod_http2 was disabling the
     ssl handshake timeouts. Also, fixed a mistake of the last version that made `H2Direct`
     always `on`, regardless of configuration. Found and reported by
     <Armin.Abfalterer@united-security-providers.ch> and
     <Marcial.Rion@united-security-providers.ch>. [Stefan Eissing]

  *) mod_http2: Multiple field length violations in the same request no longer cause
     several log entries to be written. [@mkauf]

  *) mod_md: v2.2.4 from github, Fixes a compile time issue with OpenSSL 1.0.2 in
     the new OCSP code. Skips port checks for domain server_rec selection when "tls-alpn-01"
     is configured explicitly (related to #133). [@mkauf, Stefan Eissing]

  *) mod_ssl: Support logging private key material for use with
     wireshark via log file given by SSLKEYLOGFILE environment
     variable.  Requires OpenSSL 1.1.1.  PR 63391.  [Joe Orton]

  *) mod_proxy: Improve tunneling loop to support half closed connections and
     pending data draining (for protocols like rsync). PR 61616. [Yann Ylavic]

  *) mod_proxy: Add proxy check_trans hook for proxy modules to possibly
     decline request handling at early stage.  [Yann Ylavic]

  *) mod_proxy: Put mod_proxy_{connect,wstunnel} tunneling code in common in
     proxy_util.  [Yann Ylavic]

  *) mod_proxy_http: Fix the forwarding of requests with content body when a
     balancer member is unavailable; the retry on the next member was issued
     with an empty body (regression introduced in 2.4.41).  [Yann Ylavic]

  *) mod_ssl: negotiate the TLS protocol version per name based vhost
     configuration, when linked with OpenSSL-1.1.1 or later. The base vhost's
     SSLProtocol (from the first vhost declared on the IP:port) is now only
     relevant if no SSLProtocol is declared for the vhost or globally,
     otherwise the vhost or global value apply.  [Yann Ylavic]

  *) mod_proxy_http: Fix 100-continue deadlock for spooled request bodies,
     leading to Request Timeout (408).  PR 63855.  [Yann Ylavic]

  *) mod_deflate, mod_brotli: honor "Accept-Encoding: foo;q=0" as per RFC 7231; which
     means 'foo' is "not acceptable".  PR 58158 [Chistophe Jaillet]

  *) mod_proxy: Fix crash by resolving pool concurrency problems. PR 63503
     [Ruediger Pluem, Eric Covener]

  *) core: On Windows, fix a start-up crash if <IfFile ...> is used with a path that is not
     valid (For example, testing for a file on a flash drive that is not mounted)
     [Christophe Jaillet]

  *) mod_proxy_balancer: Fix case-sensitive referer check related to CSRF/XSS
     protection. PR63688. [Armin Abfalterer <a.abfalterer gmail.com>]

  *) mod_authn_socache: Increase the maximum length of strings that can be cached by
     the module from 100 to 256.  PR 62149 [<thorsten.meinl knime.com>]

  *) mod_ssl: reverting a 2.4.40 change where a superfluous SSLCertificateChainFile configuration
     for a domain managed by mod_md caused a startup error. This happened when mod_md installed
     its fallback certificate, before it got the first real certificate from Lets Encrypt.
     [Stefan Eissing]

  *) core, mod_rewrite: Set PCRE_DOTALL by default. Revert via
     RegexDefaultOptions -DOTALL [Yann Ylavic]

  *) core: Remove request details from built-in error documents [Eric Covener]

  *) mod_http2: core setting "LimitRequestFieldSize" is not additionally checked on
     merged header fields, just as HTTP/1.1 does. [Stefan Eissing, Michael Kaufmann]

  *) mod_http2: fixed a bug that prevented proper stream cleanup when connection
     throttling was in place. Stream resets by clients on streams initiated by them
     are counted as possible trigger for throttling. [Stefan Eissing]

  *) mod_http2/mpm_event: Fixes the behaviour when a HTTP/2 connection has nothing
     more to write with streams ongoing (flow control block). The timeout waiting
     for the client to send WINODW_UPDATE was incorrectly KeepAliveTimeout and not
     Timeout as it should be. Fixes PR 63534. [Yann Ylavic, Stefan Eissing]

  *) mod_ssl/mod_md: reversing dependency by letting mod_ssl offer hooks for
     adding certificates and keys to a virtual host. An additional hook allows
     answering special TLS connections as used in ACME challenges.
     Adding 2 new hooks for init/get of OCSP stapling status information when
     other modules want to provide those. Falls back to own implementation with
     same behaviour as before.
     [Stefan Eissing]

  *) mod_ssl: use OPENSSL_init_ssl() to initialise OpenSSL on versions 1.1+.
     [Graham Leggett]

  *) mod_proxy_http2: adding support for handling trailers in both directions. PR 63502.
     [Stefan Eissing]

  *) mod_reqtimeout: Fix default rates missing (not applied) in 2.4.39.
     PR 63325. [Yann Ylavic]

  *) mod_ldap: Avoid potential crashes in util_ldap_cache_module_kill() or other
     LDAP related functions during graceful restart of a busy server. PR63305.
     [Martin Fúsek <mfusek newps.cz>]

  *) mod_cache: Fix parsing of quoted Cache-Control token arguments.
     PR 63288. [Yann Ylavic]

  *) mod_md: Store permissions are enforced on file creation, enforcing restrictions in
     spite of umask. Fixes <https://github.com/icing/mod_md/issues/117>. [Stefan Eissing]

  *) mod_ssl: Correctly restore SSL verify state after TLSv1.3 PHA failure.
     [Michael Kaufmann <mail michael-kaufmann.ch>]

  *) Merge consecutive slashes in URL's. Opt-out with `MergeSlashes OFF`.
     [Eric Covener]

  *) mod_proxy/ssl: Cleanup per-request SSL configuration anytime a backend
     connection is recycled/reused to avoid a possible crash with some SSLProxy
     configurations in <Location> or <Proxy> context. PR 63256. [Yann Ylavic]

  *) mod_mime: Add `MimeOptions` directive to allow Content-Type or all metadata
     detection to use only the last (right-most) file extension or to be
     disabled per-dir. [Eric Covener]

  *) MPMs unix: bind the bucket number of each child to its slot number, for a
     more efficient per bucket maintenance. [Yann Ylavic]

  *) http: Fix possible empty response with mod_ratelimit for HEAD requests.
     PR 63192. [Yann Ylavic]

  *) mod_cache_socache: Avoid reallocations and be safe with outgoing data
     lifetime. [Yann Ylavic]

  *) mod_reqtimeout: Allow to configure (TLS-)handshake timeouts.
     PR 61310. [Yann Ylavic]

  *) mod_auth_digest: Fix a race condition. Authentication with valid credentials could be
     refused in case of concurrent accesses from different users.
     PR 63124 [Simon Kappel <simon.kappel axis.com>]

  *) mod_ssl: Don't unset FIPS mode on restart unless it's forced by
     configuration (SSLFIPS on) and not active by default in OpenSSL.
     PR 63136. [Yann Ylavic]

  *) mod_ssl: give mod_md the chance to override certificate after ALPN protocol
     negotiation. [Stefan Eissing]

  *) mod_proxy_wstunnel: Fix websocket proxy over UDS.
     PR 62932 <pavel dcmsys.com>

  *) mod_negociation: LanguagePriority should be case-insensitive in order to
     match AddLanguage behavior. PR 39730 [Christophe Jaillet]

  *) mod_session: Always decode session attributes early. [Hank Ibell]

  *) core: Incorrect values for environment variables are substituted when
     multiple environment variables are specified in a directive. [Hank Ibell]

  *) core: Split out the ability to parse wildcard files and directories
     from the Include/IncludeOptional directives into a generic set of
     functions ap_dir_nofnmatch() and ap_dir_fnmatch(). [Graham Leggett]

  *) mod_ssl: Fix mod_authz provider for "require ssl" directive to check correctly
     on HTTP/2 connections. Fixes PR 62654. [Stefan Eissing]

  *) mod_ssl: clear *SSL errors before loading certificates and checking
     afterwards. Otherwise errors are reported when other SSL using modules
     are in play. Fixes PR 62880. [Michael Kaufmann]

  *) core: Ensure that aborted connections are logged as such. PR 62823
     [Arnaud Grandville <contact@grandville.net>]

  *) mpm_event: Stop issuing AH00484 "server reached MaxRequestWorkers..." when
     there are still idle threads available. When there are less idle threads than
     MinSpareThreads, issue new one-time message AH10159. Matches worker MPM.
     [Eric Covener]

  *) mod_proxy_scgi, mod_proxy_uwsgi: improve error handling when sending the
     body of the response. [Jim Jagielski]

  *) mod_session_cookie: avoid duplicate Set-Cookie header in the response.
     [Emmanuel Dreyfus <manu@netbsd.org>, Luca Toscano]

  *) mod_dav_fs: Set a default DAVLockDB within the state directory.
     [Joe Orton]

  *) core: Add DefaultStateDir and layout-specific state directory
     created at "make install".  [Joe Orton]

  *) ab: Add client certificate support. [Graham Leggett]

  *) mod_proxy_hcheck: Fix issues with TCP health checks. PR 61499
     [Dominik Stillhard <dominik.stillhard united-security-providers.ch>]

  *) MPMs: Initialize all runtime/asynchronous objects on a dedicated pool and
     before signals handling to avoid lifetime issues on restart or shutdown.
     PR 62658. [Yann Ylavic]

  *) core: Add StrictHostCheck to allow unconfigured hostnames to be
     rejected. [Eric Covener]

  *) mod_status: Cumulate CPU time of exited child processes in the
     "cu" and "cs" values. Add CPU time of the parent process to the
     "c" and "s" values.
     [Rainer Jung]

  *) mod_status: Add cumulated response duration time in milliseconds.
     [Rainer Jung]

  *) mod_status: Complete the data shown for async MPMs in "auto" mode.
     Added number of processes, number of stopping processes and number
     of busy and idle workers.  [Rainer Jung]

  *) mod_proxy: Improve the balancer member data shown in mod_status when
     "ProxyStatus" is "On": add "busy" count and show byte counts in auto
     mode always in units of kilobytes.  [Rainer Jung]

  *) mod_proxy: If ProxyPassReverse is used for reverse mapping of relative
     redirects, subsequent ProxyPassReverse statements, whether they are
     relative or absolute, may fail.  PR 60408.  [Peter Haworth <pmh1wheel gmail.com>]

  *) mod_ratelimit: Don't interfere with "chunked" encoding, fixing regression
     introduced in 2.4.34.  PR 62568.  [Yann Ylavic]

  *) mod_proxy_http: forward 100-continue, and minimize race conditions when
     reusing backend connections. PR 60330. [Yann Ylavic, Jean-Frederic Clere]

  *) mod_proxy: Remove load order and link dependency between mod_lbmethod_*
     modules and mod_proxy. PR 62557. [Ruediger Pluem, William Rowe]

  *) mod_md: more robust handling of http-01 challenges and hands-off when module
     should not be involved, e.g. challenge setup by another ACME client. [Stefan Eissing]

  *) ru, zh-cn and zh-tw translations of errordocs have been added.
     Contributed by Alexander Gaganashvili and CodeingBoy

  *) mod_userdir: If several directories are given in a UserDir directive, only files
     in the first existing one are checked. If the file is not found there, the
     other possible directories are not checked. The doc clearly states that they
     will be checked one by one, until a match is found or an external redirect is
     performed.  PR 59636.
     [Christophe Jaillet]

  *) mod_rewrite: Only create the global mutex used by "RewriteMap prg:" when
     this type of map is present in the configuration.  PR62311.
     [Hank Ibell <hwibell gmail.com>]

  *) mod_ldap: Abort on LDAP locking errors. [Eric Covener]

  *) mod_ssl: Support loading certificates and private keys from the
     PKCS#11 OpenSSL engine.  [Anderson Sasaki <ansasaki redhat.com>,
     Joe Orton]

  *) http: LimitRequestBody applies to proxied requests.  [Yann Ylavic]

  *) mod_logio: Add LogIOTrackTTFU and %^FU logformat to log the time
     difference between request start and last request body byte read (finished upload).
     [Rainer Jung]

  *) mod_ssl: add support for TLSv1.3 (tested with OpenSSL v1.1.1-pre4, other libs may
     need more sugar). SSL(Proxy)CipherSuite now has an optional first parameter for the
     protocol the ciphers are for.
     Directive "SSLVerifyClient" now triggers certificate retrieval from the client (this
     is not fully tested - but fails in similar fashion as in TLSv1.2 in my setups).
     Verifying the client fails exactly the same for HTTP/2 connections for all SSL protocols,
     as this would need to trigger the master connection thread - which we do not support
     right now.
     Renegotiation of ciphers is intentionally ignored for TLSv1.3 connections. "SSLCipherSuite"
     does not allow to specify TLSv1.3 ciphers in a directory context (because it cannot work) and
     TLSv1.2 or lower ciphers are not relevant, as cipher suites are completely separate.
     This means there is a bit if a world split when simultaneously having TLSv1.2 and TLSv1.3
     connections to the same server.
     [Yann Ylavic, Stefan Eissing]

  *) mod_ssl: proper checks for libressl 2.07/8 and its TLSv1_3 support, see PR 62236.
     [Bernard Spil <brnrd@freebsd.org>]

  *) mod_cgi: Add CGIScriptTimeout to make mod_cgi's timeout per-directory and
     independent of the core Timeout directive.  PR 62229.
     [Hank Ibell <hwibell gmail.com>]

  *) mod_ssl: heavily simplified SSLPolicy. No more user defines, no propxy policies,
     just the basic "modern", "intermediate" and "old" as specified by Mozilla security.
     [Stefan Eissing]

  *) mod_md: fixes error in renew window calculation that may lead to mod_md running
     watchdog in a tight loop until actual renewal becomes necessary. [Stefan Eissing]

  *) mod_md: /.well-known/acme-challenge requests that cannot be answered for hostnames
     outside the configured MDs are free to be answered by other handlers. This allows
     co-existance between mod_md and other ACME clients on the same server (implements PR62189).
     [Stefan Eissing, Arkadiusz Miskiewicz <arekm@maven.pl>]

  *) core: Create a conn_config_t structure to hold an extendable core config rather
     than consuming the whole pointer with the connection socket. [Graham Leggett]

  *) core: adding AP_DECLARE for ap_parse_vhost_addrs() and minor bump mmn. Resolves
     building mod_ssl on Windows. [Stefan Eissing, Gregg Smith]

  *) core: adding defines to allow interworking with honggfuzz without
     further patches. [Stefan Eissing, Robert Swiecki]

  *) mod_headers: 'RequestHeader set|edit|edit_r Content-Type X' could
     inadvertently modify the Content-Type _response_ header. Applies to
     Content-Type only and likely to only affect static file responses.
     [Eric Covener]

  *) mod_cgi: Improve AH01215 messages to make it more clear that the message is
     the CGI scripts stderr output. PR 61980. [Hank Ibell <hwibell gmail.com>]

  *) mod_headers: Allow 'Header unset Content-Type' to remove the Content-Type
     header. PR 61983. [Hank Ibell <hwibell gmail.com>]

  *) mod_md v1.1.8: new configuration directive "MDBaseServer on|off" to allow/inhibit
     management of the base server domains outside VirtualHosts. By default, this is "off",
     e.g. mod_md will not manage certificates or perform https: redirections on the
     base server. [Stefan Eissing]

  *) core: Add "AcceptErrorsNonFatal" to allow ECONNREFUSED, ECONNABORTED, and
     ECONNRESET during the client accept() to not trigger graceful shutdown of
     the child process.  [Eric Covener]

  *) mod_md v1.1.7:
     - MDMustStaple was unable to create the necessary OpenSSL OBJ identifier on some platforms,
       possibly because this fails if the OID is already configured in ```openssl.cnf```, see
       [here](https://github.com/openssl/openssl/issues/2795).
     - Two memory leaks in cert issuer and alt-names lookup eliminated by Yann Ylavic.
     - Changing MDMustStaple triggers certificate renewal.
     - More verbosity when *not* handing out certificates, e.g. mod_ssl asks, but mod_md has no
       idea what it is talking about. Some people report misbehaviour here.
     - Re-enabled support for md_get_credentials() function that was used in older mod_ssl
       patch, so that people with old patched servers get a chance to upgrade.
     [Stefan Eissing, Yann Ylavic]

  *) mod_substitute: Allow expressions in the substitution, prefixed with expr=
     [Eric Covener]

  *) mod_md: fixed mem pool usage for auto-added server names. Added
     error logging of exact ACME response when challenges failed.
     [Stefan Eissing]

  *) mod_md: reverses most of v1.0.5 optimization of post_config init, so that
     mod_ssl can ask for certificates without crashing. [Stefan Eissing]

  *) mod_proxy: allow SSLProxyCheckPeer* usage for all proxy modules.
     PR 61857.  [Yann Ylavic]

  *) mod_proxy_html: fix handling of <meta http-equiv> elements.
     PR 58121.  [Nick Kew]

  *) mod_md: fixed backward compatibility to old <ManagedDomain configuration.
     Add higher level WARNING log when initial request to ACME server fails, mentioning
     some advice. [Stefan Eissing]

  *) mod_md: name change in configuration directives. The old names are still working
     in this version, so you can safely upgrade. They will give warnings in the log and
     will disappear in the immediate future. ManagedDomain is now MDomain,
     <ManagedDomain> is now <MDomainSet>. [Stefan Eissing]

  *) mod_ssl: renamed section <SSLPolicy to <SSLPolicyDefine. Fixed behaviour
     for new server config merge flag. Denying global, only once used directives
     inside a SSLPolicyDefine. [Stefan Eissing]

  *) mod_auth_basic: Be less tolerant when parsing the credencial. Only spaces
     should be accepted after the authorization scheme. \t are also tolerated.
     [Christophe Jaillet]

  *) core: Support zone/scope in IPv6 link-local addresses in Listen and
     VirtualHost directives (requires APR 1.7.x or later).  PR 59396.  [Joe Orton]

  *) mod_md: v1.0.5, restricting post_config dry run to be more silent and performing
     only necessary work for mod_ssl to be also happy with the configuration.
     [Stefan Eissing]

  *) mod_md: v1.0.4, removed the 'a2md' utility command from build. Only used in github
     testing. Avoid problems with our build system that had problems after the latest
     changes to make a clean initial build. Remove the windows a2md.dsp therefore also.
     [Stefan Eissing]

  *) mod_ssl: Fail with 403 if the username for FakeBasicAuth mode
     includes a colon character.  PR 52644.  [Joe Orton]

  *) mod_md: v1.0.3, fixed various bugs in persisting job properties, so that status is
     persisted across child process changes and staging is reset on reloads. Changed
     MDCertificateAgreement url checks. As long as the CA reports that the account has
     an agreement, no further checking is done. Existing accounts need no changes when
     a new agreement comes out. [Stefan Eissing]

  *) mod_watchdog: Correct some log messages.  [Rainer Jung]

  *) mod_noloris: complete build setup.  [Rainer Jung]

  *) mod_md: fix static compilation.  [Rainer Jung]

  *) mod_md: fix compilation of helper binary a2md.  [Rainer Jung]

  *) core: fix pcre feature detection in configure when using pcre2.  [Rainer Jung]

Changes with Apache 2.5.0-alpha

  *) mod_speling: Add CheckBasenameMatch PR 44221.  [Christophe Jaillet]

  *) mod_md: v1.0.1, ServerName/Alias names from pure-http: virtual hosts are no longer
     auto-added to a Managed Domain. Error counts of jobs are persisted. When the server
     restarts (gracefully) any errored staging areas are purged to reset the signup/renewal
     process. [Stefan Eissing]

  *) mod_md: v1.0.0, new config directive 'MDNotifyCmd' to hook in a program when Managed
     Domains have obtained/renewed their certificates successfully. [Stefan Eissing]

  *) mod_md: v0.9.9, fix for applying challenge type based on available ports. [Stefan Eissing]

  *) mod_md: v0.9.7
     - Use of the new module flag
     - Removed obsolete function from interface to mod_ssl.
     - Fallback certificates has version set and no longer claims to be a CA. (re issue #32)
     - MDRequireHttps now happens before any Redirect.
     [Stefan Eissing]

  *) mod_ssl: unshare SSLSrvConfigRec instances between base server and virtual hosts. This avoids
     overwrites of later initializattions (vhost_id), selective disables by "SSLEngine addr-list"
     and certificate/key pickup from mod_md. [Stefan Eissing]

  *) mod_md: v0.9.6: a "MDRequireHttps permanent" configured domain automatically sends out
     HSTS (rfc 6797) headers in https: responses. [Stefan Eissing]

  *) mod_ssl: adding ssl_policies.h[.in] for policy cipher/protocol definitions. Use
     update_policies.py to update manually from Mozilla JSON definitions at
     https://statics.tls.security.mozilla.org/server-side-tls-conf.json
     [Stefan Eissing]

  *) mod_md: v0.9.5:
     - New directive (srly: what do you expect at this point?) "MDMustStaple on|off" to control if
       new certificates are requested with the OCSP Must Staple extension.
     - Known limitation: when the server is configured to ditch and restart child processes, for example
       after a certain number of connections/requests, the mod_md watchdog instance might migrate
       to a new child process. Since not all its state is persisted, some messages might appear a
       second time in the logs.
     - Adding checks when 'MDRequireHttps' is used. It is considered an error when 'MDPortMap 443:-'
       is used - which negates that a https: port exists. Also, a warning is logged if no
       VirtualHost can be found for a Managed Domain that has port 443 (or the mapped one) in
       its address list.
     - New directive 'MDRequireHttps' for redirecting http: traffic to a Managed Domain, permanently
       or temporarily.
     - Fix for using a fallback certificate on initial signup of a Managed Domain. Requires also
       a changed mod_ssl patch (v5) to take effect.
     - compatibility with libressl
       [Stefan Eissing]

  *) mod_md: v0.9.2: new directive 'MDHttpProxy' to define a proxy for outgoing connection,
     some minor bugfixes, twiddle the build system to avoid non-pic code generation.
     [Stefan Eissing]

  *) mod_md: v0.9.1:
     - various fixes in MDRenewWindow handling when specifying percent. Serialization changed. If
       someone already used percent configurations, it is advised to change these to a new value,
       reload and change back to the wanted ones.
     - various fixes in handling of MDPrivateKeys when specifying 2048 bits (the default) explicitly.
     - mod_md version removed from top level md_store.json file. The store has its own format version
       to facilitate upgrades.
    [Stefan Eissing]

  *) mod_md: v0.9.0:
     Certificate provisioning from Let's Encrypt (and other ACME CAs) for mod_ssl virtual hosts.
     [Stefan Eissing]

  *) mod_ssl: add SSLPolicy (define/use) and SSLProxyPolicy directives plus documentation. Add
     core definitions for policies 'modern', 'intermediate' and 'old', as defined by Mozilla
     in <https://wiki.mozilla.org/Security/Server_Side_TLS>. [Stefan Eissing]

  *) mod_md: new module for managing domains across VirtualHosts with ACME protocol
     implementation for automated certificate signup and renewal. Default CA is
     the test area of Let's Encrypt right now, so certificates root will not be valid.
     Will be switched to the real service endpoint rather soon. If you need it now,
     configure 'MDCertificateAuthority https://acme-v01.api.letsencrypt.org/directory'.
     [Stefan Eissing]

  *) mod_rewrite: Add 'RewriteOptions LongURLOptimization' to free memory
     from each set of unmatched rewrite conditions.
     [Eric Covener]

  *) Allow the argument to <IfFile>, <IfDefine>, <IfSection>, <IfDirective>,
     and <IfModule> to be quoted.  This is primarily for the benefit of
     <IfFile>. [Eric Covener]

  *) Introduce request taint checking framework to prevent privilege
     hijacking through .htaccess. [Nick Kew]

  *) Add <IfDirective> and <IfSection> directives.  [Joe Orton]

  *) When using mod_status with the Event MPM, report the number of requests
     associated with an active connection in the "ACC" field. Previously
     zero was always reported with this MPM.  PR60647. [Eric Covener]

  *) mod_proxy_wstunnel: Reliably run before mod_proxy_http.
     [Eric Covener]

  *) http: Allow unknown response status' lines returned in the form of
     "HTTP/x.x xxx Status xxx".  [Yann Ylavic]

  *) core: Add <IfFile> configuration section to allow any file on disk to be
     used as a conditional.  [Edward Lu, Eric Covener]

  *) mod_crypto: Add the all purpose crypto filters with support for HLS.
     [Graham Leggett]

  *) core: Drop an invalid Last-Modified header value coming
     from a FCGI/CGI script instead of replacing it with Unix epoch.
     Warn the users about Last-Modified header value replacements
     and violations of the RFC.
     [Yann Ylavic, Luca Toscano, William Rowe, Jacob Champion]

  *) mod_dav: Allow other modules to become providers and add ACLs
     to the DAV response.
     [Jari Urpalainen <jari.urpalainen nokia.com>, Graham Leggett]

  *) mod_dav: Add dav_begin_multistatus, dav_send_one_response,
     dav_finish_multistatus, dav_send_multistatus, dav_handle_err,
     dav_failed_proppatch, dav_success_proppatch to mod_dav.h.
     [Jari Urpalainen <jari.urpalainen nokia.com>, Graham Leggett]

  *) core: explicitly exclude 'h2' from protocols announced via an Upgrade:
     header as commanded by http-wg. [Stefan Eissing]

  *) mod_proxy_ajp: Add "secret" parameter to proxy workers to implement legacy
     AJP13 authentication.  PR 53098.  [Dmitry A. Bakshaev <dab1818 gmail com>]

  *) mpm: Generalise the ap_mpm_register_socket functions to accept pipes
     or sockets. [Graham Leggett]

  *) core: Extend support for setting aside data from the network input filter
     to any connection or request input filter. [Graham Leggett]

  *) core: Split ap_create_request() from ap_read_request(). [Graham Leggett]

  *) mod_auth_digest: Fix compatibility with expression-based Authname. PR59039.
     [Eric Covener]

  *) mpm: Add a complete_connection hook that confirms whether an MPM is allowed
     to leave the WRITE_COMPLETION phase. Move filter code out of the MPMs.
     [Graham Leggett]

  *) mod_cache: Consider Cache-Control: s-maxage in expiration
     calculations.  [Eric Covener]

  *) mod_cache: Allow caching of responses with an Expires header
     in the past that also has Cache-Control: max-age or s-maxage.
     PR55156. [Eric Covener]

  *) mod_session: Introduce SessionExpiryUpdateInterval which allows to
     configure the session/cookie expiry's update interval. PR 57300.
     [Paul Spangler <paul.spangler ni.com>]

  *) core: Extend support for asynchronous write completion from the
     network filter to any connection or request filter. [Graham Leggett]

  *) mod_auth_digest: remove AuthDigestEnableQueryStringHack which is no
     more documented since dec 2012 (r1415960). [Christophe Jaillet]

  *) mod_charset_lite: On EBCDIC platforms, make sure mod_charset_lite runs
     after other resource-level filters. [Eric Covener]

  *) http: Don't remove the Content-Length of zero from a HEAD response if
     it comes from an origin server, module or script.  [Yann Ylavic]

  *) http: Add support for RFC2324/RFC7168. [Graham Leggett]

  *) mod_authn_core: Add expression support to AuthName and AuthType.
     [Graham Leggett]

  *) suexec: Filter out the HTTP_PROXY environment variable because it is
     treated as alias for http_proxy by some programs. [Stefan Fritsch]

  *) mod_proxy_http: Don't establish or reuse a backend connection before pre-
     fetching the request body, so to minimize the delay between it is supposed
     to be alive and the first bytes sent: this is a best effort to prevent the
     backend from closing because of idle or keepalive timeout in the meantime.
     Also, handle a new "proxy-flushall" environment variable which allows to
     flush any forwarded body data immediately. PR 56541+37920. [Yann Ylavic]

  *) core: Define and UnDefine are no longer permitted in
     directory context. Previously they would always be evaluated
     as the configuration was read without regard for the directory
     context. [Eric Covener]

  *) config: For directives that do not expect any arguments, enforce
     that none are specified in the configuration file.
     [Joachim Zobel <jzobel heute-morgen.de>, Eric Covener]

  *) mod_rewrite: Improve 'bad flag delimeters' startup error by showing
     how the input was tokenized.  PR 56528. [Edward Lu <Chaosed0 gmail.com>]

  *) mod_proxy: Don't put non balancer-member workers in error state by
     default for connection or 500/503 errors, and honor status=+I for
     any error.  PR 48388.  [Yann Ylavic]

  *) ap_expr: Add filemod function for checking file modification dates
     [Daniel Gruno]

  *) mod_authnz_ldap: Resolve crashes with LDAP authz and non-LDAP authn since
     r1608202. [Eric Covener]

  *) apreq: Content-Length header should be always interpreted as a decimal.
     Leading 0 could be erroneously considered as an octal value. PR 56598.
     [Chris Card <ctcard hotmail com>]

  *) mod_proxy: Now allow for 191 character worker names, with non-fatal
     errors if name is truncated. PR53218. [Jim Jagielski]

  *) mod_ssl: Add optional function "ssl_get_tls_cb" to allow support
     for channel bindings.  [Simo Sorce <simo redhat.com>]

  *) mod_proxy_wstunnel: Concurrent websockets messages could be
     lost or delayed with ProxyWebsocketAsync enabled.
     [Edward Lu <Chaosed0 gmail.com>]

  *) core, mod_info: Add compiled and loaded PCRE versions to version
     number display.  [Rainer Jung]

  *) mod_authnz_ldap: Return LDAP connections to the pool before the handler
     is run, instead of waiting until the end of the request. [Eric Covener]

  *) mod_proxy_html: support automatic detection of doctype and processing
     of FPIs.  PR56285 [Micha Lenk <micha lenk info>, Nick Kew]

  *) core: Add ap_mpm_resume_suspended() API to allow a suspended connection
     to resume. PR56333
     [Artem <artemciy gmail.com>, Edward Lu <Chaosed0 gmail.com>]

  *) core: Add ap_mpm_register_socket_callback_timeout() API. [Eric Covener]

  *) mod_proxy_wstunnel: Honor ProxyWebsocketIdleTimeout in asynchronous
     processing mode. [Eric Covener]

  *) mod_authnz_ldap: Fail explicitly when the filter is too long. Remove
     unnecessary apr_pstrdup() and strlen(). [Graham Leggett]

  *) Add the ldap-search option to mod_authnz_ldap, allowing authorization
     to be based on arbitrary expressions that do not include the username.
     [Graham Leggett]

  *) Add the ldap function to the expression API, allowing LDAP filters and
     distinguished names based on expressions to be escaped correctly to
     guard against LDAP injection. [Graham Leggett]

  *) Add module mod_ssl_ct, which provides an implementation of Certificate
     Transparency (RFC 6962) for httpd.  [Jeff Trawick]

  *) mod_proxy_wstunnel: Avoid sending error responses down an upgraded
     websockets connection as it is being close down. [Eric Covener]

  *) mod_proxy_wstunnel: Allow the administrator to cap the amount
     of time a synchronous websockets connection stays idle with
     ProxyWebsocketIdleTimeout. [Eric Covener]

  *) mod_proxy_wstunnel: Change to opt-in for asynchronous support, adding
     directives ProxyWebsocketAsync and ProxyWebsocketAsyncDelay.
     [Eric Covener]

  *) mod_proxy_wstunnel: Stop leaking websockets backend connections under
     event MPM (trunk-only). [Eric Covener]

  *) mod_proxy_http: Add detach_backend hook (potentially usable
     in other proxy scheme handlers).  [Jeff Trawick]

  *) mod_deflate: Add DeflateAlterETag to control how the ETag
     is modified. The 'NoChange' parameter mimics 2.2.x behavior.
     PR 45023, PR 39727. [Eric Covener]

  *) mod_dir: Default to 2.2-like behavior and skip execution when method is
     neither GET nor POST, such as for DAV requests. PR 54914. [Chris Darroch]

  *) mod_rewrite: Rename the handler that does per-directory internal
     redirects to "rewrite-redirect-handler" from "redirect-handler" so
     it is less ambiguous and less likely to be reused. [Eric Covener]

  *) mod_rewrite: Protect against looping with the [N] flag by enforcing a
     default limit of 10000 iterations, and allowing each rule to change its
     limit. [Eric Covener]

  *) mod_ssl: Fix config merging of SSLOCSPEnable and SSLOCSPOverrideResponder.
     [Jeff Trawick]

  *) Add HttpContentLengthHeadZero and HttpExpectStrict directives.
     [Yehuda Sadeh <yehuda inktank com>, Justin Erenkrantz]

  *) mod_ssl: Add -t -DDUMP_CA_CERTS option which dumps the filenames of all
     configured SSL CA certificates to stdout the same way as DUMP_CERTS does.
     [Jan Kaluza]

  *) mod_ssl: Don't flush when an EOS is received. Prepares mod_ssl
     to support write completion. [Graham Leggett]

  *) core: Add parse_errorlog_arg callback to ap_errorlog_provider
     to allow providers to check the ErrorLog argument. [Jan Kaluza]

  *) mod_cgid: Use the servers Timeout for each read from a CGI script,
     allow override with new CGIDRequestTimeout directive. PR43494
     [Eric Covener, Toshikuni Fukaya <toshikuni-fukaya cybozu co jp>]

  *) core: ensure any abnormal exit is reported to stderr if it's a tty.
     PR 55670 [Nick Kew]

  *) mod_lua: Let the Inter-VM get/set functions work with a global
     shared memory pool instead of a per-process pool. [Daniel Gruno]

  *) ldap: Support ldaps when using the Microsoft LDAP SDK.
     PR 54626. [Jean-Frederic Clere]

  *) mod_authnz_ldap: Change default value of AuthLDAPMaxSubGroupDepth to 0
     to avoid performance problems when subgroups aren't in use. [Eric Covener]

  *) mod_syslog: New module implementing syslog ap_error_log provider.
     Previously, this code was part of core, now it's in separate module.
     [Jan Kaluza]

  *) core: Add ap_errorlog_provider to make ErrorLog logging modular. Move
     syslog support from core to new mod_syslog. [Jan Kaluza]

  *) mod_status, mod_echo: Fix the display of client addresses.
     They were truncated to 31 characters which is not enough for IPv6 addresses.
     This is done by deprecating the use of the 'client' field and using
     the new 'client64' field in worker_score.
     PR 54848 [Bernhard Schmidt <berni birkenwald de>, Jim Jagielski]

  *) core: merge AllowEncodedSlashes from the base configuration into
     virtual hosts. [Eric Covener]

  *) AIX: Install DSO's with "cp" instead of "install" in instdso.sh
     [Eric Covener]

  *) mod_ldap: Don't keep retrying if a new LDAP connection times out.
     [Eric Covener]

  *) mod_deflate: permit compilation of mod_deflate against a zlib that has
     been configured with -D Z_PREFIX, which redefines the token "deflate".
     [Eric Covener]

  *) mod_auth_digest: Use the secret when generating nonces in all cases and
     not only when AuthName is used in .htaccess files (this change may cause
     problems if used with round robin load balancers). Don't regenerate the
     secret on graceful restarts. PR 54637  [Stefan Fritsch]

  *) core: Stop the HTTP_IN filter from attempting to write error buckets
     to the output filters, which is bogus in the proxy case. Create a
     clean mapping from APR codes to HTTP status codes, and use it where
     needed. [Graham Leggett]

  *) mod_dav: mod_dav overrides dav_fs response on PUT failure. PR 35981
     [Basant Kumar Kukreja <basant.kukreja sun.com>, Alejandro Alvarez
     <alejandro.alvarez.ayllon cern.ch>]

  *) mod_ldap: LDAP connections used for authentication were not respecting
     LDAPConnectionPoolTimeout.  PR 54587

  *) core: Add option to add valgrind support. Use it to reduce false positive
     warnings in mod_ssl. [Stefan Fritsch]

  *) mod_authn_file, mod_authn_dbd, mod_authn_dbm, mod_authn_socache:
     Cache the result of the most recent password hash verification for every
     keep-alive connection. This saves some expensive calculations.
     [Stefan Fritsch]

  *) http: Remove support for Request-Range header sent by Navigator 2-3 and
     MSIE 3. [Stefan Fritsch]

  *) core, http: Extend HttpProtocol with an option to enforce stricter HTTP
     conformance or to only log the found problems. [Stefan Fritsch]

  *) EventOpt MPM

  *) core: Add LogLevelOverride directive that allows to override the
     loglevel for clients from certain IPs. This also works for things
     like the SSL handshake where <If> LogLevel ... </If> is evaluated
     too late. [Stefan Fritsch]

  *) core: Add new directive Warning to issue warnings from a configuration
     file. Both Warning and Error now generate a timestamped log message.
     [Fabien Coelho]

  *) ap_expr: Add SERVER_PROTOCOL_VERSION, ..._MAJOR, and ..._MINOR
     variables. [Stefan Fritsch]

  *) core: New directive HttpProtocol which allows to disable HTTP/0.9
     support. [Stefan Fritsch]

  *) mod_allowhandlers: New module to forbid specific handlers for specific
     directories. [Stefan Fritsch]

  *) mod_systemd: New module, for integration with systemd on Linux.
     [Jan Kaluza <jkaluza redhat.com>]

  *) WinNT MPM: Store pid and generation for each thread in scoreboard
     to allow tracking of threads from exiting children via mod_status
     or other such mechanisms.  [Jeff Trawick]

  *) The following now respect DefaultRuntimeDir/DEFAULT_REL_RUNTIMEDIR:
     - APIs: ap_log_pid(), ap_remove_pid, ap_read_pid()
     - mod_cache: thundering herd lock directory
     - mod_lbmethod_heartbeat, mod_heartmonitor: heartbeat storage file
     - mod_ldap: shared memory cache
     - mod_socache_shmcb, mod_socache_dbm: shared memory or dbm for cache
     [Jeff Trawick]

  *) mod_ssl: Add support for TLS Next Protocol Negotiation.  PR 52210.
     [Matthew Steele <mdsteele google.com>]

  *) cross-compile: allow to provide CC_FOR_BUILD so that gen_test_char will
     be compiled by the build compiler instead of the host compiler.
     Also set CC_FOR_BUILD to 'cc' when cross-compilation is detected.
     PR 51257. [Guenter Knauf]

  *) core: In maintainer mode, replace apr_palloc with a version that
     initializes the allocated memory with non-zero values, except if
     AP_DEBUG_NO_ALLOC_POISON is defined. [Stefan Fritsch]

  *) mod_policy: Add a new testing module to help server administrators
     enforce a configurable level of protocol compliance on their
     servers and application servers behind theirs. [Graham Leggett]

  *) mod_firehose: Add a new debugging module able to record traffic
     passing through the server in such a way that connections and/or
     requests be reconstructed and replayed. [Graham Leggett]

  *) mod_noloris

  *) APREQ

  *) Simple MPM

  *) mod_serf

  [Apache 2.5.0-dev includes those bug fixes and changes with the
   Apache 2.4.xx tree as documented below, except as noted.]

Changes with Apache 2.4.x and later:

  *) http://svn.apache.org/viewvc/httpd/httpd/branches/2.4.x/CHANGES?view=markup

Changes with Apache 2.2.x and later:

  *) http://svn.apache.org/viewvc/httpd/httpd/branches/2.2.x/CHANGES?view=markup

Changes with Apache 2.0.x and later:

  *) http://svn.apache.org/viewvc/httpd/httpd/branches/2.0.x/CHANGES?view=markup
