Skip to content
CHANGES 427 KiB
Newer Older
  *) Add a new request hook, error_log.  This phase allows modules
     to act on the error log string _after_ it has been written
     to the error log.  The goal for this hook is to allow monitoring
     modules to send the error string to the monitoring agent.
     [Ryan Bloom]

  *) Modify mod_echo to make it use filters for input and output.
     [Ryan Morgan <rmorgan@covalent.net>]

  *) Extend mod_headers to support conditional driven Header 
     add, append and set. Use SetEnvIf to set an envar and conditionally
     add/append/set headers based on this envar thusly:

     SetEnvIf TSMyHeader value HAVE_TSMyHeader
     Header add MyHeader "%t %D" env=HAVE_TSMyHeader

     If the request contains header "TSMyHeader: value" then header
     MyHeader: "t=xxxxxxxxxx D=yyyy" will be sent on the response.
     [Bill Stoddard]

  *) Extend mod_headers to support using format specifiers on Header
     add, append and set header values. Two format specifiers are supported:

     %t - reports, in UTC microseconds since the epoch, when the
          request was received.

     %D - reports the time, in microseconds, between when the request was 
          received and the response sent. 

     Examples:
     Header add MyHeader "This request served in %D microseconds. %t"

     results in a header being added to the response that looks like this:
     
     MyHeader: This request served in D=5438 microseconds. t=991424704447256

     [Bill Stoddard]
  *) Fix reset_filter().  We need to be careful how we remove filters.
     If we set r->output_filters to NULL, we also have to reset the
     connection's filters.  [John Sterling]

  *) Optimise reset_filter() in http_protocol.c. [Greg Stein]

  *) Add a check to ap_die() to make sure the filter stack is sane and
     contains the correct basic filters when an error occurs. This fixes
     a problem where headers are not being sent on error. [John Sterling]

  *) New Header directive 'echo' option. "Header echo regex" will
     cause any headers received on the request that match regex to be
     echoed to (included in) the response headers.
     [Bill Stoddard]
  *) include/ap_compat.h tested and set APR_COMPAT_H instead of AP_COMPAT_H.
     This prevented the inclusion of apr_compat.h.  PR #7773
     [Oleg Broytmann <phd@phd.pp.ru>]

  *) Moved util_uri to the apr-util library.  This required a bunch of
     apr_name changes for the uri utility functions.  [Justin Erenkrantz]

Graham Leggett's avatar
Graham Leggett committed
  *) Move the addition of default AP_HTTP_HTTP_HEADER filters to the
     insert_filter phase so that other filters are not bypassed by default.
     [Graham Leggett]

  *) Reimplement mod_headers as an output filter. mod_headers can now
     add custom headers to inbound requests using the RequestHeader directive
     and to responses using the same old Header directive.  [Graham Leggett]

Changes with Apache 2.0.18
  *) Fix command-line processing so that if a bad argument is specified
     Apache will exit.  [Jeff Trawick]

  *) Change the make targets and rules to be consistent in all of the
     Apache-owned source trees.  [Roy Fielding]
     
  *) Fix processing of the TRACE method.  Previously we passed bogus
     parms to form_header_field() and it overlaid some vhost structures,
     resulting in a segfault in check_hostalias(). 
     [Greg Ames, Jeff Trawick]

  *) Win32: Add support for reliable piped logs. If the logging process
     goes down, Apache will automatically restart it. This function has 
     been part of Apache on Unix/Linux/BSD since the early v1.3 releases.
     [Bill Stoddard]

  *) Do not start piped log processes during the config file 
     preflight.  This change also circumvents a problem on 
     Windows where the rotatelog processes created during preflight
     was not getting cleaned up properly.
     [Bill Stoddard]

  *) add "Request Phase Participation" info to mod_info
     [Doug MacEachern]
Paul J. Reder's avatar
 
Paul J. Reder committed
  *) Make first phase changes to the scoreboard data structures in
     preparation for the rewriting of the scoreboard per my posted
     design notes. [Paul J. Reder]

  *) Fix httpd's definition of LTFLAGS to be consistent with that of apr
     and apr-util, allow it to be overridden by the configure command-line
     (default="--silent") and introduce LT_LDFLAGS to replace what we were
     formerly abusing as LTFLAGS.  [Roy Fielding]
  *) Clean up the reporting of incorrect closing container tags.
     [Barrie Slaymaker <barries@slaysys.com>]

  *) Simplify the configure process by moving all libtool stuff to APR
     and moving hints.m4 inline.  [Roy Fielding]

  *) Add the AP_DECLARE()/AP_CORE_DECLARE macros on the return types
     of functions used by mod_proxy for export in the DLL 
     [Ian Holsman <IanH@cnet.com>]

  *) Prevent a hang when a cgi handled by mod_cgid tries to read a
     request body from its stdin but no reqest body is being written to 
     the cgi.  [Jeff Trawick]

  *) mod_log_config: %c connection status incorrectly logged
     as "-" (non-keepalive) when MaxKeepAliveRequests is set to 0.
     [Bill Stoddard]

  *) Get mod_cern_meta working under Windows
     [Bill Stoddard]
Paul J. Reder's avatar
 
