Tony Finch [Thu, 14 Sep 2000 02:16:07 +0000 (02:16 +0000)]
Improve the way the chunking filter handles zero-length buckets,
and fix the comment explaining how to reduce the incidence of tiny chunks.
Submitted by: Jeff Trawick
Reviewed by: Tony Finch
Ryan Bloom [Thu, 14 Sep 2000 00:34:15 +0000 (00:34 +0000)]
Add a pointer to the filter_rec_t from the filter_t. This allows modules
to get to the filter name from the filter itself. This is useful for
modules like mod_perl, which have one filter function that does different
things based on the name used when the filter was inserted.
Ryan Bloom [Wed, 13 Sep 2000 23:13:20 +0000 (23:13 +0000)]
Add the AddFilter directive. This directive takes a list of filter names
that have been previously registered with the server. Currently the
directive is only valid inside the config file, but once the Options
directive is tweaked a bit, I would feel more comfortable exposing this
directive to htaccess files.
As a part of making adding this filter, I removed the ctx pointer from the
ap_add_filter prototype. The problem is that the core is the thing that
is actually inserting the filter into the filter stack, but the core doesn't
know how to allocate memory for each filter. The solution is to have the
filters themselves be responsible for allocating the ctx memory whenever
it is required.
Ryan Bloom [Wed, 13 Sep 2000 02:07:40 +0000 (02:07 +0000)]
First pass at mod_include as a filter. This is at an incredibly alpha
stage, but it should compile for everybody now. I have experienced a few
seg faults that I haven't been able to track down yet, but it should
compile on all platforms, which is better than before this patch.
Ken Coar [Wed, 13 Sep 2000 01:58:15 +0000 (01:58 +0000)]
Start introducing the extension-method elements so we're not
bound to hard-coded names and a bitmask. We still use the
bitmask for known methods, but we also have an array for
extension method named. Wherever we used the M_* constants
we need to use a routine that knows about the new structure instead.
This is far from complete, but AFAIK this interim work doesn't
break anything -- especially the compile. The rest of the
work will be added in segments; this is just a checkpoint.
Tony Finch [Tue, 12 Sep 2000 17:46:40 +0000 (17:46 +0000)]
This commit adds support for purely name-based virtual hosting that
does not require any IP addresses in httpd.conf and which disregards
the local IP address of any connections. This will be particularly
appreciated by people running little servers on machines with
dynamically configured IP addresses, and by people wishing to use
identical httpd.conf files on all the machines in a load-balanced
cluster.
The syntax is:
NameVirtualHost *
<VirtualHost *>
ServerName my.friend.has.a.silly.vanitydomain.org
DocumentRoot /usr/local/apache/docs1
</VirtualHost>
<VirtualHost *>
ServerName but.easier.to.spell.than.my.vanitydomain.org
DocumentRoot /usr/local/apache/docs2
</VirtualHost>
The implementation is a straightforward extension of what is there
already although the patch is made somewhat larger by the need to
avoid duplicate code for normal and wildcarded NameVirtualHosts.
Jeff Trawick [Tue, 12 Sep 2000 14:48:49 +0000 (14:48 +0000)]
Explictly close the AF_UNIX socket to the cgid child after nph cgis too.
(Yeah, it got closed during pool cleanup, but it is more understandable if
it is closed the same way for nph and !nph cgis.)
Ryan Bloom [Tue, 12 Sep 2000 03:40:15 +0000 (03:40 +0000)]
Ensure that only one EOS bucket is sent down the filter stack. This is
done by adding a flag to the request_rec. When ap_pass_bucket sees an
EOS bucket, the flag is set. If the flag is still unset when
ap_finalize_request is called, then ap_finalize_request sends an EOS. This
fixes the problem with chunking and CGI.
Jeff Trawick [Mon, 11 Sep 2000 21:37:27 +0000 (21:37 +0000)]
The apr_file_t representation of the Unix socket from which we read
the CGI output should live in the request pool, not in pcgi. pcgi (in
the httpd processes, at least) isn't cleaned up until we restart httpd.
Ryan Bloom [Mon, 11 Sep 2000 00:30:02 +0000 (00:30 +0000)]
Modify mod_cgid to use bucket brigades. This means that mod_cgid behaves
like mod_cgi, creating a single element bucket brigade that is passed to
the next filter. This is instead of making mod_cgid read from the socket,
and call ap_r* repeatedly.
The "get resource" functionality is no longer a hook. Instead, providers
register themselves by name with mod_dav. The user configures a particular
provider for a location/directory. mod_dav looks up that provider and uses
it explicitly. (the prior behavior simply asked "anybody" to satisfy the
get_resource, but it did not mesh well with user-specified providers)
*) add providers.c to deal with provider registration
*) rejigger mod_dav.c to toss the hook and use the provider
*) clean out dav/fs/ of the old scheme and have it register itself
pass_chunk() was tossing a brigade composed of just the EOS bucket. on
entry, it saw there were zero bytes and simply returned. the client
would never receive "end of response" and timeout (or the server would
timeout the client).
*) added comments about what is going on
*) place chunk start/end markers around just the content, if that content
is non-zero in length
*) insert all the right "end of response" stuff before the EOS bucket
update the WebDAV versioning support:
- recognize and dispatch the latest set of DeltaV methods
- refine the CHECKOUT provider hook
- add avail_reports provider hook
- fix the "target" resolution mechanism
Tony Finch [Sat, 9 Sep 2000 01:11:15 +0000 (01:11 +0000)]
Fix inserting elements at the head and tail of a ring when the ring is
empty. Avoiding referring to the element type in the macros resulted
in some double dereferences that did the wrong thing.
Reported by: Jeff Trawick
Add an index of modules "by type". The modules directory in 2.0
could use a good cleaning to get rid of stuff that doesn't need
to be carried over, but that can wait.
Ryan Bloom [Fri, 8 Sep 2000 20:34:33 +0000 (20:34 +0000)]
Fix a compile break in mod_mime_magic.c. In early 2.0 versions, we would
get a pipe back from create_child, and stuff that into a buff to read from
it. This made sense in 1.3, because we got a buff back from the
create_process call. In 2.0, we are getting a pipe, so this doesn't
make sense. This patch just uses the pipe that is returned to us to read
the information we want.
Submitted by: John K. Sterling <sterling@covalent.net>
Reviewed by: Ryan Bloom
Change prefork to use the same listen api as the rest of the unix mpms
(ap_setup_listeners). This eliminates the need to force a recompile of
listen.c when you switch to/from using prefork.
Tony Finch [Fri, 8 Sep 2000 10:16:14 +0000 (10:16 +0000)]
Reduce the manualarity of managing bucket brigade lists by using the
new AP_RING macros. Most of this commit is fairly pedestrian as you
would expect, but I had to redo the chunking filter because of the
amount of pointer juggling it did. I have done some minimal testing
of this patch and it seems to work.
Jeff Trawick [Thu, 7 Sep 2000 23:51:36 +0000 (23:51 +0000)]
Fix merging of AddDefaultCharset directive.
PR: 5872 (reported against 1.3)
Submitted by: Jun Kuriyama <kuriyama@imgsrc.co.jp>
Reviewed by: Jeff Trawick
Ryan Bloom [Wed, 6 Sep 2000 14:02:29 +0000 (14:02 +0000)]
Fix the ScanDoc output on IE. I don't have IE, so I can't test this, but
it looks correct, and this problem has been submitted to me multiple times
PR: 6501
Submitted by: Shuichi Kitaguchi <ki@hh.iij4u.or.jp>
Reviewed by: Ryan Bloom
Jeff Trawick [Wed, 30 Aug 2000 21:15:33 +0000 (21:15 +0000)]
fix a few bugs and improve error handling:
introduce extended error status as a start of more helpful error logging;
instead of aborting the process when we get a bucket-straddling char too
wide to handle, trace the problem and return an error;
when we get to the end of the brigade and we're still waiting for the rest
of a character, return an error instead of ignoring the problem;
if we get 0 bytes when reading from a pipe, don't fret (segfault); skip
over this empty bucket and read the next one;
don't set done if send_downstream() returns APR_SUCCESS; set it for the
opposite condition; that bug kept us from processing our entire input
brigade for brigades that caused lots of output;
Ryan Bloom [Tue, 29 Aug 2000 22:16:45 +0000 (22:16 +0000)]
Modify the way filters are added to the server. Instead of using a FIFO,
we use a modified LIFO. It is modified, because if we add a filter while
in the middle of another filter, the added filter gets put in after the
current filter. This requires that the server is smart about which filters
are added when. This should be handled by the HTTP protocol, but we will
want to keep and eye on things for a little while.
This change is necessary, because currently when we add a filter it goes
after the last filter of the same type. This is broken whenever we want
to add a filter that has a dependancy. Think about the core and chunking
filters. They are of the same type, and core is always added first. When
we go to insert chunking, it gets added, but it is never called.
Jeff Trawick [Mon, 28 Aug 2000 20:36:42 +0000 (20:36 +0000)]
Update chunk_filter to handle buckets with unknown length (e.g., pipes).
As soon as we hit such a bucket, we'll read from it then pass everything
we have so far on to the next filter. At that point we'll start over.
Also, increase the size of the chunk header buffer to handle larger
lengths.
Note: There is still an extra final chunk header (0) when mod_cgi is used
because EOS is coming down twice.
This is likely to have some bugs here and there. Even worse, it is butt
ugly and in need of simplification.
Jeff Trawick [Sat, 26 Aug 2000 19:45:15 +0000 (19:45 +0000)]
Call ap_pass_brigade() *before* soaking up stderr. The normal CGI
is going to write a bunch of stuff to stdout and nothing to stderr.
Reading stderr before processing the stdout pipe can cause deadlock if
the CGI fills the kernel buffer for stdout because the CGI will stall
writing to stdout while the httpd process will stall reading from the
CGI's stderr.
The NPH CGI behavior was unchanged. If this is still a problem for NPH
CGIs, it was a problem before filtering too.
Also, get rid of a couple of unused variables in cgi_handler.
Ryan Bloom [Fri, 25 Aug 2000 22:18:15 +0000 (22:18 +0000)]
Make CGI's use bucket brigades. This will only work with mod_cgi for the
time being. The changes should apply equally to mod_cgid, but I haven't
had a chance to really try it yet. This is definately sub-optimal as far
as performance is concerned. The concepts are there, and the flags are
available for performance tuning, but I didn't want to really get too
enmeshed in it today.
Jim Jagielski [Wed, 23 Aug 2000 23:28:54 +0000 (23:28 +0000)]
We need to test specifically for setrlimit/getrlimit instead of
just the structure or the RLIMIT_* defines. Also, we should make
the API function unixd_set_rlimit() ``available'' even if it
doesn't do anything.
PR:
Obtained from:
Submitted by:
Reviewed by:
Ryan Bloom [Wed, 23 Aug 2000 00:01:58 +0000 (00:01 +0000)]
Remove IOLs from Apache. They are no longer necessary, now that we have
filtering beginning to work. There is a hack that has been repeated
through this patch, we morph a pipe into a socket, and put the socket
into the BUFF. Everytime we do that, we are working with a pipe from
a CGI, and we should be creating a pipe bucket and passing that bucket
back. Because we don't actually have pipe buckets yet, we are using this
hack. When we get pipe buckets, this will be fixed.
Jeff Trawick [Tue, 22 Aug 2000 18:01:47 +0000 (18:01 +0000)]
Fix charset translation breakage on EBCDIC machines... the core turned
on buff's translation by default, but mod_charset_lite (when configured
to do so) turned on its own filter-based translation, resulting in
gibberish.
To be determined... whether or not mod_charset_lite should enable
translation of text objects by default (a la 1.3)... probably... for
now you have to tell mod_charset_lite to translate.
Ryan Bloom [Tue, 22 Aug 2000 04:25:36 +0000 (04:25 +0000)]
Finish fixing the pcre build. PCRE's configure script should be called,
and we can't clean config.h and then touch the file, we actually need
some of the data that config.h contains.
Bill Stoddard [Tue, 22 Aug 2000 03:20:44 +0000 (03:20 +0000)]
Win32: function pointers use C calling convention unless explicitly set to use
stdcall. The 'split' function pointer in ap_buckets.h points to both static functions
(which use C calling convention) and exported functions (which normally use stdcall).
Let's settle on using the C calling convention.
Bill Stoddard [Tue, 22 Aug 2000 01:24:07 +0000 (01:24 +0000)]
Win32: Reset the acceptex context on a GetQueuedCompletionStatus() failure. We were
losing contexts before this fix, and if we lost enough, the server would stop responding.
GetQueuedCompletionStatus can fail with ERROR_NETNAME_DELETED when a client closes
its end of a connection and we try to reuse the accept socket. Really bizzare... I would
have thought the AcceptEx using the recycled socket would have failed instead...
Jeff Trawick [Sun, 20 Aug 2000 03:44:20 +0000 (03:44 +0000)]
Use context data, initialized prior to insertion of the filter, to indicate
which translation handle to use. This will allow the same filter to work
for input and output.
Tony Finch [Sat, 19 Aug 2000 06:04:57 +0000 (06:04 +0000)]
Add generic support for reference-counting the resources used by
buckets, and alter the HEAP and MMAP buckets to use it. Change
the way buckets are initialised to support changing the type of
buckets in place, and use it when setting aside TRANSIENT buckets.
Change the implementation of TRANSIENT buckets so that it can be
mostly shared with IMMORTAL buckets, which are now implemented.
Jeff Trawick [Fri, 18 Aug 2000 15:33:08 +0000 (15:33 +0000)]
Tweak apache/apr builds to support dsos on OS/390.
The OS/390 compile options are hard-coded because we need the
special DLL,EXPORTALL on *all* object files that are part of the
core so that dsos can reference symbols in the core. (Of course,
we use the option on more object files than that, but it doesn't
seem to hurt anything.)
We hard-code the enablement of DSOs on OS/390 because the
library functions on OS/390 to manage explicit loading are not
portable, so there seems to be no use in probing for them.
Ryan Bloom [Fri, 18 Aug 2000 04:50:22 +0000 (04:50 +0000)]
proxy_cache.c was still in the ApacheModuleProxy project, although that
modules is deprecated. Remove it from the project.
Submitted by: Bill Rowe <wrowe@apache.org>
Ryan Bloom [Fri, 18 Aug 2000 04:46:07 +0000 (04:46 +0000)]
Fix chunking. Two bugs fixed.
1) don't put the trailing 0\r\n\r\n in lenstr; that buffer is
already in use (pointed to by another transient bucket); using
lenstr again overlays that other chunk header
2) insert the bucket with the trailing "0\r\n\r\n" *before* the eos bucket
Submitted by: Jeff Trawick <trawickj@bellsouth.net>