APACHE 2.4 STATUS:                        -*- mode: text; coding: utf-8 -*-
Last modified at [$Date$]

The current version of this file can be found at:

  * http://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x/STATUS

The current development branch of this software can be found at:

  * http://svn.apache.org/repos/asf/httpd/httpd/trunk

Consult the following STATUS files for information on related projects:

  * http://svn.apache.org/repos/asf/apr/apr/trunk/STATUS
  * http://svn.apache.org/repos/asf/apr/apr/branches/1.4.x/STATUS
  * http://svn.apache.org/repos/asf/apr/apr-util/branches/1.4.x/STATUS
  * http://svn.apache.org/repos/asf/apr/apr/branches/1.5.x/STATUS
  * http://svn.apache.org/repos/asf/apr/apr-util/branches/1.5.x/STATUS
  * http://svn.apache.org/repos/asf/apr/apr/branches/1.6.x/STATUS
  * http://svn.apache.org/repos/asf/apr/apr-util/branches/1.6.x/STATUS

Patches considered for backport are noted in their branches' STATUS:

  * http://svn.apache.org/repos/asf/httpd/httpd/branches/2.2.x/STATUS
  * http://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x/STATUS


Release history:
    [NOTE that x.{odd}.z versions are strictly Alpha/Beta releases,
          while x.{even}.z versions are Stable/GA releases.]

    2.4.34  : In development. Jim proposes T&R ~ July 4 and offers
              to RM.
    2.4.33  : Tagged on March 17, 2018. Released on March 21, 2018.
    2.4.32  : Tagged on March 09, 2018. Distributed on March 15, 2018,
              not announced.
    2.4.31  : Tagged on March 03, 2018. Not released.
    2.4.30  : Tagged on February 19, 2018. Not released.
    2.4.29  : Tagged on October 17, 2017. Released on October 23, 2017.
    2.4.28  : Tagged on September 25, 2017. Released on October 5, 2017.
    2.4.27  : Tagged on July 6, 2017. Released on July 11, 2017.
    2.4.26  : Tagged on June 13, 2017. Released on June 19, 2017.
    2.4.25  : Tagged on December 16, 2016. Released on December 21, 2016.
    2.4.24  : Tagged on December 16, 2016. Not released.
    2.4.23  : Tagged on June 30, 2016. Released on July 05, 2016.
    2.4.22  : Tagged on June 20, 2016. Not released.
    2.4.21  : Tagged on June 16, 2016. Not released.
    2.4.20  : Tagged on April 4, 2016. Released on April 11, 2016.
    2.4.19  : Tagged on March 21, 2016. Not released.
    2.4.18  : Tagged on December 8, 2015. Released on December 14, 2015.
    2.4.17  : Tagged on October 9, 2015. Released October 13, 2015.
    2.4.16  : Tagged on July 9, 2015. Released July 15, 2015.
    2.4.15  : Tagged on June 19, 2015. Not released.
    2.4.14  : Tagged on June 11, 2015. Not released.
    2.4.13  : Tagged on June 4, 2015. Not released.
    2.4.12  : Tagged on January 22, 2015. Released January 29, 2015.
    2.4.11  : Tagged on January 15, 2015. Not released.
    2.4.10  : Tagged on July 15, 2014. Released July 21, 2014.
    2.4.9   : Tagged on March 13, 2014. Released on March 17, 2014.
    2.4.8   : Tagged on March 11, 2014. Not released.
    2.4.7   : Tagged on November 19, 2013. Released on November 25, 2013.
    2.4.6   : Tagged on July 15, 2013. Released July 22, 2013.
    2.4.5   : Tagged on July 11, 2013. Not released.
    2.4.4   : Tagged on February 18, 2013. Released February 25, 2013.
    2.4.3   : Tagged on August 17, 2012. Released August 18, 2012.
    2.4.2   : Tagged on April 5, 2012. Released April 17, 2012.
    2.4.1   : Tagged on February 13, 2012. Released February 21, 2012.
    2.4.0   : Tagged on January 16, 2012. Not released.
    2.3.16  : Tagged on December 15, 2011. Released December 19, 2011
    2.3.15  : Tagged on November 8, 2011. Released November 15, 2011.
    2.3.14  : Tagged on August 1, 2011. Released August 9, 2011.
    2.3.13  : Tagged on June 28, 2011. Not released.
    2.3.12  : Tagged on May 11, 2011. Released May 23, 2011.
    2.3.11  : Tagged on March 1, 2011. Released March 7, 2011.
    2.3.10  : Tagged on December 13, 2010. Released December 21, 2010.
    2.3.9   : Tagged on November 23, 2010. Not released.
    2.3.8   : Tagged on August 24, 2010. Released August 31, 2010.
    2.3.7   : Tagged on August 19, 2010. Not released.
    2.3.6   : Tagged on June 11, 2010. Released on June 21, 2010.
    2.3.5   : Tagged on January 21, 2010. Released on January 26, 2010.
    2.3.4   : Tagged on November 25, 2009. Released on December 8, 2009.
    2.3.3   : Tagged on November 11, 2009. Not released.
    2.3.2   : Tagged on March 23, 2009. Not released.
    2.3.1   : Tagged on January 2, 2009. Not released.
    2.3.0   : Tagged on December 6, 2008. Not released.