Paul J. Reder committed

  *) Create Files, and thus MMAPs, out of the request pool, not the
     connection pool.  This solves a small resource leak that had us
     not closing files until a connection was closed.  In order to do
     this, at the end of the core_output_filter, we loop through the
     brigade and convert any data we have into a single HEAP bucket
     that we know will survive clearing the request_rec.
     [Ryan Bloom, Justin Erenkrantz <jerenkrantz@ebuilt.com>,
      Cliff Woolley]

  *) Completely revamp configure so that it preserves the standard make
     variables CPPFLAGS, CFLAGS, CXXFLAGS, LDFLAGS and LIBS by moving
     the configure additions to EXTRA_* variables.  Also, allow the user
     to specify NOTEST_* values for all of the above, which eliminates the
     need for THREAD_CPPFLAGS, THREAD_CFLAGS, and OPTIM.  Fix the setting
     of INCLUDES and EXTRA_INCLUDES.  Check flags as they are added to
     avoid pointless duplications.  Fix the order in which flags are given
     on the compile and link lines.  Remove obsolete macros APR_DOEXTRA,
     AC_ADD_LIBRARY, AC_CHECK_DEFINE, APACHE_PASSTHRU, and APACHE_ONCE.
     Added APR_SAVE_THE_ENVIRONMENT and APR_RESTORE_THE_ENVIRONMENT macros.
     Renamed AC_TYPE_RLIM_T macro to APACHE_TYPE_RLIM_T.  [Roy Fielding]
  *) Get mod_tls to compile/work better on Windows.  PR #7612
     [Bernhard Schrenk <b.schrenk@improx.com>]

Greg Ames's avatar
 
Greg Ames committed
  *) Fix shutdown/restart hangs in the threaded MPM.
     [Jeff Trawick, Greg Ames, Ryan Bloom]
  
  *) Removed the keptalive boolean from conn_rec because it is now only
     used by a single routine and can be replaced by a local variable.
     [Greg Stein, Ryan Bloom, Roy Fielding]

Paul J. Reder's avatar
 
Paul J. Reder committed
  *) Patch prefork to put enough of the signal processing back in so that
     signals are all handled properly now. The previous patch fixed the
     deadlock race condition, but broke the user directed signal handling.
     This fixes it to work the way it did before my previous prefork patch
     (primarily, SIGTERM is now working).
  *) Change how input filters decide how much data is returned to the
     higher filter.  We used to use a field in the conn_rec, with this
     change, we use an argument to ap_get_brigade to determine how much
     data is retrieved. [Ryan Bloom]

  *) Fix seg fault at start-up introduced by Ryan's change to enable
     modules to specify their own logging tags. mod_log_config
     registers an optional function, ap_register_log_handler().
     ap_register_log_handler() was being called by http_core before
     the directive hash table was created. This patch creates the
     directive hash table before ap_register_log_handler() is
     registered as an optional function.
     [jean-frederic clere <jfrederic.clere@fujitsu-siemens.com>]
  *) Add ap_set_int_slot() function
     [John K. Sterling <sterling@covalent.net>]

  *) Under certain circumstances, Apache did not supply the
     right response headers when requiring authentication.
     [Gertjan van Wingerde <Gertjan.van.Wingerde@cmg.nl>] PR#7114
     (This is a port of the change that went into Apache 1.3.19.)

  *) Allow modules to specify their own logging tags.  This basically
     allows a module to tell mod_log_config that when %x is encountered
     a specific function should be called.  Currently, x can be any single
     character.  It may be more useful to make this a string at some point.
     [Ryan Bloom]

Changes with Apache 2.0.17
  *) If a higher-level filter handles the the byterange aspects of a
     request, then the byterange filter should not try to redo the
     work.  The most common case of this happening, is a byterange
     request going through the proxy, and the origin server handles
     the byterange request.  The proxy should ignore it.
     [Graham Leggett <minfrin@sharp.fm>]

  *) Changed the threaded mpm to have child_main join to each of the
     worker threads to make sure the kids are all gone before child_main
     exits after a signal (cleanup from perform_idle_server_maintenance).
     This is an extension of Ryans recent commit to make the child_main
     the signal thread.

Ryan Bloom's avatar
Ryan Bloom committed
  *) Add more options to the ap_mpm_query function.  This also allows MPMs to
     report if their threads are dynamic or static.  Finally, this also
     implements a new API, ap_show_mpm, which returns the MPM that was
     required into the core. [Harrie Hazewinkel <harrie@covalent.net>]

  *) Do not install the binaries from the support directory twice.
     [jun-ichiro hagino <itojun@iijlab.net>]

  *) The ap_f* functions should flush data to the filter that is passed
     in, not the the filter after the one passed in.
     [Ryan Morgan <rmorgan@covalent.net>]

  *) Make ab work again by changing its native types to apr types and formats.
     [Justin Erenkrantz <jerenkrantz@ebuilt.com>]

  *) Move the byterange filter and all of the supporting functions back
     to the HTTP module.  The byterange filter turned out to be very
     HTTP specific, and it belongs in the HTTP module.  [Greg Stein]

  *) Make clean, distclean, and extraclean consistently according to the
     Gnu makefile guidelines.  [Justin Erenkrantz <jerenkrantz@ebuilt.com>]

  *) Fix errors in the renaming of the apr_threadattr_detach_xxx functions.
     This may have been causing problems stopping processes in the threaded
     mpm's. [Greg Ames]

William A. Rowe Jr's avatar
 
William A. Rowe Jr committed
  *) Fix content-length in mod_negotiation to a long int representation.
     [William Rowe]

  *) Remove BindAddress from the default config file.
     [giles@nemeton.com.au]

  *) Allow module authors to add a module to their Apache build using
     --with-module, without re-running buildconf.  The syntax is:
	--with-module=module_type:/path/to/module.c
     The configure script will copy the module.c file to 
     modules/module_type, and it will be added to the relevant Makefiles.
     currently, this only works for static modules.  [Ryan Bloom]

  *) Changes required to make prefork clean up idle children properly.
     There was a window during which a starting worker deadlocks when
     an idle cleanup arrives before it completes init. Apache then keeps
     trying to cleanup the same deadlocked worker forever (until higher
     pids come along, but it still will never reduce below the deadlocked
     pid). Thus the number of children would not reduce to the correct
     idle level. [Paul J. Reder]

