Apache 2.0alpha5 Released ------------------------- The Apache Group is pleased to announce the release of the fifth public alpha release of Apache 2.0. Apache 2.0 offers numerous enhancements, improvements and performance boosts over the 1.3 codebase. The most visible and noteworthy addition is the ability to run Apache in a hybrid thread/process mode on any platform that supports both threads and processes. This has shown to improve the scalability of the Apache HTTPD server significantly in our early testing, on some versions of Unix. This release also greatly improves the performance and robustness of Apache on the Microsoft Windows Operating Systems. Lastly we are proud to announce support for BeOS in this version of the server. Apache 2.0a5 under UNIX has undergone some testing, but there are some known issues in the current release (hey, it is an "alpha" for a reason!). It is intended for developers and experienced Apache HTTPD administrators to play around with and work on. It is not a production release. If you do not feel comfortable compiling and working with code, the Apache Group strongly recommends that you wait for a more stable beta release before you try this version. Apache 2.0a5 under Windows has undergone some testing as well. There are known issues in the current release with regards to Apache on windows 95 and 98. We are working through those problems, and hope to have them fixed for future releases of the 2.0 alpha. There are new snapshots of the Apache httpd source available every 6 hours from http://dev.apache.org/from-cvs/apache-2.0/ - please download and test if you feel brave. We don't guarantee anything except that it will take up disk space, but if you have the time and skills, please give it a spin on your platforms. Apache has been the most popular web server on the Internet since April of 1996. The May 2000 WWW server site survey by Netcraft (see: http://www.netcraft.co.uk/Survey/) found that more web servers were using Apache than any other software running on more than 60% of the Internet web servers. For more information, please check out http://www.apache.org/httpd.html Changes with Apache 2.0a5 since Apache 2.0a4 *) Perchild is serving pages after passing them to different child processes. There are still a lot of bugs, but this does work. I have made requests against the same installation of Apache, and had different servers use different user IDs to serve the responses. This change moves to using socketpair instead of an AF_UNIX socket. [Ryan Bloom] *) Perchild MPM still doesn't work perfectly, but it is serving pages. It can't seem to pass between child processes yet, but I think we are closer now than before. This moves us back to using Unix Domain Sockets. [Ryan Bloom] *) libapr functions and types renamed with apr_ prefix. #include "apr_compat.h" for 1.3.x backwards compat [Perl] *) Fix problems with APR sockaddr handling on Win32. It didn't always return the right information on the local socket address. [Gregory Nicholls ] *) ap_recv() on Win32: Set bytes-read to 0 on error. [Gregory Nicholls ] *) Add an option to not detach from the controlling terminal without going into single process mode. This allows for much easier debugging of the process startup code. [Ryan Bloom] *) ab: don't use perror() to report the failure of an APR function. [Jeff Trawick] *) Make dexter, mpmt_pthread, and perchild MPMs not destroy the scoreboard on graceful restarts. [Ryan Bloom] *) Fix segfault/SIGSEGV when running gzip from mod_mime_magic.c. An invalid ap_proc_t was passed to ap_create_process(). [Jeff Trawick] *) Allow modules to register filters. Those filters are still never called, but this is a step in the right direction. [Ryan Bloom and Greg Stein] *) Register the mod_cgid daemon process for cleanup so that it is killed at termination if it does not die when the parent gets SIGTERM. This change is to fix occasional problems where the process stays around. Bugs in similar logic in mod_rewrite and mod_include were also fixed. [Jeff Trawick] *) Fix a bug in the time handling. Basically, we were imploding a time in ap_parseHTTPdate, but it had bogus data in the exploded time format. Namely, tm_usec and tm_gmtoff were not filled out. ap_implode_time uses those two fields to adjust the time value. Because of the HTTP spec, both of those values can be zero'ed out safely. This fixes the bug correctly. [Ryan Bloom] *) Fix a couple of place in the Windows code where the wrong error code was being returned. [Gregory Nicholls ] *) Fix POOL_DEBUG (at least for prefork mpm). [Dean Gaudet] *) Added the APR_EOL_STR macro for platform dependent differences in logfiles and other raw text (such as all APR files). Fixes logfiles not terminated with cr/lf sequences in Win32. [William Rowe] *) Move all strings functions in APR to src/lib/apr/strings and create apr_strings.h for the prototypes. [Ryan Bloom] *) APR lock fixes: when using SysV sems, flock(), or fcntl(), be sure to repeat the syscall until we stop getting EINTR. I noticed a related problem at termination (SIGTERM) on FreeBSD when using fcntl(). Apache 1.3 had these new loops too. Also, make the flock() implementation work properly with child init. Previously, ap_lock() was essentially a no-op because all children were using different locks and thus nobody ever blocked. [Jeff Trawick] *) The htdocs/ tree has been moved out of the CVS source tree into a separate area for easier development. This has NO EFFECT on end-users or Apache installations. [Ken Coar] *) Integrate the mod_dav module for WebDAV protocol handling. This adds the dav and dav_fs modules, the SDBM library, and additional XML handling utilities. [Greg Stein] *) Clean out obsolete names (from httpd.h) for the HTTP Status Codes [Greg Stein] *) Update the lib/expat-lite/ library (bring forward changes from the Apache 1.3 repository). [Greg Stein] *) If sizeof(long long) == sizeof(long), then prefer long in APR configure.in. [Dave Hill ] *) Add ap_sendfile for Tru64 Unix. Also, add an error message for machines where sendfile is detected, but nobody has written ap_sendfile. [Dave Hill ] *) Compile fixes in mod_mmap_static. [Victor J. Orlikowski] *) ab would start up more connections than needed, then quit when the desired number were finished. Also fixed a logic error involving ab keepalives. [Victor J. Orlikowski] *) WinNT: Implement non-blocking pipes with timeouts to communicate with CGIs. Apache 2.0a4 had non-blocking pipes but without timeouts (i.e, if a timeout was specified, the pipe reverted to a full blocking pipe). Now the behaviour is more in line with Unix non-blocking pipes. [Bill Stoddard] *) WinNT: Implement accept socket reuse. Using mod_file_cache to cache open file handles along with accept socket reuse enables Apache 2.0 to serve non-keepalive requests for static files at 3x the rate of Apache 1.3.(e.g, Apache 1.3 will serve 400 rps and Apache 2.0 will serve almost 1200 rps on my system). [Bill Stoddard] *) Merge mod_mmap_static function into mod_file_cache. mod_file_cache supports two config directives, mmapfile (same behavious as mod_mmap_static) and cachefile. Use the cachefile directive to cache open file handles. This directive only works on systems that have implemented the ap_sendfile API. cachefile works today on Windows NT, but has not been tested on any flavors of Unix. [Bill Stoddard] *) Cleanup the configuration. With the last few changes the configuration process automatically: inherits information about how to build from APR. Allowing APR to inform Apache that it should or should not use -ldl Detects which mod_cgi should be used mod_cgi or mod_cgid, based on the threading model Apache calls APR's configure process before finishing it's configuration processing, allowing for more information flow between the two. [Ryan Bloom] *) Change Unix and Win32 ap_setsockopt() so that APR_SO_NONBLOCK with non-zero argument makes the socket non-blocking. BeOS and OS/2 already worked this way. [Jeff Trawick] *) ap_close() now calls ap_flush() for buffered files, so write operations work a whole lot better on buffered files. [Jeff Trawick] *) Fix error messages issued from MPMs which explain where to change compiled-in limits (e.g., ThreadsPerChild, MaxClients, StartTreads). [Greg Ames] *) ap_create_pipe() now leaves pipes in blocking state. (This helps reduce the number of syscalls on Unix.) ap_set_pipe_timeout() is now the way that the blocking state of a pipe is manipulated. ap_block_pipe() is gone. [Jeff Trawick] *) Correct the problem where the only local host name that the IP stack can discover are 'undotted' private names. If no fully qualified domain name can be identified, the default ServerName will be set to the machine's IP address string. A warning is always provided if the ServerName not specified, but assumed. Solves PR6215 [William Rowe] *) Repair problems with config file processing which caused segfault at init when virtual hosts were defined and which caused ServerName to be ignored when there was no valid DNS setup. [Jeff Trawick] *) Removed pointless ap_is_aborted macro function. [Roy Fielding] *) Add ap_sendfile implementation for AIX [Victor J. Orlikowski] *) Repair C++ compatibility in ap_config.h, apr_file_io.h, apr_network_io.h, and apr_thread_proc.h. [Tyler J. Brooks , Jeff Trawick] *) Bring the allocation and pool debugging code back into a working state. This will need to be tested as so far it's only been used on BeOS. [David Reid] *) Change configuration command setup to be properly typesafe when in maintainer mode. Note that this requires a compiler that can initialise unions. [Ben Laurie] *) Turn on buffering for config file reads. Part of this was to repair buffered I/O support in Unix and implement buffered ap_fgets() for all platforms. [Brian Havard, Jeff Trawick] *) Win32: Fix problem where UTC offset was not being set correctly in the access log. Problem reported on news group by Jerry Baker. [Bill Stoddard] *) Fix segfault when reporting this type of syntax error: " without matching section", where container is VirtualHost or Directory or whatever. [Jeff Trawick] *) Prevent the source code for CGIs from being revealed when using mod_vhost_alias and the CGI directory is under the document root and a user makes a request like http://www.example.com//cgi-bin/cgi as reported in [Tony Finch] *) Add support for the new Beos NetwOrking Environment (BONE) [David Reid] *) xlate: ap_xlate_conv_buffer() now tells the caller when the final input char is incomplete; ap_bwrite_xlate() now handles incomplete final input chars. [Jeff Trawick] *) Yet another update to saferead/halfduplex stuff -- need to ensure that a bhalfduplex call occurs before logging or else DNS and such can delay the last packet of the response. [Dean Gaudet] *) Some syscall reduction in APR on unix -- don't seek when setting up an mmap; and don't fcntl() more than once per socket. [Dean Gaudet] *) When mod_cgid is started as root, the cgi daemon now switches to the configured User/Group (like other httpd processes) instead of continuing as root. [Jeff Trawick] *) The prefork MPM now uses an APR lock for the accept() mutex. It has not been getting a lock at all recently. httpd -V now displays APR's selection of the lock mechanism instead of the symbols previously respected by prefork. [Jeff Trawick] *) Change the mmap() feature test to check only for existence. The previous check required features not used by Apache. [Greg Ames] *) Fix a couple of bugs in mod_cgid: The cgi arguments were sometimes mangled. The len parm to accept() was not initialized, leading sometimes to an endless loop of failed accept() calls on OS/390 and anywhere else that failed the call if the len was negative. Use for struct sockaddr_un instead of declaring it ourselves to fix a compilation problem on Solaris. [Jeff Trawick] *) Add Resource limiting code back into Apache 2.0. [Ryan Bloom] *) Fix zombie process problem with mod_cgi. [Jeff Trawick] *) Port mod_mmap_static to 2.0. Make it go faster. [Greg Ames] *) Fix storage overlay when loading dsos. Symptom: Apache dies at initialization if ALLOC_DEBUG is defined; no known symptom otherwise. [Jeff Trawick] *) Fix typo in configure script when checking for mod_so. bash doesn't seem to have a problem but /bin/sh on Solaris does. Symptom: "./configure: test: unknown operator ==" [Jeff Trawick] *) Rebind the Win32 NT and 9x services control into the MPM. All console, WinNT SCM and Win9x pseudo-service control code is now wrapped within the WinNT MPM. [William Rowe] *) Make a copy of getenv("PATH") before storing for later use. Some getenv() implementations use the same storage for successive calls. CGIs on OS/390 had a bad PATH due to this. [Jeff Trawick] *) Server Tokens work in 2.0 again. This also propogates the change to allow just the product name in the server string using PRODUCT_ONLY. [Ryan Bloom]