Contributors looking for a mission:

  * Just do an egrep on "TODO" or "XXX" in the source.

  * Review the bug database at: http://issues.apache.org/bugzilla/

  * Review the "PatchAvailable" bugs in the bug database:

    https://issues.apache.org/bugzilla/buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&product=Apache+httpd-2&keywords=PatchAvailable

    After testing, you can append a comment saying "Reviewed and tested".

  * Open bugs in the bug database.

  * See also the STATUS file in the docs/ directory, which lists documentation-specific TODO items.


CURRENT RELEASE NOTES:

  * Forward binary compatibility is expected of Apache 2.4.x releases, such
    that no MMN major number changes will occur after 2.4.1.  Such changes can
    only be made in the trunk.

  * All commits to branches/2.4.x must be reflected in SVN trunk,
    as well, if they apply.  Logical progression is commit to trunk
    then merge into branches/2.4.x, as applicable.

  * Current exceptions for RTC for this branch:
    . mod_proxy_http2
    . mod_lua
    . documentation
    . non-Unix build
    . non-Unix, single-platform code

RELEASE SHOWSTOPPERS:


PATCHES ACCEPTED TO BACKPORT FROM TRUNK:
  [ start all new proposals below, under PATCHES PROPOSED. ]

PATCHES PROPOSED TO BACKPORT FROM TRUNK:
  [ New proposals should be added at the end of the list ]

  *) core: Allow mod_env to override all system path envvars not just PATH
     trunk patch: http://svn.apache.org/r1811831
     2.4.x patch: svn merge -c 1811831 ^/httpd/httpd/trunk .
     +1: jorton, rpluem
     ylavic: same as dev@; since SetEnv* are usable from htaccess, wouldn't
             we open a door here (unconditionally)?

  *) core: avoid duplicate headers when using ap_send_error_response.
           From trunk's testing the code seems running fine without any side
           effects, so adding this change in here to have more reviews.
     trunk patch: http://svn.apache.org/r1832092
     2.4.x patch: svn merge -c 1832092 ^/httpd/httpd/trunk .
     +1: elukey

  *) mod_ssl: Fix the error code returned in an error path of 'ssl_io_filter_handshake()'
              This messes-up error handling performed in 'ssl_io_filter_error()'
     trunk patch: http://svn.apache.org/r1645529
     2.4.x patch: svn merge -c 1645529 ^/httpd/httpd/trunk . 
     +1: ylavic, druggeri
     druggeri: Why no +1, jallietc36?
     rpluem: I think the patch is wrong here and in trunk. This causes
     ap_pass_brigade to return APR_SUCCESS in ap_proxy_pass_brigade. The error
     bucket inserted by ssl_io_filter_error IMHO makes no sense because it
     would be sent to the origin server (the proxy backend) and not to our
     client. Further discussion should possibly happen on dev@.

  *) mpm_winnt: Don't forget to close the I/O completion port as part of the
                cleanup in the child process.
     trunk patch: http://svn.apache.org/r1801143
     2.4.x patch: svn merge -c 1801143 ^/httpd/httpd/trunk . 
     +1: jailletc36, ylavic (by inspection),
     jailletc36: untested, but looks straight forward enough to vote

  *) kotkov has made mamy improvements to the mpm_winnt about one year ago.
     None of them have been merged or proposed for backport yet.
     Start the merge process with the first easy steps in order to synch
     2.4.x and trunk and ease other merges
     - mpm_winnt: Factor out a helper function to parse the type of an accept
                  filter and use an appropriate enum for it
     - mpm_winnt: fix typo
     - mpm_winnt: follow-up to r1801144
     trunk patch: http://svn.apache.org/r1801144
                  http://svn.apache.org/r1801148
                  http://svn.apache.org/r1801456
     2.4.x patch: svn merge -c 1801144,1801148,1801456 ^/httpd/httpd/trunk . 
     +1: jailletc36