Changes with Apache 2.0.16

  *) Change the default installation directory to /usr/local/apache2,
     as now defined by the "Apache" layout in config.layout. [Marc Slemko]

  *) OS/2: Added support for building loadable modules as OS/2 DLLs. 
     [Brian Havard]

  *) Get MaxRequestsPerChild working with the Windows MPM.
     [Bill Stoddard]
William A. Rowe Jr's avatar
 
William A. Rowe Jr committed
  *) Make generic hooks to work, with mod_generic_hook_import/export
     experimental modules.  [Ben Laurie, Will Rowe]

  *) Fix segfaults for configuration file syntax errors such as
     "<Directory>" followed by "</Directory" and
     "<Directory>" followed by "</Directoryz>".  [Jeff Trawick]

  *) Cleanup the --enable-layout option of configure.  This makes
     us use a consistent location for the config.layout file, and it
     makes configure more portable.
     [jun-ichiro hagino <itojun@iijlab.net>]

  *) Changes to 'ab'; fixed int overrun's, added statistics, output in
     csv/gnuplot format, rudimentary ssl support and various other tweaks
     to make results more true to what is measured. The upshot of this it
     turns out that 'ab' has often underreported the true performance of
     apache. Often by a order of magnitude :-) See talk/paper of Sander 
     Temme <sctemme@covalent.net> at April ApacheCon 2001 for details.
     [Dirk-Willem van Gulik]

  *) Clean up mod_cgid's temporary request pool.  Besides fixing a
     storage leak this ensures that some unnecessary pipes are closed.
     [Jeff Trawick]

  *) Performance: Add quick_handler hook. This hook is called at the
     very beginning of the request processing before location_walk,
     translate_name, etc.  This hook is useful for URI keyed content
     caches like Mike Abbott's Quick Shortcut Cache.
     [Bill Stoddard]
  *) top_module global variable renamed to ap_top_module [Perl]

  *) Move ap_set_last_modified to the core.  This is a potentially 
     controversial change, because this is kind of HTTP specific.  However
     many protocols should be able to take advantage of this kind of
     information.  I expect that headers will need one more layer of
     indirection for multi-protocol work, but this is a small step in
     the right direction.  [Ryan Bloom]

  *) Enable mod_status by default.  This matches what Apache 1.3 does.
     [Ed Korthof]

  *) Add a ScriptSock directive to the default config file.  This is
     only enabled when mod_cgid is used.  
     [Taketo Kabe <kabe@sra-tohoku.co.jp>]

Ryan Bloom's avatar
Ryan Bloom committed
Changes with Apache 2.0.15

  *) Untangled the buildconf script and eliminated the need for build's
     aclocal.m4, generated_lists, build.mk, build2.mk, and a host of other
     libtool muck that is now under srclib/apr/build.  [Roy Fielding]

  *) Win32: Don't accept more connections than we have worker threads
     to handle.
     [Bill Stoddard]

  *) Fix bug in the Unix threaded.c MPM that allowed child processes
     to fork() new child processes. 
     [Bill Stoddard]
  *) Fix a major security problem with double-reverse lookup checking.  
     Previously, a client connecting over IPv4 would not be matched 
     properly when the server had an IPv6 listening socket.  PR #7407
     [Taketo Kabe <kiabe@sra-tohoku.co.jp>]

  *) Change the way the beos MPM handles polling to allow it to stop and
     restart.  Problem was the sockets being polled were being reset by
     the select call, so once it had accepted a connection it was no
     longer listening on the UDP socket we use for shutdown instructions.
     APR needs to be altered, patch on it's way. [David Reid]

  *) Empty out the brigade shared by ap_getline()/ap_get_client_block()
     on error exit from ap_getline().  Some other code got upset because
     the wrong data was in the brigade.  [Greg Ames, Jeff Trawick]

  *) Handle ap_discard_request_body() being called more than once.
     [Greg Ames, Jeff Trawick]

  *) Get rid of an inadvertent close of file descriptor 2 in
     mod_mime_magic.  [Greg Ames, Jeff Trawick]

  *) Add a hook, create_request.  This hook allows modules to modify
     a request while it is being created.  This hook is called for all
     request_rec's, main request, sub request, and internal redirect.
     When this hook is called, the the r->main, r->prev, r->next
     pointers have been set, so modules can determine what kind of
     request this is.  [Ryan Bloom]

  *) Cleanup the build process a bit more.  The Apache configure
     script no longer creates its own helper scripts, it just
     uses APR's.  
     [jean-frederic clere <jfrederic.clere@fujitsu-siemens.com>]

  *) Stop the forced downgrade of the connection to HTTP/1.0 for
     proxy requests.  [Graham Leggett]

  *) Avoid using sscanf to determine the HTTP protocol number in
     the common case because sscanf is a performance hog. From
     Mike Abbot's Accelerating Apache patch number 6.
     [Mike Abbot <mja@trudge.engr.sgi.com>, Bill Stoddard]
Ken Coar's avatar
 
