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

Documentation status is maintained separately and can be found at:

  * docs/STATUS in this source tree, or
  * http://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x/docs/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

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

  * http://svn.apache.org/repos/asf/httpd/httpd/branches/2.0.x/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.18  : In development.
    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 Jan 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 Nov 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 Feb 25, 2013
    2.4.3   : Tagged on August 17, 2012. Released Aug 18, 2012
    2.4.2   : Tagged on April 5, 2012. Released Apr 17, 2012.
    2.4.1   : Tagged on February 13, 2012. Released Feb 21, 2012.
    2.4.0   : Tagged on January 16, 2012, not released.
    2.3.16  : Tagged on December 15, 2011.
    2.3.15  : Tagged on November 8, 2011. Released Nov. 15, 2011.
    2.3.14  : Tagged on August 1, 2011. Released Aug. 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  : Released as Beta on March 7, 2011.
    2.3.10  : Tagged on December 13, 2010. Released Dec 21, 2010.
    2.3.9   : Tagged on November 23, 2010, not released.
    2.3.8   : Tagged on August 24, 2010.
    2.3.7   : Tagged on August 19, 2010, not released.
    2.3.6   : Released on June 21, 2010.
    2.3.5   : Released on January 26, 2010.
    2.3.4   : 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:
    . http/2 - mod_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 ]

  *) mod_alias: Introduce expression parser support for Alias, ScriptAlias
     and Redirect. Limit Redirect expressions to directory (Location) context
     and redirect statuses (implicit or explicit).
     trunk patch: http://svn.apache.org/r1653941
                  http://svn.apache.org/r1653978
                  http://svn.apache.org/r1656225
                  http://svn.apache.org/r1686853
                  http://svn.apache.org/r1686856
     2.4.x patch: https://people.apache.org/~minfrin/httpd-mod_alias-expr2.patch
     +1: minfrin

   * core: Fix crash in ap_mpm_pod_check call caused by NULL dereference of
          its parameter when starting httpd as single process (httpd -X).
     trunk patch: http://svn.apache.org/r1711479
     2.4.x patch: trunk works
     +1: jkaluza, jim
     minfrin: Needs extra parens to suppress a warning:
              prefork.c:1319:16: note: place parentheses around the assignment
              to silence this warning
     jailletc36: This has been done in r1711919
     ylavic: Also, I don't think the changes on worker/event are needed,
             prefork only requires the accept mutex in ONE_PROCESS mode.

  *) core: Limit to ten the number of tolerated empty lines between request,
     and consume them before the pipelining check to avoid possible response
     delay when reading the next request without flushing.
     trunk patch: http://svn.apache.org/r1710095
                  http://svn.apache.org/r1710105
                  http://svn.apache.org/r1711902
     2.4.x patch: http://people.apache.org/~ylavic/httpd-2.4.x-check_pipeline_blank_lines.patch
                  (trunk works, meant to ease review)
     +1: ylavic, minfrin
     icing: test 3 fails for me in t/security/CVE-2005-3357.t
     ylavic: not related (at least not the cause), fixed in r1715023.

  *) core/mod_ssl: 
     - master conn_rec* addition to conn_rec
     - minor mmn bump
     - improved ALPN and Upgrade handling
     - allowing requests for servers whose TLS configuration is compatible
       to the SNI server ones
     - disabling TLS renegotiation for slave connections
     changes are necessary for update modules/http2
     trunk patch: http://svn.apache.org/r1708107
                  http://svn.apache.org/r1709587
                  http://svn.apache.org/r1709602
                  http://svn.apache.org/r1709995
                  http://svn.apache.org/r1710231
                  http://svn.apache.org/r1710419
                  http://svn.apache.org/r1710572
                  http://svn.apache.org/r1710583
                  http://svn.apache.org/r1715023
                  + manual addition of "conn_rec *master;"
     branch mergeable to 2.4.x: ^/httpd/httpd/branches/2.4.17-protocols-changes
     +1: icing, ylavic
     before adding r1715023, jim was +1, retest?

  *) mod_ssl: For the "SSLStaplingReturnResponderErrors off" case, make sure
              to only staple responses with certificate status "good"
     trunk patch: https://svn.apache.org/r1711728
                  https://svn.apache.org/r1713209 (missing LOGNO only)
     2.4.x patch: trunk works (modulo CHANGES)
     +1: kbrand, icing
    

PATCHES/ISSUES THAT ARE BEING WORKED

  *) 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...

PATCHES/ISSUES THAT ARE STALLED

   * 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)
     trawick: nit: fix "writing" in "/* NULL if we are writting to syslog */"
              (sorry, haven't finished reviewing completely)
     jim: What is the status of this??

   * 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
     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://people.apache.org/~ylavic/httpd-2.4.x-ap_proxy_define_match_worker.patch
     +1: ylavic
     -0: covener tried to review this one in Austin with Jeff.  Does the added match function 
         really cover a very narrow set of parameters with the way it skips over backreferences?
         Also, why a new API vs. just setting the field inline?

   * 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

   * mod_journald: Add new module mod_journald to log error logs into journald.
                   This patch needs changes done in mod_systemd patch (already
                   proposed for 2.4.x).
     trunk patch: http://svn.apache.org/r1610339
                  http://svn.apache.org/r1621806
     2.4.x patch: http://people.apache.org/~jkaluza/patches/httpd-2.4.x-mod_journald.patch
     +1: jkaluza, jim
     rjung, minfrin: Not understanding "This patch needs changes done in
                     mod_systemd patch", am I right in understanding this patch is
                     already committed?
     jkaluza: No, that patch is not committed yet. It is in STALLED section.
              The link for that patch is: http://people.apache.org/~jkaluza/patches/mod_systemd/httpd-2.4.x-mod_systemd.patch

   * 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 Timout 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 satisified 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?