PATCHES/ISSUES THAT ARE BEING WORKED
  [ New entries should be added at the START of the list ]

  *) mod_dav: Allow other modules to become providers and add ACLs
     to the DAV response.
     trunk patch: http://svn.apache.org/r1748322
                  http://svn.apache.org/r1824590
                  http://svn.apache.org/r1824596
     2.4.x: trunk works modulo CHANGES/MMN/log-message
     +1: minfrin, jim
     -1: rpluem: While we allow extensions of structures at the end in general
                 this is a specific case where the the design of the mod_dav
                 API clashes with this approach, as the API requires consumers
                 to create the public structs on their own, something we do
                 not "allow/encourage" otherwise in order to be able to do the
                 structure extension. I don't want to see consumers of this API
                 suffer from the clash we created.
                 See also:
                 https://lists.apache.org/thread.html/b924afe0fcc58a8636b753e630421bf6dc2080653a79575fd5fd641a@%3Cdev.httpd.apache.org%3E

  *) mod_ssl: Return 502 instead of 500 when SSL peer check or
     proxy_post_handshake hook fails.
     Trunk patch: r1645529 (works)
     2.4.x patch which adds CHANGES: https://emptyhammock.com/media/downloads/r1645529-to-2.4.x.txt
     +1: trawick
     ylavic: there may be missing bits, see thread for commit r1736510.

  *) core: Drop an invalid Last-Modified header value coming
     from a (F)CGI script instead of replacing it with Unix epoch.
     Warn the users about Last-Modified header value replacements
     and violations of the RFC.
     trunk patch: http://svn.apache.org/r1748379
                  http://svn.apache.org/r1750747
                  http://svn.apache.org/r1750749
                  http://svn.apache.org/r1750953
                  http://svn.apache.org/r1751138
                  http://svn.apache.org/r1751139
                  http://svn.apache.org/r1751147
                  http://svn.apache.org/r1757818
     2.4.x: trunk patches work, final view:
            http://home.apache.org/~elukey/httpd-2.4.x-core-last_modified_tz_logging.patch
     The problem has been discussed in dev@ extensively but we did not reach a common
     agreement about how to proceed in the long term. While we wait, I would really like
     to introduce useful logs for the users (the starting point of this change was a users@
     email thread). If this is not the right way to go I will move the patch to other
     sections of STATUS (stalled or being worked).
     The code has been tested with a simple PHP script returning different Last-Modified
     headers (GMT now, GMT now Europe/Paris, GMT tomorrow, GMT yesterday, PST now).
     +1: elukey

  *) http: Don't remove the Content-Length of zero from a HEAD response if
     it comes from an origin server, module or script. Allow the previous
     behaviour (for legacy/buggy modules only, not origin) by also backporting
     the HttpContentLengthHeadZero directive (and also HttpExpectStrict which
     comes for free with the same commit).
     trunk patch: http://svn.apache.org/r1554303
                  http://svn.apache.org/r1678215
     2.4.x patch: http://people.apache.org/~ylavic/httpd-2.4.x-preserve_head_cl_zero.patch
     +1: ylavic, jim
     ylavic: r1554303 issued a major MMN bump, but since the ABI change is two
             ints added at the end of core_server_config, the proposed merge
             does a minor bump only.
     minfrin: Two new directives need to be documented.

   * 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.
     trunk patch: http://svn.apache.org/r1656259
                  http://svn.apache.org/r1656359 (CHANGES entry)
     2.4.x patch: trunk works (modulo CHANGES, docs/log-message-tags)
     +1: ylavic
     -0: jim:  This seems to be a hit to normal performance, to handle an
               error and/or non-normal condition. The pre-fetch is
               expensive, and is always done, even before we know that
               the backend is available to rec' it. I understand the
               error described, but is the fix actually worth it (plus
               it seems to allow for a DDoS vector).
     ylavic: It seems to me that the problem is real since we reuse the
             connection before prefetching 16K (either controlled by the
             client, or by an input filter), we currently always prefetch
             these bytes already. Regarding performance I don't see any
             difference (more cycles) compared with the current code.
             However I think I failed to rebuild the header_brigade when
             the proxy loop is retried (ping), so I need to rework this.
             Do you think we'd better remove the prefetch, or maybe just
             make it nonblocking (by default)?
        jim: Non-blocking seems the best way to handle...

   * Support PCRE2 (10.x) in place of PCRE (8.x).
     Submitted by: wrowe, Petr Pisar [ppisar redhat.com]
     trunk patches:
         http://svn.apache.org/r1773454
         http://svn.apache.org/r1773741
         http://svn.apache.org/r1773742
         http://svn.apache.org/r1773839
         http://svn.apache.org/r1773870
         http://svn.apache.org/r1773882
     wrowe notes that the current code is too inefficient, owing to the fact
     that the ovector is a required allocation and is no longer allocated on
     the stack, by design. The correct fix is an apr userdata allocation on
     the appropriate pool, which would be thread-safe, but the actual API of
     ap_regexec[_len]() offers us no pool. We cannot associate that pool with
     the ap_regex_t, because a single regex may be used by many threads in
     parallel and is not thread-safe beyond initialization.
     So the only fix allowing us to use PCRE 10 in httpd 2.4 would be to write
     this as a thread safe storage buffer for the majority of cases (<10 $args)
     and we don't have a portable tls mechanism to do so.
     jorton: Adding ap_pregexec/_len which pass a pool would also work
             for internal users of this api; not sure if performance
             impact is significant from using malloc here.