Ken Coar committed

  *) Fix a security exposure in mod_access.  Previously when IPv6 
     listening sockets were used, allow/deny-from-IPv4-address rules 
     were not evaluated properly (PR #7407).  Also, add the ability to 
     specify IPv6 address strings with optional prefix length on Allow 
     and Deny.  [Jeff Trawick]

Ken Coar's avatar
 
Ken Coar committed
  *) Enhance rotatelogs so that a UTC offset can be specified, and
     the logfile name can be formatted using strftime(3).  (Brought
     forward from 1.3.)  [Ken Coar]

  *) Reimplement the Windows MPM (mpm_winnt.c) to eliminate calling 
     DuplicateHandle on an IOCompletionPort (a practice which
     MS "discourages"). The new model does not rely on associating
     the completion port with the listening sockets, thus the
     completion port can be completely managed within the child 
     process.  A dedicated thread accepts connections off the network,
     then calls PostQueuedCompletionStatus() to wake up worker
     threads blocked on the completion port.
     [Bill Stoddard]
Ken Coar's avatar
 
Ken Coar committed
  *) Bring forward the --suexec-umask option which allows the
     builder to preset the umask for suexec processes.  [Ken Coar]

Ken Coar's avatar
 
Ken Coar committed
  *) Add a -V flag to suexec, which causes it to display the
     compile-time settings with which it was built.  (Only
     usable by root or the AP_HTTPD_USER username.)  [Ken Coar]

  *) Mod_include should always unset the content-length if the file is
     going to be passed through send_parsed_content.  There is no to
     determine if the content will change before actually scanning the
     entire content.  It is far safer to just remove the C-L as long
     as we are scanning it.  [Ryan Bloom]

  *) Make sure Apache sends WWW-Authenticate during a reverse proxy
     request and not Proxy-Authenticate.
     [Graham Leggett <minfrin@sharp.fm>]

  *) Fix content-length computation.  We ONLY compute a content-length if
     We are not in a 1.1 request and we cannot chunk, and this is a keepalive
     or we already have all the data.  [Ryan Bloom]

  *) Report unbounded containers in the config file.  Previously, a typo
     in the </container> directive could result in the rest of the config
     file being silently ignored, with undesired defaults used.
     [Jeff Trawick]

  *) Make the old_write filter use the ap_f* functions for the buffering.
     [Ryan Bloom]

  *) Move more code from the http module into the core server.  This
     is core code, basically the default handler, the default input
     and output filters, and all of the core configuration directives.
     All of this code is required in order for the server to work, with or
     without HTTP.  The server is closer to working without the HTTP
     module, although there is still more to do.  [Ryan Bloom]

  *) Fix a number of SGI compile warnings throughout the server.  Fix some
     bad parameters to apr_bucket_read().  Fix a bad statement in 
     ap_method_in_list().  For the mod_rewrite cache use apr_time_t 
     consistently; we were mixing apr_time_t and time_t in invalid ways 
     before.  In load_file(), call apr_dso_error() instead of 
     apr_strerror() so that we get a more specific string on some platforms.
     PR #6980  [Jeff Trawick]

  *) Allow modules to query the MPM about it's execution profile.  This
     query API can and should be extended in the future, but for now,
     max_daemons, and threading or forking is a very good start.
     [Jon Travis <jtravis@covalent.net>]

  *) Modify mod_include to send blocks of data no larger than 9k.
     Without this, mod_include will wait until the whole file is parsed,
     or the first tag is found to send any data to the client.
     [Paul J. Reder <rederpj@raleigh.ibm.com>]

  *) Fix mod_info, so that <Directory> and <Location> directives are
     not displayed twice when displaying the current configuration.
     [Ryan Morgan <rmorgan@covalent.net>]

  *) Add config directives to override DEFAULT_ERROR_MSG and
     DEFAULT_TIME_FORMAT.  This was sent in as PR 6193.
     [Dan Rench <drench@xnet.com>]

William A. Rowe Jr's avatar
 
William A. Rowe Jr committed
  *) Get mod_info building and loading on Win32.  [William Rowe]

  *) Begin to move protocol independant functions out of mod_http.  The goal
     is to have only functions that are HTTP specific in the http directory.
     [Ryan Bloom]

Changes with Apache 2.0.13

  *) Don't assume that there will always be multiple calls to the byterange 
     filter.  It is possible that we will need to do byteranges with only
     one call to the filter.  [Ryan Morgan <rmorgan@covalent.net>]
  *) Move the error_bucket definition from the http module to the
     core server.  Every protocol will need this ability, not just
     HTTP.  [Ryan Bloom]

  *) Modify mod_file_cache to save pre-formatted strings for 
     content-length and last-modified headers for performance. 
     [Mike Abbot <mja@trudge.engr.sgi.com>]

  *) Namespace protect IOBUFSIZ since it is exposed in the API.
     [Jon Travis <jtravis@covalent.net>]

  *) Use "Basic" authentication instead of "basic" in ab, as the spec
     says we should.  [Andre Breiler <andre.breiler@rd.bbc.co.uk>]

  *) Fix a seg fault in mod_userdir.c.  We used to use the pw structure
     without ever filling it out.  This fixes PR 7271.
     [Taketo Kabe <kabe@sra-tohoku.co.jp> and 
      Cliff Woolley <cliffwoolley@yahoo.com>]

  *) Add a couple of GCC attribute tags to printf style functions.
     [Jon Travis <jtravis@covalent.net>]

  *) Add the correct language tag for interoperation with the Taiwanese
     versions of MSIE and Netscape. [Clive Lin <clive@CirX.ORG>] PR#7142

  *) Migrate the perchild MPM to use the new apr signal child, and 
     APR thread functions.  [Ryan Bloom]

  *) Close one copy of the CGI's stdout before creating the new process.
     The CGI will still have stdout, because we have already dup'ed it.
     This keeps Apache from waiting forever to send the results of a CGI
     process that has forked a long-lived child process.
     [Taketo Kabe <kabe@sra-tohoku.co.jp>]

  *) Remove the rest of the pthreads functions from the threaded MPM.
     This requires the APR support for a signal thread that was just
     added.  [Ryan Bloom]

  *) Make mod_dir use a fixup for sending a redirect to the browser.
     Before this, we were using a handler, which doesn't make much
     sense, because the handler wasn't generating any data, it would
     either return a redirect error code, or DECLINED.  This fits the
     current hooks better.  [Ryan Morgan <rmorgan@covalent.net>]

  *) Make the threaded MPM use APR threads instead of pthreads.
     [Ryan Bloom]

