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.22  : Tagged on June 20, 2016.
    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 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_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.

  *) mod_dav: Add support for childtags to dav_error.
     trunk patch: http://svn.apache.org/r1746207
     2.4.x: trunk works modulo CHANGES/MMN
     +1: minfrin, jim

  *) 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.
     trunk patch: http://svn.apache.org/r1748047
     2.4.x: trunk works modulo CHANGES/MMN
     +1: minfrin, jim

  *) core: Drop an invalid Last-Modified header value coming
     from a FCGI/CGI script instead of replacing it with Unix epoch.
     trunk patch: http://svn.apache.org/r1748379
     2.4.x: trunk patch works
     +1: elukey

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

   * mod_dav: Allow other modules to become providers and add ACLs
     to the DAV response. Requires a release of apr-util v1.6.
     trunk patch: http://svn.apache.org/r1748322
     2.4.x: trunk works modulo CHANGES/MMN
     +1: minfrin
     rpluem asks: Will this compile with apr-util < v1.6 and keep
     mod_dav working (without the new features of the patch of course)?
     I doubt that we will require apr-util 1.6 for the lifetime of 2.4.x
     (see the discussion around ap_cstr_casecmp[n] an apr 1.6)
     minfrin: Yes, as you can see in the patch everything applies only
     if APR_XML_X2T_PARSED is defined, and the patch was tested with
     both apr-util v1.6 and apr-util v1.5.


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

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

   * core: block Define and Undefine in vhost and directory context. Because
     it is EXEC_ON_READ, it "breaks out" of these contexts anyway.
     trunk patch: http://svn.apache.org/r1656063
                  http://svn.apache.org/r1656122
     2.4.x patch:  http://people.apache.org/~covener/patches/2.4.x-define-limits.diff
     +1: covener (I need to review the docs manually in this area)
     -1: wrowe (blocking will break "working" .conf files on a subversion update
                meant to pick up security fixes.  "Alerting" I would agree to.)