PATCHES/ISSUES THAT ARE STALLED

  *) mod_proxy: Add ap_proxy_define_match_worker() and use it for ProxyPassMatch
     and ProxyMatch section to distinguish between normal workers and workers
     with regex substitutions in the name. Implement handling of such workers
     in ap_proxy_get_worker(). Fixes the bug when regex workers were not
     matched and used for request. PR 43513.
     trunk patch: http://svn.apache.org/r1609680
                  http://svn.apache.org/r1609688
                  http://svn.apache.org/r1641381
                  http://svn.apache.org/r1826289
                  http://svn.apache.org/r1826313
     ylavic: Merge patch provided (reusing new->real to avoid double de_socketfy() call).
             Also added missing r1609688 to the patchset.
     2.4.x patch: http://home.apache.org/~ylavic/patches/httpd-2.4.x-ap_proxy_define_match_worker-v2.patch
     +1:
     -0: covener: lots of folks getting dns and connection reuse implicitly after we backport this.
     ylavic: agreed, withdrawing

   * core: Add ap_errorlog_provider to make ErrorLog logging modular. This
           backport keeps syslog logging as part of httpd core and only adds
           API to allow other modules to be used for error logging.
     trunk patch: http://svn.apache.org/r1525597
                  http://svn.apache.org/r1525664
                  http://svn.apache.org/r1525845
                  http://svn.apache.org/r1527003
                  http://svn.apache.org/r1527005
                  http://svn.apache.org/r1532344
                  http://svn.apache.org/r1539988
                  http://svn.apache.org/r1541029
                  http://svn.apache.org/r1543979
                  http://svn.apache.org/r1544156
                  http://svn.apache.org/r1626978
     2.4.x patch: http://people.apache.org/~jkaluza/patches/httpd-2.4.x-errorlog_provider.patch
     +1: jkaluza
     +1: covener w/ doc or code to fix syntax (providername:providerarg not supported like syslog or socacheproviders,
                 needs 2 args which is not valid in ErrorLog manual)
                 Note: This also fixes syslog logging dropping messages with NULL server_rec by reaching up into ap_server_conf
                 explicitly.
        
     trawick: nit: fix "writing" in "/* NULL if we are writing to syslog */"
              (sorry, haven't finished reviewing completely)
     jim: What is the status of this??

   * core: Add support for systemd socket activation.
     trunk patch: http://svn.apache.org/r1511033
                  http://svn.apache.org/r1608686
                  http://svn.apache.org/r1608694
                  http://svn.apache.org/r1608703
                  http://svn.apache.org/r1608721
                  http://svn.apache.org/r1608744
     2.4.x patch: http://people.apache.org/~jkaluza/patches/mod_systemd/httpd-2.4.x-socket-activation.patch
     +1: jkaluza

  * mod_proxy: Ensure network errors detected by the proxy are returned as
    504 Gateway Timeout as opposed to 502 Bad Gateway
    trunk patch: https://svn.apache.org/viewvc?view=revision&revision=1480058
    2.4.x patch: trunk patch works modulo CHANGES
    +1:
    -1: rpluem: This change is still disputed. See
        http://mail-archives.apache.org/mod_mbox/httpd-dev/201305.mbox/%3C1B16B9E3-87BA-4EEF-939C-7C7313B54714%40gbiv.com%3E

  * 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.
    Trunk patches: http://svn.apache.org/viewvc?view=revision&revision=1327907
                   http://svn.apache.org/viewvc?view=revision&revision=1328390
                   http://svn.apache.org/viewvc?view=revision&revision=1328714
    2.4 patch: http://people.apache.org/~fuankg/diffs/httpd-2.4.x-cross_compile.diff
    fuankg: on hold until we agree for a better and more simple solution ...

   * Makefile.win: Added copying of .vbs / .wsf CGIs to Windows install target.
                   Moved fixing of shebang to separate target so that it is
                   no longer executed by default and all CGIs remain inactive.
     trunk patch: http://svn.apache.org/viewvc?view=revision&revision=1387984
                  http://svn.apache.org/viewvc?view=revision&revision=1421203
                  http://svn.apache.org/viewvc?view=revision&revision=1421591
     2.4.x patch: http://people.apache.org/~fuankg/diffs/httpd-2.4.x-Makefile.win.diff
     +1 fuankg, gsmith
     -.8: trawick
          This commit is essentially deciding that an httpd install on
          Windows now has printenv/testcgi written in 2 more languages.
          To the extent that the usefulness is that it shows how to make scripts
          of these types executable by httpd, I believe that the documentation
          is the proper place to solve that.  To the extent that the usefullness
          is to show how to implement a CGI in these particular languages, I believe
          that the httpd distribution and documentation in general is not the
          place for that.  Historically these types of scripts have caused problems
          for downstream vendorsas well as newbies (and sometimes the intersection
          of those two groups) who don't understand that these are information leaks
          once they are enabled, and the subtlety of the way they are disabled ("Apache
          messed up the first line; let me fix that") contributes to that.
     fuankg notes: I've just added a big warning to all CGI scripts which should now
          make absolutely clear that these CGIs are for testing purpose only - so those
          who enable those scripts with inserting the right shebang should be 100% aware
          of any risks (this should cover your last point).
     jim: trawick, does the above address your concerns?
     trawick: to some extent (somebody reading the script gets an idea)
          Why isn't the configuration requirement documented instead
          of described indirectly in a sample?
          Why are these new samples added to the install without three
          votes?  (I didn't veto it; put your name next to the two
          existing ones and I'll be satisfied that enough people
          considered this addition as an appropriate solution for a
          real httpd usability problem.)
     wrowe: I'd agree with trawick, and suggest that these scripts can begin
            their life somewhere in the manual/ tree.  This really seems like
            the place where /usr/share/httpd/examples/ would be useful, but
            there isn't an ordinary directory for that.  Since we want none
            of the scripts to function 'out of the box', what about a new
            cgi-examples/ dir alongside cgi-bin/? Otherwise manual/cgi/examples
            might work?

  *) mod_journald: Add new module mod_journald to log error logs into journald.
     trunk patch: http://svn.apache.org/r1610339
                  http://svn.apache.org/r1621806
                  http://svn.apache.org/r1812339
     2.4.x patch: http://people.apache.org/~jkaluza/patches/httpd-2.4.x-mod_journald.patch
                  http://svn.apache.org/r1812339
     +1: jkaluza, jim
     jchampion: Looks like the headers require GCC extensions to compile, so
                mod_journald can't be configured in maintainer mode (-std=c89).
                Can anyone else reproduce, or is it just my distro?
     ylavic: missing r1812339 for maintainer-mode/c89/-Werror compliance,
             needed if the above configure.in proposal gets backported.
             Note that r1812339 could be backported in any case, even if
             the above configure.in proposal does not get accepted.

   * mod_systemd: New module, for integration with systemd on Linux.
     trunk patch: http://svn.apache.org/r1393976
                  http://svn.apache.org/r1393997
                  http://svn.apache.org/r1484554
                  http://svn.apache.org/r1528032
                  http://svn.apache.org/r1528034
                  http://svn.apache.org/r1614821
                  http://svn.apache.org/r1618579
                  http://svn.apache.org/r1618588
     2.4.x patch: http://people.apache.org/~jkaluza/patches/mod_systemd/httpd-2.4.x-mod_systemd.patch
     +1: jkaluza
     sf comments: The IdleShutdown logic seems broken. Consider a single
                  active connection that is stalled for 10 seconds. That
                  connection will be broken after GracefulShutdownTimeout.
                  A better logic would be to check if there is any open
                  connection that is not in keep-alive state.