Ben Laurie's avatar
Ben Laurie committed
  *) Get mod_tls to the point where it actually appears to work in all cases.
     [Ben Laurie]

  *) implement --enable-modules and --enable-mods-shared for "all" and
     "most".  [Greg Stein]

  *) Move the threaded MPM to use APR locks instead of pthread locks.
     [Ryan Bloom]

  *) Rename mpmt_pthread to threaded.  This is more in line with the
     fact that mpmt_pthread shouldn't be using pthreads directly, and
     it is a smaller name that doesn't tie into anything.
     [Ryan Bloom]

  *) Rename the module structures so that the exported symbol matches
     the file name, and it is easier to automate the installation
     process (generating LoadModule directives from the module filenames).
     [Martin Kraemer]

  *) Remove the coalesce filter.  With the ap_f* functions, this filter
     is no longer needed. [Ryan Bloom]

Changes with Apache 2.0.11
  *) Remove the dexter MPM.  Perchild is the same basic idea, but it has the
     added feature of allowing a uid/gid per child process.  If no
     uid/gid is specified, then Perchild behaves exactly like dexter.
     [Ryan Bloom]

Ryan Bloom's avatar
Ryan Bloom committed
  *) Get perchild building again. [Ryan Bloom]

  *) Don't disable threads just because we are using the prefork MPM.
     If somebody wants to compile without threads, they must now add
     --disable-threads to the configure command line.  [Ryan Bloom]

  *) Begin to move the calls to update_child_status into common code, so
     that each individual MPM does not need to update the scoreboard itself.
     [Ryan Bloom]

  *) Allow mod_tls to compile under Unix boxes where openssl has been
     installed to the system include files.
     [Gomez Henri <new-httpd@slib.fr>]

  *) Cleanup the mod_tls configure process.  This should remove any need
     to hand-edit any files.  We require OpenSSL 0.9.6 or later, but 
     configure doesn't check that yet.  [Ryan Bloom]

Ben Laurie's avatar
Ben Laurie committed
  *) Add a very early prototype of SSL support (in mod_tls.c). It is
     vital that you read modules/tls/README before attempting to build
     it. [Ben Laurie]

  *) Fix a potential seg fault on all platforms.  David Reid fixed this
     on BEOS, but the problem could happen anywhere, so we don't want
     to #ifdef it. [Cliff Woolley <cliffwoolley@yahoo.com>]
 
  *) Add new LogFormat directive, %D, to log time it takes to serve a
     request in microseconds. [Bill Stoddard]
  *) Change AddInputFilter and AddOutputFilter to SetInputFilter and
     SetOutputFilter.  This corresponds nicely with the other Set 
     directives, which operate on containers while the Add* directives
     tend to work directly on extensions.  [Ryan Bloom]

  *) Cleanup the header handling a bit.  This uses the apr_brigade_*
     functions for the buffering so that we don't need to compute
     the length of the headers before we actually create the header
     buffer.  [Ryan Bloom]

  *) Allow filters to buffer data using the ap_f* functions.  These have
     become macros that resolve directly to apr_brigade_*.  
     [Ryan Bloom]

  *) Get the Unix MPM's to do a graceful restart again.  If we are going
     to register a cleanup with ap_cleanup_scoreboard, then we have to
     kill the cleanup with the same function,  and that function can't be
     static.  [Ryan Bloom]

  *) Install all required header files.  Without these, it was not
     possible to compile some modules outside of the server.
     [Ryan Bloom]

  *) Fix the AliasMatch directive in Apache 2.0.  When we brought a patch
     forward from 1.3 to 2.0, we missed a single line, which broke regex
     aliases.  [Ryan Bloom]

  *) We have a poor abstraction in the protocol.  This is a temporary
     hack to fix the bug, but it will need to be fixed for real.  If
     we find an error while sending out a custom error response, we back
     up to the first non-OK request and send the data.  Then, when we send
     the EOS from finalize_request_protocol, we go to the last request,
     to ensure that we aren't sending an EOS to a request that has already
     received one.  Because the data is sent on a different request than
     the EOS, the error text never gets sent down the filter stack.  This
     fixes the problem by finding the last request, and sending the data
     with that request.  [Ryan Bloom]

  *) Make the server status page show the correct restart time, and
     thus the proper uptime. [Ryan Bloom]

  *) Move the CGI creation logic from mod_include to mod_cgi(d).  This
     should reduce the amount of duplicate code that is required to
     create CGI processes.
     [Paul J. Reder <rederpj@raleigh.ibm.com>]

  *) ap_new_connection() closes the socket and returns NULL if a socket
     call fails.  Usually this is due to a connection which has been 
     reset.  [Jeff Trawick]

  *) Move the Apache version information out of httpd.h and into release.h.
     This is in preparation for the first tag with the new tag and release
     system.  [Ryan Bloom]

  *) Begin restructuring scoreboard code to enable adding back in
     the ability to use IPC other than shared memory.
     Get mod_status working on Windows again. [Bill Stoddard]
  *) Make mod_status work with 2.0.  This will work for prefork,
     mpmt_pthread, and dexter.  [Ryan Bloom]

  *) Correct a typo in httpd.conf.
     [Kunihiro Tanaka <tanaka@apache.or.jp>] PR#7154 

  *) Really fix mod_rewrite map lookups this time. [Tony Finch]

  *) Get the correct IP address if ServerName isn't set and we can't
     find a fully-qualified domain name at startup.
     PR#7170 [Danek Duvall <dduvall@eng.sun.com>]

  *) Make mod_cgid work with SuExec.  [Ryan Bloom]
