Newer
Older
the resolver returns domain names longer than MAXDNAME. [Marc Slemko]
*) SECURITY: Eliminate possible buffer overflow in cfg_getline, which
is used to read various types of files such as htaccess and
htpasswd files. [Marc Slemko]
*) SECURITY: Ensure that the buffer returned by ht_time is always
properly null terminated. [Marc Slemko]
*) The "Connection" header could be sent back with multiple "close"
tokens. Not an error, but a waste.
*) mod_rewrite's RewriteLog should behave like mod_log_config, it
shouldn't force hostname lookups. [Dean Gaudet] PR#1684
*) "basic" auth needs a case-insensitive comparison.
*) For maximum portability, the environment passed to CGIs should
only contain variables whose names match the regex
/[a-zA-Z][a-zA-Z0-9_]*/. This is now enforced by stamping
underscores over any character outside the regex. This
affects HTTP_* variables, in a way that should be backward
compatible for all the standard headers; and affects variables
set with SetEnv/BrowserMatch and similar directives.
[Dean Gaudet]
*) mod_speling returned incorrect HREF's when an ambigous match
was found. Noticed by <robinton amtrash.comlink.de> (Soeren Ziehe)
[Soeren Ziehe <robinton amtrash.comlink.de>, Martin Kraemer]
12032
12033
12034
12035
12036
12037
12038
12039
12040
12041
12042
12043
12044
12045
12046
12047
12048
12049
12050
12051
12052
12053
12054
12055
12056
12057
12058
12059
12060
12061
12062
12063
12064
12065
12066
12067
12068
12069
12070
12071
12072
12073
12074
12075
12076
12077
12078
*) PORT: Apache now compiles & runs on an EBCDIC mainframe
(the Siemens BS2000/OSD family) in the POSIX subsystem
[Martin Kraemer]
*) PORT: Fix problem killing children when terminating. Allow ^C
to shut down the server. [Brian Havard]
*) pstrdup() is implicit in calls to table_* functions, so there's
no need to do it before calling. Clean up a few cases.
[Marc Slemko, Dean Gaudet]
*) new -C and -c command line arguments
usage:
-C "directive" : process directive before reading config files
-c "directive" : process directive after reading config files
example:
httpd -C "PerlModule Apache::httpd_conf"
[Doug MacEachern, Martin Kraemer]
*) WIN32: Fix the execution of CGIs that are scripts and called
with path info that does not have an '=' in.
(eg. http://server/cgi-bin/printenv?foobar)
[Marc Slemko] PR#1591
*) WIN32: Fix a call to os_canonical_filename so it doesn't try to
mess with fake filenames. This fixes proxy caching on
win32. PR#1265
*) SECURITY: General mod_include cleanup, including fixing several
possible buffer overflows and a possible infinite loop.
[Dean Gaudet, Marc Slemko]
*) SECURITY: Numerous changes to mod_imap in a general cleanup
including fixing a possible buffer overflow. [Dean Gaudet]
*) WIN32: overhaul of multithreading code. Shutdowns are now graceful
(connections are not dropped). Code can handle graceful restarts
(but there is as yet no way to signal this to Apache). Various
other cleanups. [Paul Sutton]
*) The aplog_error changes specific to 1.3 introduced a buffer
overrun in the (now legacy) log_printf function. Fixed.
[Dean Gaudet]
*) mod_digest didn't properly deal with proxy authentication. It
also lacked a case-insensitive comparision of the "Digest"
*) A few cleanups in mod_status for efficiency. [Dean Gaudet]
*) A few cleanups in mod_info to make it thread-safe, and remove an
off-by-5 bug that could hammer \0 on the stack. [Dean Gaudet]
*) no2slash() was O(n^2) in the length of the input. Make it O(n).
[Dean Gaudet]
*) API: migration from strncpy() to our "enhanced" version called
ap_cpystrn() for performance and functionality reasons.
Located in libap.a. [Jim Jagielski]
*) table_set() and table_unset() did not deal correctly with
multiple occurrences of the same key.
12096
12097
12098
12099
12100
12101
12102
12103
12104
12105
12106
12107
12108
12109
12110
12111
12112
*) The AuthName must now be enclosed in quotes if it is to contain
spaces. [Ken Coar] PR#1195
*) API: new function: ap_escape_quotes(). [Ken Coar] PR#1195
*) WIN32: Work around optimiser bug that killed ISAPI in release
versions. [Ben Laurie] PR#1533
*) PORT: Update the MPE port [Mark Bixby, Jim Jagielski]
*) Interim (slow) fix for p->sub_pool critical sections in
alloc.c (affects win32 only). [Ben Hyde]
*) non-WIN32 was missing destroy_mutex definition. [Ben Hyde]
*) send_fd_length() did not calculate total_bytes_sent properly.
12114
12115
12116
12117
12118
12119
12120
12121
12122
12123
12124
12125
12126
12127
12128
12129
12130
12131
12132
*) The bputc() macro was not properly integrated with the chunking
code; in many cases modules using bputc() could cause completely
bogus chunked output. (Typically this will show up as problems
with Internet Explorer 4.0 reading a page, but other browsers
having no problem.) [Dean Gaudet]
*) Create LARGE_WRITE_THRESHOLD define which determines how many
bytes have to be supplied to bwrite() before it will consider
doing a writev() to assemble multiple buffers in one system
call. This is critical for modules such as mod_include,
mod_autoindex, mod_php3 which all use bputc()/bputs() of smaller
strings in some cases. The result would be extra effort
setting up writev(), and in many cases extra effort building
chunks. The default is 31, it can be overriden at compile
time. [Dean Gaudet]
*) Move the gid switching code into the child so that log files
and pid files are opened with the root gid.
*) WIN32: Check for binaries by looking for the executable header
instead of counting control characters.
*) ap_snprintf() moved from main/util_snprintf.c to ap/ap_snprintf.c
so the functionality is available to applications other than the
server itself (like the src/support tools). [Ken Coar]
*) ap_slack() moved out of main/util.c into ap/ap_slack.c as part of
the libap consolidation work. [Ken Coar]
*) ap_snprintf() with a len of 0 behaved like sprintf(). This is not
useful, and isn't what the standards require. Now it returns 0
and writes nothing. [Dean Gaudet]
*) When an error occurs in fcntl() locking suggest the user look up
the docs for LockFile. [Dean Gaudet]
*) Eliminate some dead code from writev_it_all().
12155
12156
12157
12158
12159
12160
12161
12162
12163
12164
12165
12166
12167
12168
12169
12170
12171
12172
12173
12174
12175
12176
12177
12178
12179
12180
*) mod_autoindex had an fread() without checking the result code.
It also wouldn't handle "AddIconByType (TXT,/icons/text.gif text/*"
(note the missing closing paren) properly. [Dean Gaudet]
*) It appears the "257th byte" bug (see
htdocs/manual/misc/known_client_problems.html#257th-byte) can happen
at the 256th byte as well. Fixed. [Dean Gaudet]
*) PORT: Fix mod_mime_magic under OS/2, no support for block devices.
[Brian Havard]
*) Fix memory corruption caused by allocating auth usernames in the
wrong pool. [Dean Gaudet] PR#1500
*) Fix an off-by-1, and an unterminated string error in
mod_mime_magic. [Dean Gaudet]
*) Fix a potential SEGV problem in mod_negotiation when dealing
with type-maps. [Dean Gaudet]
*) Better glibc support under Linux. [Dean Gaudet] PR#1542
*) "RedirectMatch gone /" would cause a SIGSEGV. [Dean Gaudet] PR#1319
*) WIN32: avoid overflows during file canonicalisations.
*) WIN32: set_file_slot() didn't detect absolute paths. [Ben Laurie]
PR#1511, 1508
*) WIN32: mod_status display header didn't match fields. [Ben Laurie]
*) The pthread_mutex_* functions return an error code, and don't
*) WIN32: Allow spaces to prefix the interpreter in #! lines.
[Ben Laurie] PR#1101
*) WIN32: Cure file leak in CGIs. [Peter Tillemans <pti net4all.be>] PR#1523
12195
12196
12197
12198
12199
12200
12201
12202
12203
12204
12205
12206
12207
12208
12209
12210
12211
12212
12213
12214
12215
12216
12217
12218
12219
12220
*) proxy_ftp: the directory listings generated by the proxy ftp module
now have a title in which the path components are clickable and allow
quick navigation to the clicked-on directory on the currently listed
ftp server. This also fixes a bug where the ".." directory links would
sometimes refer to the wrong directory. [Martin Kraemer]
*) WIN32: Allocate the correct amount of memory for the scoreboard.
[Ben Hyde] PR#1387
*) WIN32: Only lowercase the part of the path that is real. [Ben Laurie]
PR#1505
*) Fix problems with timeouts in inetd mode and -X mode. [Dean Gaudet]
*) Fix the spurious "(0)unknown error: mmap_handler: mmap failed"
error messages. [Ben Hyde]
Changes with Apache 1.3b3
*) WIN32: Work around brain-damaged spawn calls that can't deal
with spaces and slashes. [Ben Laurie]
*) WIN32: Fix the code so CGIs can use socket calls on Windows.
The problem was that certain undocumented environment variables
needed for sockets to work under Win32 were not being passed.
12222
12223
12224
12225
12226
12227
12228
12229
12230
12231
12232
12233
12234
12235
12236
12237
12238
12239
12240
12241
12242
12243
12244
12245
12246
12247
12248
12249
12250
12251
12252
12253
12254
12255
12256
12257
12258
12259
12260
12261
12262
*) Add a "-V" command line flag to the httpd binary. This
flag shows some of the defines that Apache was compiled with.
It is useful for debugging purposes. [Martin Kraemer]
*) Start separating the ap_*() routines into their own library, so they
can be used by items in src/support among other things.
[Ken Coar] PR#512, 905, 1252, 1308
*) Give a more informative error when no AuthType is set.
[Lars Eilebrecht]
*) Remove strtoul() use from mod_proxy because it isn't available
on all platforms. [Marc Slemko] PR#1214
*) WIN32: Some Win32 systems terminated all responses after 16 kB.
This turns out to be a bug in Winsock - select() doesn't always
return the correct status. [Ben Laurie]
*) Directives owned by http_core can now use the new check_cmd_context()
routine to ensure that they're not being used within a container
(e.g., <Directory>) where they're invalid. [Martin Kraemer]
*) PORT: Recent changes made it necessary to add explicit prototype
for fgetc() and fgets() on SunOS 4.x. [Martin Kraemer, Ben Hyde]
*) It was necessary to distinguish between resources which are
allocated in the parent, for cleanup in the parent, and resources
which are allocated in each child, for cleanup in each child.
A new pool was created which is passed to the module child_init
and child_exit functions; modules are free to register per-child
cleanups there. This fixes a bug with reliable piped logs.
[Dean Gaudet]
*) mod_autoindex wasn't displaying the ReadmeName file at the bottom
unless it was also doing FancyIndexes, but it displayed the
HeaderName file at the top under all circumstances. It now shows
the ReadmeName file for simple indices, too, as it should.
[Ken Coar] PR#1373
*) http_core was mmap()ing even in cases where it wasn't going to
*) Complete rewrite ;-) of mod_rewrite's URL rewriting engine:
Now the rewriting engine (the heart of mod_rewrite) is organized more
straight-forward, first time well documented and reduced to the really
essential parts. All redundant cases were stripped off and processing now
is the same for both per-server and per-directory context with only a
minimum difference (the prefix stripping in per-dir context). As a
side-effect some subtle restrictions and two recently discovered problems
are gone: Wrong escaping of QUERY_STRING on redirects in per-directory
context and restrictions on the substitution URL on redirects.
Additionally some minor source cleanups were done.
[Ralf S. Engelschall]
*) Lars Eilebrecht wrote a whole new set of Apache Vhost Internals
documentation, examples, explanations and caveats. They live in a new
subdirectory htdocs/manual/vhost/. [Lars Eilebrecht <sfx unix-ag.org>]
*) If ap_slack fails to allocate above the low slack line it's a good
indication that further problems will occur; it's a better indication
than many external libraries give us when we actually run out of
descriptors. So report it to the user once per restart.
[Dean Gaudet] PR#1181
*) Change mod_include and mod_autoindex to use Y2K-safe date formats
by default. [Ken Coar]
*) Add a "SuppressColumnSorting" option to the IndexOptions list,
which will keep the column heading from being links for sorting
the display. [Ken Coar, suggested by Brian Tiemann <btman pacific.net>]
PR #1261
*) Fix logic error when issuing a mmap() failed message
with a non-zero MMAP_THRESHOLD.
12300
12301
12302
12303
12304
12305
12306
12307
12308
12309
12310
12311
12312
12313
12314
12315
12316
12317
12318
12319
12320
12321
12322
12323
*) Preserve handler value on ProxyPass'ed requests by not
calling find_types on a proxy'd request; fixes problems
where some ProxyPass'ed URLs weren't actually passed
to the proxy.
[Lars Eilebrecht] PR#870
*) Fix a byte ordering problem in mod_access which prevented
the old-style syntax (i.e. "a.b.c." to match a class C)
from working properly. [Dean Gaudet] PR#1248, 1328, 1384
*) Fix problem with USE_FLOCK_SERIALIZED_ACCEPT not working
properly. Each child needs to open the lockfile instead
of using the passed file-descriptor from the parent.
[Jim Jagielski] PR#1056
*) Fix the error logging in mod_cgi; the recent error log changes
introduced a bug that prevented it from working correctly.
[M.D.Parker] PR#1352
*) Default to USE_FCNTL_SERIALIZED_ACCEPT on HPUX to properly
handle multiple Listen directives. [Marc Slemko] PR#872
*) Inherit a bugfix to fnmatch.c from FreeBSD sources.
[Андрей Чернов <ache nagual.pp.ru>] PR#1311
*) When a configuration parse complained about a bad directive,
the logger would use whatever (unrelated) value was in errno.
errno is now forced to EINVAL first in this case. [Ken Coar]
*) A sed command in the Configure script pushed the edge of POSIXness,
breaking on some systems. [Bhaba R.Misra <system vt.edu>] PR#1368
*) Solaris >= 2.5 was totally broken due to a mess up using pthread
mutexes. [Roy Fielding, Dean Gaudet]
*) OS/2 Port updated; it should be possible to build OS/2 from the same
sources as Unix now. [Brian Havard <brianh kheldar.apana.org.au>]
*) Fix a year formatting bug in mod_usertrack.
*) A mild SIGTERM/SIGALRM race condition was eliminated.
[Dean Gaudet] PR#1211
*) Warn user that default path has changed if /usr/local/etc/httpd
is found on the system. [Lars Eilebrecht]
*) Various mod_mime_magic bug fixes and cleanups: Uncompression
should work, it should work on WIN32, and a few resource
leaks and abort conditions are fixed.
[Dean Gaudet] PR#1205
*) PORT: On AIX 1.x files can't be named '@', fix the proxy cache
to use '%' instead of '@' in its encodings.
12356
12357
12358
12359
12360
12361
12362
12363
12364
12365
12366
12367
12368
12369
12370
12371
12372
12373
12374
12375
12376
12377
12378
12379
12380
12381
*) Improve the warning message generated when the "server is busy".
[Dean Gaudet] PR#1293
*) PORT: All ports which don't otherwise define DEF_WANTHSREGEX will
get Spencer regex by default. This is to avoid having to
discover bugs in operating system libraries. [Dean Gaudet]
*) PORT: "Fix" PR#467 by generating warnings on systems which we have
not been able to get working USE_*_SERIALIZED_ACCEPT settings for.
Document this a bit more in src/PORTING. [Dean Gaudet] PR#467
*) Ensure that one copy of config warnings makes it to the
error_log. [Dean Gaudet]
*) Invent new structure and associated methods to handle config file
reading. Add "custom" hook to use config file cfg_getline() on
something which is not a FILE* [Martin Kraemer]
*) Make single-exe Windows install. [Ben Laurie and Eric Esselink]
*) WIN32: Make CGI work under Win95. [Ben Laurie and Paul Sutton]
*) WIN32: Make index.html and friends work under Win95. [Ben Laurie]
*) PORT: Solaris 2.4 needs Spencer regex, the system regex is broken.
*) Default pathname has been changed everywhere to /usr/local/apache
*) PORT: AIX now uses USE_FCNTL_SERIALIZED_ACCEPT.
*) PORT: i386 AIX does not have memmove.
*) PORT: HPUX now defaults to using Spencer regex.
[Philippe Vanhaesendonck <pvanhaes be.oracle.com>,
Omar Del Rio <al112263 academ01.lag.itesm.mx>] PR#482, 1246
*) PORT: Some versions of NetBSD don't automatically define
__NetBSD__. Workaround by defining NETBSD.
*) PORT: UnixWare 2.x requires -lgen for syslog.
*) PORT: ULTRIX appears to not have syslog.
*) PORT: Basic Gemini port (treat it like unixware212).
*) PORT: All SVR4 systems now use NET_SIZE_T = size_t, and
use USE_SHMGET_SCOREBOARD.
[Martin Kraemer]
*) Various improvements in detecting config file errors (missing closing
directives for <Directory>, <Files> etc. blocks, prohibiting global
server settings in <VirtualHost> blocks, flagging unhandled multiple
arguments to <Directory>, <Files> etc.)
[Martin Kraemer]
*) Add support to suexec wrapper program for mod_unique_id's UNIQUE_ID
variable to provide this one to suexec'd CGIs, too.
12423
12424
12425
12426
12427
12428
12429
12430
12431
12432
12433
12434
12435
12436
12437
12438
12439
12440
12441
12442
12443
12444
12445
12446
12447
12448
12449
12450
12451
12452
12453
12454
12455
12456
12457
12458
12459
12460
12461
12462
12463
12464
12465
12466
12467
12468
*) New support tool: src/support/split-logfile, a sample Perl script which
splits up a combined access log into separate files based on the
name of the virtual host (listed first in the log records by "%v").
[Ken Coar]
Changes with Apache 1.3b2 (there is no 1.3b1)
*) TestCompile was not passing $LIBS [Dean Gaudet]
*) Makefile.tmpl was not using $CFLAGS in the link phase.
[Martin Kraemer]
*) Add debugging code to alloc.c. Defining ALLOC_DEBUG provides a
rudimentary memory debugger which can be used on live servers with
low impact -- it sets all allocated and freed memory bytes to 0xa5.
Defining ALLOC_USE_MALLOC will cause the alloc code to use malloc()
and free() for each object. This is far more expensive and should
only be used for testing with tools such as Electric Fence and
Purify. See main/alloc.c for more details. [Dean Gaudet]
*) Configure uses a sh trap and didn't set its exitcode properly.
[Dean Gaudet] PR#1159
*) Yet another vhost revamp. Add the NameVirtualHost directive which
explicitly lists the ip:port pairs that are to be used for name-vhosts.
From a given ip:port, regardless what the Host: header is, you can
only reach the vhosts defined on that ip:port. The precedence of
vhosts was reversed to match other precedences in the config --
the earlier vhosts override the later vhosts. All vhost matching was
moved into http_vhost.[ch]. [Dean Gaudet]
*) ap_inline can be used to force inlining. GNUC __attribute__() can
be used for whatever reason is appropriate (i.e. format() warnings
for printf style functions). Both are enabled only with
gcc >= 2.7.x (so that we have fewer support issues with older
versions). [Dean Gaudet]
*) Fix support for Proxy Authentication (we were testing the response
status too early). [Marc Slemko]
*) CoreDumpDirectory directive directs where the core file is
written when a SIGSEGV, SIGBUS, SIGABORT or SIGABRT are
received. [Marc Slemko, Dean Gaudet]
*) PORT: Support for Atari MINT.
12470
12471
12472
12473
12474
12475
12476
12477
12478
12479
12480
12481
12482
12483
12484
12485
12486
12487
12488
12489
12490
12491
12492
12493
12494
12495
12496
12497
12498
12499
12500
12501
12502
12503
12504
12505
12506
12507
*) When booting, apache will now detach itself from stdin, stdout,
and stderr. stderr will not be detached until after the config
files have been read so you will be able to see initial error
messages. After that all errors are logged in the error_log.
This makes it more convenient to start apache via rsh, ssh,
or crontabs. [Dean Gaudet] PR#523
*) mod_proxy was sending HTTP/1.1 responses to ftp requests by mistake.
Also removed the auto-generated link to www.apache.org that was the
source of so many misdirected bug reports. [Roy Fielding, Marc Slemko]
*) send_fb would not detect aborted connections in some situations.
[Dean Gaudet]
*) mod_include would use uninitialized data when parsing certain
expressions involving && and ||. [Brian Slesinsky] PR#1139
*) mod_imap should only handle GET methods. [Jay Bloodworth]
*) suexec.c wouldn't build without -DLOG_EXEC. [Jason A. Dour]
*) mod_autoindex improperly counted &escapes; as more than one
character in the description. It also improperly truncated
descriptions that were exactly the maximum length.
[Martin Kraemer]
*) RedirectMatch was not properly escaping the result (PR#1155). Also
"RedirectMatch /advertiser/(.*) $1" is now permitted.
[Dean Gaudet]
*) mod_include now uses symbolic names to check for request success
and return HTTP errors, and correctly handles all types of
redirections (previously it only did temporary redirect correctly).
[Ken Coar, Roy Fielding]
*) mod_userdir was modifying r->finfo in cases where it wasn't setting
r->filename. Since those two are meant to be in sync with each other
this is a bug. ["Paul B. Henson" <henson intranet.csupomona.edu>]
*) PORT: Support Unisys SVR4, whose uname returns mostly useless data.
*) Inetd mode (which is buggy) uses timeouts without having setup the
jmpbuffer. [Dean Gaudet] PR#1064
*) Work around problem under Linux where a child will start looping
reporting a select error over and over.
12519
12520
12521
12522
12523
12524
12525
12526
12527
12528
12529
12530
12531
12532
12533
12534
12535
12536
12537
12538
12539
12540
12541
12542
12543
12544
12545
12546
12547
12548
12549
12550
12551
12552
12553
12554
12555
12556
12557
12558
12559
12560
12561
12562
12563
12564
12565
12566
12567
12568
12569
12570
12571
12572
12573
12574
12575
12576
12577
12578
12579
12580
12581
12582
12583
12584
12585
12586
12587
12588
12589
12590
12591
12592
12593
12594
12595
12596
12597
12598
12599
12600
12601
12602
12603
12604
12605
12606
12607
12608
12609
12610
12611
12612
12613
12614
12615
12616
12617
12618
12619
12620
12621
12622
12623
12624
12625
12626
12627
12628
12629
12630
12631
12632
12633
12634
12635
12636
12637
*) Fixed error in proxy_util.c when looping through multiple host IP
addresses. [Lars Eilebrecht] PR#974
*) If BUFFERED_LOGS is defined then mod_log_config will do atomic
buffered writes -- that is, it will buffer up to PIPE_BUF (i.e. 4k)
bytes before writing, but it will never split a log entry across a
buffer boundary. [Dean Gaudet]
*) API: the short_score record has been split into two pieces, one which
the parent writes on, and one which the child writes on. As part of
this change the get_scoreboard_info() function was removed, and
scoreboard_image was exported. This change fixes a race condition
in file based scoreboard systems, and speeds up changes involving the
scoreboard in earlier 1.3 development. [Dean Gaudet]
*) API: New register_other_child() API (see http_main.h) which allows
modules to register children with the parent for maintenance. It
is disabled by defining NO_OTHER_CHILD. [Dean Gaudet]
*) API: New piped_log API (see http_log.h) which implements piped logs,
and will use register_other_child to implement reliable piped logs
when it is available. The reliable piped logs part can be disabled
by defining NO_RELIABLE_PIPED_LOGS. At the moment reliable piped
logs is only available on Unix. [Dean Gaudet]
*) API: set_last_modified() broken into set_last_modified(), set_etag(), and
meets_conditions(). This allows conditional HTTP selection to be
handled separately from the storing of the header fields, and provides
the ability for CGIs to set their own ETags for conditional checking.
[Ken Coar, Roy Fielding] PR#895
*) Changes to mod_log_config to allow naming of format strings.
Format nicknames are defined with "LogFormat fmt nickname", and can
be used with "LogFormat nickname" and "CustomLog logtarget nickname".
[Ken Coar]
*) New module, "mod_speling", which can help find files even when
the URL is slightly misspelled. [Martin Kraemer, Alexei Kosut]
*) API: New function child_terminate() triggers the child process to
exit, while allowing the child finish what it needs to for the
current request first.
[Doug MacEachern, Alexei Kosut]
*) Windows now defaults to using full status reports with mod_status.
[Alexei Kosut] PR #1094
*) *Really* disable all mod_rewrite operations if the engine is off.
Some things (like RewriteMaps) were checked/performed even if they
weren't supposed to be. [Ken Coar] PR #991
*) Implement a new timer scheme which eliminates the need to call alarm() all
the time. Instead a counter in the scoreboard for each child is used to
show when the child has made forward progress. The parent samples this
counter every scoreboard maintenance cycle, and issues SIGALRM if no
progress has been made in the timeout period. This reduces the static
request best-case syscall count to 22 from 29. This scheme is only
used by systems with memory-based scoreboards. [Dean Gaudet]
*) The proxy now properly handles CONNECT requests which are sent
to proxy servers when using ProxyRemote. [Marc Slemko] PR#1024
*) A script called apachectl has been added to the support
directory. This script allows you to do things such as
"apachectl start" and "apachectl restart" from the command
line. [Marc Slemko]
*) Modules and core routines are now put into libraries, which
simplifies the link line tremendously (among other advantages).
[Paul Sutton]
*) Some of the MD5 names defined in Apache have been renamed to have
an `ap_' prefix to avoid conflicts with routines supplied by
external libraries. [Ken Coar]
*) Removal of mod_auth_msql.c from the distribution. There are many
other options for databases today. Rather than offer one option,
offer none at this time. mod_auth_msql and other SQL database
authentication modules can be found at the Apache Module Registry.
http://modules.apache.org/ It would be nice to offer a generic
mod_auth_sql option in the near future.
*) PORT: BeOS support added [Alexei Kosut]
*) Configure no longer accepts the -make option, since it creates
Makefile on the fly based on Makefile.tmpl and Configuration.
*) Apache now gracefully shuts down when it receives a SIGTERM, instead
of forcibly killing off all its processes and exiting without
cleaning up. [Alexei Kosut]
*) API: A new field in the request_rec, r->mtime, has been added to
avoid gratuitous parsing of date strings. It is intended to hold
the last-modified date of the resource (if applicable). An
update_mtime() routine has also been added to advance it if
appropriate. [Roy Fielding, Ken Coar]
*) SECURITY: If a htaccess file can not be read due to bad permissions,
deny access to the directory with a HTTP_FORBIDDEN. The previous
behavior was to ignore the htaccess file if it could not be read.
This change may make some setups with unreadable htaccess files
stop working. [Marc Slemko] PR#817
*) Add aplog_error() providing a mechanism to define levels of
verbosity to the server error logging. This addition also provides
the ability to log errors using syslogd. Error logging is configurable
on a per-server basis using the LogLevel directive. Conversion
of log_*() in progress. [Randy Terbush]
*) Further enhance aplog_error() to not log filename, line number, and
errno information when it isn't applicable. [Ken Coar, Dean Gaudet]
*) WIN32: Canonicalise filenames under Win32. Short filenames are
converted to long ones. Backslashes are converted to forward
slashes. Case is converted to lower. Parts of URLs that do not
correspond to files are left completely alone. [Ben Laurie]
*) PORT: 2 new OSs added to the list of ports:
Encore's UMAX V: Arieh Markel <amarkel encore.com>
Acorn RISCiX: Stephen Borrill <sborrill xemplar.co.uk>
12640
12641
12642
12643
12644
12645
12646
12647
12648
12649
12650
12651
12652
12653
12654
12655
12656
12657
12658
12659
12660
12661
12662
12663
12664
12665
12666
12667
12668
12669
12670
12671
12672
12673
12674
12675
12676
12677
12678
12679
12680
12681
12682
12683
12684
12685
12686
12687
12688
12689
12690
12691
12692
12693
12694
12695
12696
12697
12698
12699
12700
12701
12702
12703
12704
12705
12706
12707
12708
12709
12710
12711
12712
12713
12714
12715
12716
12717
*) Add the server version (SERVER_VERSION macro) to the "server
configured and running" entry in the error_log. Also build an
object file at link-time that contains the current time
(SERVER_BUILT global const char[]), and include that in the
message. [Ken Coar]
*) Set r->headers_out when sending responses from the proxy.
This fixes things such as the logging of headers sent from
the proxy. [Marc Slemko] PR#659
*) support/httpd_monitor is no longer distributed because the
scoreboard should not be file based if at all possible. Use
mod_status to see current server snapshot.
*) (set_file_slot): New function, allowing auth directives to be
independent of the server root, so the server documents can be
moved to a different directory or machine more easily.
[David J. MacKenzie]
*) If no TransferLog is given explicitly, decline
to log. This supports coexistence with other logging modules,
such as the custom one that UUNET uses. [David J. MacKenzie]
*) Check for titles in server-parsed HTML files.
Ignore leading newlines and returns in titles. The old behavior
of replacing a newline after <title> with a space causes the
title to be misaligned in the listing. [David J. MacKenzie]
*) Change mod_cern_meta to be configurable on a per-directory basis.
[David J. MacKenzie]
*) Add 'Include' directive to allow inclusion of configuration
files within configuration files. [Randy Terbush]
*) Proxy errors on connect() are logged to the error_log (nothing
new); now they include the IP address and port that failed
(*that's* new). [Ken Coar, Marc Slemko] PR#352
*) Various architectures now define USE_MMAP_FILES which causes
the server to use mmap() for static files. There are two
compile-time tunables MMAP_THRESHOLD (minimum number of bytes
required to use mmap(), default is 0), and MMAP_SEGMENT_SIZE (maximum
number of bytes written in one cycle from a single mmap()d object,
default 32768). [Dean Gaudet]
*) API: Added post_read_request API phase which is run right after reading
the request from a client, or right after an internal redirect. It is
useful for modules setting environment variables that depend only on
the headers/contents of the request. It does not run during subrequests
because subrequests inherit pretty much everything from the main
request. [Dean Gaudet]
*) Added mod_unique_id which is used to generate a unique identifier for
each hit, available in the environment variable UNIQUE_ID.
[Dean Gaudet]
*) init_modules is now called after the error logs have been opened. This
allows modules to emit information messages into the error logs.
[Dean Gaudet]
*) Fixed proxy-pass-through feature of mod_rewrite; Added error logging
information for case where proxy module is not available. [Marc Slemko]
*) PORT: Apache has need for mutexes to serialize its children around
accept. In prior versions either fcntl file locking or flock file
locking were used. The method is chosen by the definition of
USE_xxx_SERIALIZED_ACCEPT in conf.h. xxx is FCNTL for fcntl(),
and FLOCK for flock(). New options have been added:
- SYSVSEM to use System V style semaphores
- PTHREAD to use POSIX threads (appears to work on Solaris only)
- USLOCK to use IRIX uslock
Based on timing various techniques, the following changes were made
to the defaults:
- Linux 2.x uses flock instead of fcntl
- Solaris 2.x uses pthreads
- IRIX uses SysV semaphores -- however multiprocessor IRIX boxes
work far faster if you -DUSE_USLOCK_SERIALIZED_ACCEPT
[Dean Gaudet, Pierre-Yves Kerembellec <Pierre-Yves.Kerembellec vtcom.fr>,
Martijn Koster <m.koster pobox.com>]
12720
12721
12722
12723
12724
12725
12726
12727
12728
12729
12730
12731
12732
12733
12734
12735
12736
12737
12738
12739
12740
12741
12742
12743
12744
12745
12746
12747
12748
12749
12750
12751
12752
12753
12754
12755
12756
12757
12758
12759
12760
12761
12762
12763
12764
12765
12766
12767
12768
12769
12770
12771
12772
12773
12774
12775
12776
12777
12778
12779
12780
12781
12782
12783
12784
12785
12786
12787
12788
12789
12790
12791
12792
12793
12794
12795
12796
12797
12798
12799
12800
12801
12802
12803
12804
12805
12806
12807
*) PORT: The semantics of accept/select make it very desirable to use
mutexes to serialize accept when multiple Listens are in use. But
in the case where only a single socket is open it is sometimes
redundant to serialize accept(). Not all unixes do a good job with
potentially dozens of children blocked on accept() on the same
socket. It's now possible to define SINGLE_LISTEN_UNSERIALIZED_ACCEPT and
the server will avoid serialization when listening on only one socket,
and use serialization when listening on multiple sockets.
[Dean Gaudet] PR#467
*) Configure changes: TestLib replaced by TestCompile, which has
some additional capability (such as doing a sanity check of
the compiler and flags selected); the version of Solaris is now
available via the #define value of SOLARIS2; IRIX n32bit libs
now supported and selectable by new Configuration Rule: IRIXN32;
We no longer default to -O2 optimization. [Jim Jagielski]
*) Updated Configure: Configuration now uses AddModule to specify
module source or binary file location, relative to src directory.
Modules can be dropped into modules/extra, or in their own
directory, and modules can come with a Makefile or Configure can
create one. Modules can add compiler or library information to
generated Makefiles. [Paul Sutton]
*) Source core re-organisation: distributed modules are now in
modules/standard. All other source code is in main. OS-specific
code is in os/{unix,emx,win32} directories. [Paul Sutton]
*) mod_browser has been removed, since it's replaced by mod_setenvif.
[Ken Coar]
*) Fix another long-standing bug in sub_req_lookup_file where it would
happily skip past access checks on subdirectories looked up with
relative paths. (It's used by mod_dir, mod_negotiation,
and mod_include.) [Dean Gaudet]
*) directory_walk optimization to reduce an O(N*M) loop to O(N+M) where
N is the number of <Directory> sections, and M is the number of
components in the filename of an object.
To achieve this optimization the following config changes were made:
- Wildcards (* and ?, not the regex forms) in <Directory>s,
<Files>s, and <Location>s now treat a slash as a special
character. For example "/home/*/public_html" previously would
match "/home/a/andrew/public_html", now it only matches things
like "/home/bob/public_html". This mimics /bin/sh behaviour.
- It's possible now to use [] wildcarding in <Directory>, <Files>
or <Location>.
- Regex <Directory>s are applied after all non-regex <Directory>s.
[Dean Gaudet]
*) Fix a bug introduced in 1.3a1 directory_walk regarding .htaccess files
and corrupted paths. [Dean Gaudet]
*) Enhanced and cleaned up the URL rewriting engine of mod_rewrite:
First the grouped parts of RewriteRule pattern matches (parenthesis!) can
be accessed now via backreferences $1..$9 in RewriteConds test-against
strings in addition to RewriteRules subst string. Second the grouped
parts of RewriteCond pattern matches (parenthesis!) can be accessed now
via backreferences %1..%9 both in following RewriteCond test-against
strings and RewriteRules subst string. This provides maximum flexibility
through the use of backreferences.
Additionally the rewriting engine was cleaned up by putting common
code to the new expand_backrefs_inbuffer() function.
[Ralf S. Engelschall]
*) When merging the main server's <Directory> and <Location> sections into
a vhost, put the main server's first and the vhost's second. Otherwise
the vhost can't override the main server. [Dean Gaudet] PR#717
*) The <Directory> code would merge and re-merge the same section after
a match was found, possibly causing problems with some modules.
[Dean Gaudet]
*) ip-based vhosts are stored and queried using a hashing function, which
has been shown to improve performance on servers with many ip-vhosts.
Some other changes had to be made to accommodate this:
- the * address for vhosts now behaves like _default_
- the matching process now is:
- match an ip-vhost directly via hash (possibly matches main
server)
- if that fails, just pretend it matched the main server
- if so far only the main server has been matched, perform
name-based lookups (ServerName, ServerAlias, ServerPath)
*only on name-based vhosts*
- if they fail, look for _default_ vhosts
12809
12810
12811
12812
12813
12814
12815
12816
12817
12818
12819
12820
12821
12822
12823
12824
12825
12826
12827
12828
12829
12830
12831
12832
12833
12834
12835
*) dbmmanage overhaul:
- merge dbmmanage and dbmmanage.new functionality, remove dbmmanage.new
- tie() to AnyDBM_File which will use one of DB_File, NDBM_File or
GDBM_File (-ldb, -lndbm, -lgdbm) (trying each in that order)
- provide better seed for rand
- prompt for password as per getpass(3) (turn off echo, read from
/dev/tty, etc.)
- use "newstyle" crypt based on $Config{osname} ($^O)
- will not add a user if already in database, use new `update' command
instead
- added `check' command to check a users' password
- added `import' command to convert existing password text-files or
dbm files exported with `view'
- more descriptive usage, general cleanup, 'use strict' clean, etc.
[Doug MacEachern]
*) Added psocket() which is a pool form of socket(), various places within
the proxy weren't properly blocking alarms while registering the cleanup
for its sockets. bclose() now uses pclose() and pclosesocket(). There
was a bug where the client socket was being close()d twice due a still
registered cleanup. [Dean Gaudet]
*) A few cleanups were made to reduce time(), getpid(), and signal() calls.
[Dean Gaudet]
*) PORT: AIX >= 4.2 requires -lm due to libc changes.
12837
12838
12839
12840
12841
12842
12843
12844
12845
12846
12847
12848
12849
12850
12851
12852
12853
12854
12855
12856
12857
12858
12859
12860
12861
12862
12863
12864
12865
12866
12867
12868
12869
12870
12871
12872
12873
12874
12875
12876
12877
12878
12879
12880
12881
12882
12883
12884
12885
12886
12887
12888
12889
12890
12891
12892
12893
12894
12895
12896
12897
*) Enable ``=""'' for RewriteCond directives to match against
the empty string. This is the preferred way instead of ``^$''.
[Ralf S. Engelschall]
*) Fixed an infinite loop in mod_imap for references above the server root
[Dean Gaudet] PR#748
*) mod_proxy now has a ReceiveBufferSize directive, similar to
SendBufferSize, so that the TCP window can be set appropriately
for LFNs. [Phillip A. Prindeville]
*) mod_browser has been replaced by the more general mod_setenvif
(courtesy of Paul Sutton). BrowserMatch* directives are still
available, but are now joined by SetEnvIf*, UnSetEnvIf*, and
UnSetEnvIfZero directives. [Ken Coar]
*) "HostnameLookups double" forces double-reverse DNS to succeed in
order for remote_host to be set (for logging, or for the env var
REMOTE_HOST). The old define MAXIMUM_DNS has been deprecated.
[Dean Gaudet]
*) mod_access overhaul:
- Now understands network/netmask syntax (i.e. 10.1.0.0/255.255.0.0)
and cidr syntax (i.e. 10.1.0.0/16). PR#762
- Critical path was sped up by pre-computing a few things at config time.
- The undocumented syntax "allow user-agents" was removed,
the replacement is "allow from env=foobar" combined with mod_browser.
- When used with hostnames it now forces a double-reverse lookup
no matter what the directory settings are. This double-reverse
doesn't affect any of the other routines that use the remote
hostname. In particular it's still passed to CGIs and the log
without the double-reverse check. Related PR#860.
[Dean Gaudet]
*) When a large bwrite() occurs (larger than the internal buffer size),
while there is already something in the buffer, apache will combine
the large write and the buffer into a single writev(). (This is
in anticipation of using mmap() for reading files.)
[Dean Gaudet]
*) In obscure cases where a partial socket write occurred while chunking,
Apache would omit the chunk header/footer on the next block. Cleaned
up other bugs/inconsistencies in error conditions in buff.c. Fixed
a bug where a long pause in DNS lookups could cause the last packet
of a response to be unduly delayed. [Roy Fielding, Dean Gaudet]
*) API: Added child_exit function to module structure. This is called
once per "heavy-weight process" just before a server child exit()'s
e.g. when max_requests_per_child is reached, etc.
[Doug MacEachern, Dean Gaudet]
*) mod_include cleanup showed that handle_else was being used to handle
endif. It didn't cause problems, but it was cleaned up too.
[Howard Fear]
*) mod_cern_meta would attempt to find meta files for the directory itself
in some cases, but not in others. It now avoids it in all cases.
[Dean Gaudet]
*) mod_mime_magic would core dump if there was a decompression error.
*) PORT: some variants of DGUX require -lsocket -lnsl
*) mod_autoindex now allows sorting of FancyIndexed directory listings
by the various fields (name, size, et cetera), either in ascending
or descending order. Just click on the column header. [Ken Coar]
*) PORT: Various tweaks to eliminate pointer-int casting warnings on 64-bit
CPUs like the Alpha. Apache still stores ints in pointers, but that's
the relatively safe direction. [Dean Gaudet] PR#344
*) PORT: QNX mmap() support for faster/more reliable scoreboard handling.
12913
12914
12915
12916
12917
12918
12919
12920
12921
12922
12923
12924
12925
12926
12927
12928
12929
12930
12931
12932
12933
12934
12935
12936
12937
12938
12939
12940
12941
12942
12943
12944
12945
12946
12947
12948
12949
12950
12951
*) child_main avoids an unneeded call to select() when there is only one
listening socket. [Dean Gaudet]
*) In the event that the server is starved for idle servers it will
spawn 1, then 2, then 4, ..., then 32 servers each second,
doubling each second. It'll also give a warning in the errorlog
since the most common reason for this is a poor StartServers
setting. The define MAX_SPAWN_RATE can be used to raise/lower
the maximum. [Dean Gaudet]
*) Apache now provides an effectively unbuffered connection for
CGI scripts. This means that data will be sent to the client
as soon as the CGI pauses or stops output; previously, Apache would
buffer the output up to a fixed buffer size before sending, which
could result in the user viewing an empty page until the CGI finished
or output a complete buffer. It is no longer necessary to use an
"nph-" CGI to get unbuffered output. Given that most CGIs are written
in a language that by default does buffering (e.g. perl) this
shouldn't have a detrimental effect on performance.
"nph-" CGIs, which formerly provided a direct socket to the client
without any server post-processing, were not fully compatible with
HTTP/1.1 or SSL support. As such they would have had to implement
the transport details, such as encryption or chunking, in order
to work properly in certain situations. Now, the only difference
between nph and non-nph scripts is "non-parsed headers".
[Dean Gaudet, Sameer Parekh, Roy Fielding]
*) If a BUFF is switched from buffered to unbuffered reading the first
bread() will return whatever remained in the buffer prior to the
switch. [Dean Gaudet]
Changes with Apache 1.3a1
*) Added another Configure helper script: TestLib. It determines
if a specified library exists. [Jim Jagielski]
*) PORT: Allow for use of n32bit libraries under IRIX 6.x
PR#721
*) PORT: Some architectures use size_t for various lengths in network
functions such as accept(), and getsockname(). The definition
NET_SIZE_T is used to control this. [Dean Gaudet]
*) PORT: Linux: Attempt to detect glibc based systems and include crypt.h
and -lcrypt. Test for various db libraries (dbm, ndbm, db) when
mod_auth_dbm or mod_auth_db are included. [Dean Gaudet]
*) PORT: QNX doesn't have initgroups() which support/suexec.c uses.
*) "force-response-1.0" now only applies to requests which are HTTP/1.0 to
begin with. "nokeepalive" now works for HTTP/1.1 clients. Added
"downgrade-1.0" which causes Apache to pretend it received a 1.0.
[Dean Gaudet] related PR#875
*) API: Correct child_init() slot declaration from int to void, to
match the init() declaration. Update mod_example to use the new
hook. [Ken Coar]
*) added transport handle slot (t_handle) to the BUFF structure
[Doug MacEachern]
*) get_client_block() returns wrong length if policy is
REQUEST_CHUNKED_DECHUNK.
*) Support the image map format of FrontPage. For example:
rect /url.hrm 10 20 30 40
*) PORT: -lresolv and -lsocks were in the wrong order for Solaris.
*) AddModuleInfo directive for mod_info which allows you to annotate
*) Added NoProxy directive to avoid using ProxyRemote for selected
addresses. Added ProxyDomain directive to cause unqualified
names to be qualified by redirection.
*) Support Proxy Authentication, and don't pass the Proxy-Authorize
header to the remote host in the proxy. [Sameer Parekh and
Wallace]