William A. Rowe Jr's avatar
 
William A. Rowe Jr committed
  *) Adopt apr user/group name features for mod_rewrite.  Eliminates some
     'extra' stat's for user/group since they should never occur, and now
     resolves the SCRIPT_USER and SCRIPT_GROUP, including on WinNT NTFS
     volumes.  [William Rowe]

William A. Rowe Jr's avatar
 
William A. Rowe Jr committed
  *) Adopt apr features to simplify mod_includes.  This changes the
     behavior of the USER_NAME variable, unknown uid's are now reported
     as USER_NAME="<unknown>" rather than the old user#000 result.
     WinNT now resolves USER_NAME on NTFS volumes.  [William Rowe]

William A. Rowe Jr's avatar
 
William A. Rowe Jr committed
  *) Adopt apr features for simplifing mod_userdir, and accept the new
     Win32/OS2 exceptions without hiccuping.  [William Rowe]
William A. Rowe Jr's avatar
 
William A. Rowe Jr committed

  *) Replace configure --with-optim option by using and saving the
     environment variable OPTIM instead.  This is needed because configure
     options do not support multiple flags separated by spaces.
     [Roy Fielding]

  *) Fix some byterange handling.  If we get a byte range that looks like
     "-999999" where that is past the end of the file, we should return 
     a PARTIAL CONTENT status code, and return the whole file as one big
     byterange.  This matches the 1.3 handling now.  [Ryan Bloom]

  *) Make the error bucket a real meta-data bucket.  This means that the
     bucket length is 0, and a read returns NULL data.  If one of these
     buckets is passed down after the headers are sent, this data will
     just be ignored.  [Greg Stein]

  *) The prefork MPM wasn't killing child processes correctly if a restart
     signal was received while the process was serving a request.  The child
     process would become the equivalent of a second parent process.  If
     we break out of the accept loop, then we need to do die after cleaning
     up after ourselves.  [Ryan Bloom]

  *) Change the Prefork MPM to use SIGWINCH instead of SIGUSR1 for graceful
     restarts.  [Ryan Bloom]

William A. Rowe Jr's avatar
 
William A. Rowe Jr committed
  *) Modify the apr_stat/lstat/getfileinfo calls within apache to use
     the most optimal APR_FINFO_wanted bits.  This spares Win32 from
     performing very expensive owner, group and permission lookups
     and allows the server to function until these apr_finfo_t fields
     are implemented under Win32.  [William Rowe]

  *) Support for typedsafe optional functions - that is functions exported by
     optional modules, which, therefore, may or may not be present, depending
     on configuration. See the experimental modules mod_optional_fn_{ex,im}port
     for sample code. [Ben Laurie]

  *) filters can now report an HTTP error to the server.  This is done
     by sending a brigade where the first bucket is an error_bucket.
     This bucket is a simple bucket that stores an HTTP error and
     a string.  Currently the string is not used, but it may be needed
     to output an error log.  The http_header_filter will find this
     bucket, and output the error text, and then return 
     AP_FILTER_ERROR, which informs the server that the error web page
     has already been sent.  [Ryan Bloom]

  *) If we get an error, then we should remove all filters except for
     those critical to serving a web page.  This fixes a bug, where
     error pages were going through the byterange filter, even though
     that made no sense.  [Ryan Bloom]

  *) Relax the syntax checking of Host: headers in order to support
     iDNS. PR#6635 [Tony Finch]

  *) Cleanup the byterange filter to use the apr_brigade_partition
     and apr_bucket_copy functions.  This removes a lot of very messy
     code, and hopefully makes this filter more stable.
     [Ryan Bloom]

  *) Remove AddModule and ClearModuleList directives.  Both of these
     directives were used to ensure that modules could be enabled
     in the correct order.  That requirement is now gone, because
     we use hooks to ensure that modules are in the correct order.
     [Ryan Bloom]

  *) When SuExec is specified, we need to add it to the list of
     targets to be built.  If we don't, then any changes to the
     configuration won't affect SuExec, unless 'make suexec' is
     specifically run.  [Ryan Bloom]

William A. Rowe Jr's avatar
 
William A. Rowe Jr committed
  *) Cleaned out open_file from mod_file_cache, as apr now accepts
     the APR_XTHREAD argument to open a file for consumption by
     parallel threads on win32.  [William Rowe]

  *) Correct a bug in determining when we follow symlinks.  The code
     expected a stat -1 result, not an apr_status_t positive error.
     Also check if the APR_FINFO_USER fields are valid before we
     follow the link.  [William Rowe]

  *) Move initgroupgs, ap_uname2id and ap_gname2id from util.c to
     mpm_common.c.  These functions are only valid on some platforms,
     so they should not be in the main-line code. [Ryan Bloom]

  *) Remove ap_chdir_file().  This function is not thread-safe,
     and nobody is currently using it.  [Ryan Bloom]

  *) Do not try to run make depend if there are no .c files in the
     current directory, doing so makes `make depend` fail.
     [Ryan Bloom]

   *) Update highperformance.conf to work with either prefork or
      pthreads mpms.  [Greg Ames] 

  *) Stop checking to see if this is a pipelined request if we know
     for a fact that it isn't.  Basically, if r->connection->keepalive == 0.
     This keeps us from making an extra read call when serving a 1.0
     request.  [Ryan Bloom and Greg Stein]

Tony Finch's avatar
Tony Finch committed
  *) Fix the handling of variable expansion look-ahead in mod_rewrite,
     i.e. syntax like %{LA-U:REMOTE_USER}, and also fix the parsing of
     more complicated nested RewriteMap lookups. PR#7087 [Tony Finch]

  *) Fix the RFC number mentioned when complaining about a missing
     Host: header. PR#7079 [Alexey Toptygin <alexeyt@wam.umd.edu>]

  *) Fix an endless loop in ab which occurred when ab was posting
     and the server dropped the connection unexpectedly.
     [Jeff Trawick]

  *) Fix a segfault while handling request bodies in ap_http_filter().  
     This problem has been seen with mod_dav usage as well as with 
     requests where the body was just being discarded.  [Jeff Trawick]
  *) Some adjustment on the handling and automatic setting (via
     hints.m4) of various compilation flags (eg: CFLAGS). Also,
     add the capability to specify flags (NOTEST_CFLAGS and
     NOTEST_LDFLAGS) which are used to compile Apache, but
     not used during the configuration process. Useful for
     flags like "-Werror". [Jim Jagielski]

  *) Stop using environment variables to force debug mode or
     no detach.  We now use the -D command line argument to 
     specify the correct mode.  -DONE_PROCESS and -DNO_DETACH.
     [Greg Stein, Ryan Bloom]
Ben Laurie's avatar
Ben Laurie committed
  *) Change handlers to use hooks. [Ben Laurie]

  *) Stop returning copies of filenames from both apr_file_t and
     apr_dir_t.  We pstrdup the filenames that we store in the
     actual structures, so we don't need to pstrdup the strings again.
     [Ryan Bloom]

  *) mod_cgi: Fix some problems where the wrong error value was being
     traced.  [Jeff Trawick]

  *) EBCDIC: Fix some missing ASCII conversion on some protocol data.
     [Jeff Trawick]

  *) Add generic hooks. [Ben Laurie]

  *) Use a real pool to dup the error log descriptor.  [Ryan Bloom]

  *) Fix a segfault caused by mod_ext_filter when the external filter 
     program does not exist. [Jeff Trawick]

  *) Fix an output truncation error when on an HTTP >= 1.0 request an
     object of size between DEFAULT_BUCKET_SIZE and AP_MIN_BYTES_TO_WRITE 
     was served through mod_charset_lite (or anything else that would
     create a transient bucket in this size range).  ap_bucket_make_heap()
     silently failed (fixed), transient_setaside() discovered it, but
     ap_save_brigade() ignored it (fixed). [Jeff Trawick]
     
  *) Ignore \r\n or \n when using PEEK mode for input filters.  The problem
     is that some browsers send extra lines at the end of POST requests, and
     we don't want to delay sending data back to the user just because the
     browser isn't well behaved. [Ryan Bloom]

  *) Get SuEXEC working again.  We can't send absolute paths to suExec
     because it refuses to execute those programs.  SuEXEC also wasn't
     always recognizing configuration changes made using the autoconf
     setup.  [Ryan Bloom]

  *) Allow the buildconf process to find the config.m4 files in the correct
     order.  Basically, we can now name config.m4 files as config\d\d.m4,
     and we will sort them correctly when inserting them into the build
     process.  [Ryan Bloom]

  *) Get mod_cgid to use apr calls for creating the actual CGI process.
     This also allows mod_cgid to use ap_os_create_priviledged_process,
     thus allowing for SuExec execution from mod_cgid.  Currently, we do
     not support everything that standard SuExec supports, but at least
     it works minimally now. [Ryan Bloom]

  *) Allow SuExec to be configured from the ./configure command line.
     [Ryan Bloom]

  *) Update some of the docs in README and INSTALL to reflect some of
     the changes in Apache 2.0 [Cliff Woolley <cliffwoolley@yahoo.com>]

  *) If we get EAGAIN returned from the call to apr_sendfile, then we
     need to call sendfile again.  This gets us serving large files
     such as apache_2.0a9.tar.gz on FreeBSD again. [Ryan Bloom]

  *) Get the support programs building cleanly again.
     [Cliff Woolley <cliffwoolley@yahoo.com>]

William A. Rowe Jr's avatar
 
William A. Rowe Jr committed
  *) The Apache/Win32 Apache.exe and dll's now live in bin.  The 
     current directory logic now backs up over bin/ to determine the
     server root from the Apache.exe path.

  *) Apache/Win32 now follows the standard conventions of mod_foo.so
     loadable modules, dynamic libs are all named libfoo.dll, and the
     makefile.win populates the include, lib and libexec directories.

  *) Apache is now IPv6-capable.  On systems where APR supports IPv6,
     Apache gets IPv6 listening sockets by default.  Additionally, the
     Listen, NameVirtualHost, and <VirtualHost> directives support IPv6
     numeric address strings (e.g., "Listen [fe80::1]:8080").
     [Jeff Trawick]

  *) Modify the install directory layout.  Modules are now installed in
     modules/.  Shared libraries should be installed in libraries/, but
     we don't have any of those on Unix yet.  All install directories
     are modifyable at configure time. [Ryan Bloom]

  *) Install all header files in the same directory on Unix. [Ryan Bloom]

  *) Get the functions in server/linked into the server, regardless of
     which modules linked into the server.  This uses the same hack 
     for Apache that we use for APR and apr-util to ensure all of the
     necessary functions are linked.  As a part of thise, the CHARSET_EBCDIC
     was renamed to AP_CHARSET_EBCDIC for namespace protection, and to make
     the scripts a bit easier.
     [Ryan Bloom]
  *) Rework the RFC1413 handling to make it thread-safe, use a timeout
     on the query, and remove IPv4 dependencies.  [Jeff Trawick]

  *) Get all of the auth modules to the point that they will install and
     be loadable into the server.  Our new build/install mechanism expects
     that all modules will have a common name format.  The auth modules 
     didn't use that format, so we didn't install them properly.
     [Ryan Bloom]

  *) API routines ap_pgethostbyname() and ap_pduphostent() are no longer
     available.  Use apr_getaddrinfo() instead.  [Jeff Trawick]

  *) Get "NameVirtualHost *" working in 2.0.  [Ryan Bloom]

  *) Return HTTP_RANGE_NOT_SATISFIABLE if the every range requested starts
     after the end of the response. [Ryan Bloom]

  *) Get byterange requests working with responses that do not have a
     content-length.  Because of the way byterange requests work, we have to
     have all of the data before we can actually do the byterange, so we
     can compute the content-length in the byterange filter.
     [Ryan Bloom]
Ryan Bloom's avatar
Ryan Bloom committed

  *) Get exe CGI's working again on Windows.
     [Allan Edwards]

  *) Get mod_cgid and mod_rewrite to work as DSOs by changing the way
     they keep track of whether or not their  post config hook has been
     called before.  Instead of a static variable (which is replaced when 
     the DSO is loaded a second time), use userdata in the process pool.
     [Jeff Trawick]

William A. Rowe Jr's avatar
 
William A. Rowe Jr committed

  *) Win32 now requires perl to complete the final install step for users
     to build + install on Win32.  Makefile.win now rewrites @@ServerRoot@
     and installs the conf, htdocs and htdocs/manual directories.
     [William Rowe]

  *) Make mod_include use a hash table to associate directive tags with
     functions.  This allows modules to implement their own SSI tags easily.
     The idea is simple enough, a module can insert it's own tag and function
     combination into a hash table provided by mod_include.  While mod_include
     parses an SSI file, when it encounters a tag in the file, it does a
     hash lookup to find the function that implements that tag, and passes
     all of the relevant data to the function.  That function is then
     responsible for processing the tag and handing the remaining data back
     to mod_include for further processing.
     [Paul J. Reder <rederpj@raleigh.ibm.com>]
  *) Get rid of ap_new_apr_connection().  ap_new_connection() now has 
     fewer parameters: the local and remote socket addresses were removed
     from the parameter list because all required information is available
     via the APR socket.  [Jeff Trawick]

  *) Distribution directory structure reorganized to reflect a
     normal source distribution with external install targets.
     [Roy Fielding]

  *) The MPMs that need multiple segments of shared memory now create
     two apr_shmem_t variables, one for each shared memory allocation.
     the problem is that we can't determine how much memory will be required
     for shared memory allocations once we try to allocate more than one
     variable.  The MM code automatically aligns the shared memory allocations,
     so we end up needing to pad the amount of shared memory we want based
     on how many variables will be allocated out of the shared memory segment.
     It is just easier to create a second apr_shmem_t variable, and two
     shmem memory blocks.
     [Ryan Bloom]

  *) Cleanup the export list a bit.  This creates a single unified list of
     functions exported by APR.  The export list is generated at configure
     time, and that list is then used to generate the exports.c file.
     Because of the way the export list is generated, we only export those
     functions that are valid on the platform we are building on.
     [Ryan Bloom]

  *) Enable logging the cookie with mod_log_config
     [Sander van Zoest <sander@covalent.net>]

  *) Fix a segfault in mod_info when it reaches the end of the configuration.
     [Jeff Trawick]

  *) Added lib/aputil/ as a placeholder for utility functions which are not
     specific to the Apache HTTP Server (but do not make sense with APR).
     The first utility is "apu_dbm": a set of functions to work with DBM
     files. This first version can be compiled for SDBM or GDBM databases.
     [Greg Stein]

  *) Complete re-write of mod_include.  This makes mod_include a filter that
     uses buckets directly.  This has now served the FAQ correctly.
     [Paul Reder <rederpj@raleigh.ibm.com>]

  *) Allow modules to specify the first filter in a sub_request when
     making the sub_request.  This keeps modules from having to change the
     output_filter immediately after creating the sub-request, and therefore
     skip the sub_req_output_filter.  [Ryan Bloom]

  *) Update ab to accept URLs with IPv6 literal address strings (in the
     format described in RFC 2732), and to build Host header fields in
     the same format.  This allows IPv6 literal address strings to be
     used with ab.  This support has been tested against Apache 1.3 with 
     the KAME patch, but Apache 2.0 does not yet work with this format
     of the Host header field.  [Jeff Trawick]

  *) Accomodate an out-of-space condition in the piped logs and the
     rotatelogs.c code, and no longer churn log processes for this
     condition.  [Victor J. Orlikowski]

  *) Add support for partial writes with apr_sendfile() to core_output_filter.
     [Greg Ames] 

Changes with Apache 2.0a8

  *) Add a directive to mod_mime so that filters can be associated with
     a given mime-type.
     [Ryan Bloom]

  *) Get multi-views working again.  We were setting the path_info
     field incorrectly if we couldn't find the specified file.
     [Ryan Bloom]

  *) Fix 304 processing.  The core should never try to send the headers
     down the filter stack.  Always, just setup the table in the request
     record, and let the header filter convert it to data that is ready
     for the network.
     [Ryan Bloom]

  *) More fixes for the proxy.  There are still bugs in the proxy code,
     but this has now proxied www.yahoo.com and www.ntrnet.net (my ISP)
     successfully.
     [Ryan Bloom]