1
0
mirror of https://github.com/apache/httpd.git synced 2025-06-10 18:21:43 +03:00
Commit Graph

145 Commits

Author SHA1 Message Date
6f208d31a7 Adds support for reading trailers on input by exporting get_mime_headers
to ap_get_mime_headers and calling it in the appropriate place in
ap_http_filter.

showstoppers--;


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@94667 13f79535-47bb-0310-9956-ffa450edef68
2002-04-16 05:43:09 +00:00
e5200732d3 Correct partitioning of filter handles between core and http, and
export the handle pointers on Win32.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@94468 13f79535-47bb-0310-9956-ffa450edef68
2002-04-05 20:55:00 +00:00
3e2ce19baf BUCKET FREELISTS
Add an allocator-passing mechanism throughout the bucket brigades API.

From Apache's standpoint, the apr_bucket_alloc_t* used throughout a given
connection is stored in the conn_rec by the create_connection hook.  That
means it's the MPM's job to optimize recycling of apr_bucket_alloc_t's --
the MPM must ensure that no two threads can ever use the same one at the
same time, for instance.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@94304 13f79535-47bb-0310-9956-ffa450edef68
2002-03-29 08:17:26 +00:00
5c1259758f Seems like this is the end of the compiler emits on Win32, once again.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@93987 13f79535-47bb-0310-9956-ffa450edef68
2002-03-17 23:18:10 +00:00
845cbfd508 Update our copyright for this year.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@93918 13f79535-47bb-0310-9956-ffa450edef68
2002-03-13 20:48:07 +00:00
99bbb31b45 Style Police comming through...
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@93842 13f79535-47bb-0310-9956-ffa450edef68
2002-03-11 13:57:25 +00:00
e311cbc704 ap_rgetline_core: fix a bug with folding observed while testing ebcdic.
Garbage characters sometimes appeared after a legitimate folded header.
We weren't allocating an extra byte for the trailing null, or copying it,
when called from get_mime_headers (folding is in use, and ap_rgetline is
responsible for allocating memory).  No need to worry about a trailing
LF - it's already been nuked.

I checked the partial line code to see if it had a similar bug.  It looked
like it did, and that the code which trims the back end of the line would
run multiple times and whack innocent bytes.  However, gdb showed that this
section of code appears to be dead due to input filter chain changes.

also, removed an assignment to a dead variable.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@93804 13f79535-47bb-0310-9956-ffa450edef68
2002-03-08 20:24:07 +00:00
1831fc04ee ap_rgetline: fix folding and partial line handling on ebcdic boxes. The
normal case worked OK, but due to the recursion and multiple exit points,
input bytes could go thru charset translation multiple times or not at all.

Suggested by: Justin Erenkrantz


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@93776 13f79535-47bb-0310-9956-ffa450edef68
2002-03-07 22:08:46 +00:00
116497445f Remove the prev pointer from the filter chain. This removes
the complexity of trying to set the filter chain correctly, with the
side-effect of forcing us to walk the entire chain whenever we add
a filter.  Since the filter chains are small, the decrease in
complexity is worth it.
Reviewed by:	Allan Edwards


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@93745 13f79535-47bb-0310-9956-ffa450edef68
2002-03-07 02:09:30 +00:00
596d79f14b This fixes most of the header bug that was committed last night. The server
is seg faulting on pipelined requests currently, but I want to get people
back to a running server.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@93686 13f79535-47bb-0310-9956-ffa450edef68
2002-03-03 22:04:03 +00:00
9ac46ee310 Fix the mod_dir/mod_negotiation bug, where redirects and sub requests
were not getting the correct filters.  This is done by creating a location
in the request rec that holds protocol level filters.  Protocol level
filters survive for one request, from the time the request is received
from the user to the time the response is sent.  r->output_filters now
stores the request level filters, which are only valid for the lifetime
of one request_rec.

This patch works, but it is not complete.  The second half of the problem
is that add_any_filter doesn't check where it puts the filters that it
adds, so it is possible for filters to be put on this wrong list, and
for filters to be lost completely during request processing.  That half
of the fix will be coming in the next day or so.

Submitted by:	Will Rowe, Justin Erenkrantz, Ryan Bloom


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@93682 13f79535-47bb-0310-9956-ffa450edef68
2002-03-03 02:15:52 +00:00
a547ba6880 ownership of the brigade is passed in the ap_pass_brigade call
so make sure that it doesn't get left lying around. This tickled
a bug with mod_deflate and resulted in a bucket being compressed
more than once.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@93610 13f79535-47bb-0310-9956-ffa450edef68
2002-02-27 21:16:19 +00:00
097ccb920f Just toss these debug messages since so many people use httpd with
LogLevel 'debug' and complain if they see anything that says "error"
in it.  This case isn't even interesting unless you are hard-core.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@93422 13f79535-47bb-0310-9956-ffa450edef68
2002-02-15 01:17:53 +00:00
e67dd71c19 update CHANGES for an input side seg fault fix.
also, get rid of a mainframe term that somehow leaked into a comment which
might confuse people.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@93334 13f79535-47bb-0310-9956-ffa450edef68
2002-02-08 14:47:10 +00:00
1c1ce97f3c ensure that ap_rgetline allocates storage for the request line each time it is
called.

This fixes a number of segfaults on daedalus where the first line is
empty (i.e. \r\n followed by a bunch of garbage)


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@93332 13f79535-47bb-0310-9956-ffa450edef68
2002-02-08 02:25:42 +00:00
581ada359b We totally disregard the fact that notice is level 5 and always print
that.  Yuck.  Make these error message DEBUG level then.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@93295 13f79535-47bb-0310-9956-ffa450edef68
2002-02-06 16:56:52 +00:00
0d0add84b0 don't try to place a header field in error-notes if ap_rgetline()
returned something like APR_EOF, since len is not set in this
case and we can go off the end of storage

make sure we set r->status to something when we bail out due
to an error; otherwise, the request goes forward with meaningless
headers


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@93294 13f79535-47bb-0310-9956-ffa450edef68
2002-02-06 16:19:03 +00:00
68f36d57cd Tone down the logging levels for these two messages from ERROR to NOTICE.
It's something to note, but it isn't an error worthy of logging by default.
(Also always log any status values in read_request_line() - incl. timeouts.)


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@93271 13f79535-47bb-0310-9956-ffa450edef68
2002-02-06 02:29:54 +00:00
4ffeb3ca6e If the MIME-continuation line returns nothing, then we should return not
segfault.

(A minor change to Jeff's patch is that we ignore the EBCDIC code path.)

Submitted by:	Jeff Trawick
Reviewed by:	Justin Erenkrantz


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@93269 13f79535-47bb-0310-9956-ffa450edef68
2002-02-06 02:20:13 +00:00
2d386ab438 make it compile on win32
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@93094 13f79535-47bb-0310-9956-ffa450edef68
2002-01-30 04:37:29 +00:00
f153bf8a14 Simplify the exit paths of ap_rgetline by creating a second brigade for
use when we do AP_MODE_SPECULATIVE.  This allows us to delete the
brigades earlier.

(In practice, it really doesn't matter if we delete the brigade or not
since it will be destroyed when it's pool is destroyed, but we'll try
to be nice.)


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@93092 13f79535-47bb-0310-9956-ffa450edef68
2002-01-30 02:06:09 +00:00
efbab2c104 optimized away one more filter name lookup during request processing
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@93052 13f79535-47bb-0310-9956-ffa450edef68
2002-01-27 19:24:20 +00:00
60919177e8 Fixed a read from a deleted brigade in the new version of
ap_rgetline()...

In the "folding" case, there was an ap_get_brigade() call after
the brigade had been destroyed.  I noticed this while debugging
a memory leak that showed up while testing the httpd with ab.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@93044 13f79535-47bb-0310-9956-ffa450edef68
2002-01-27 07:30:02 +00:00
4423c0c6de ap_rgetline(): completely ignore an empty bucket... previously the logic
generally worked but with a memory debug build it could
               crash since some memory debuggers don't like an alloc of
               zero bytes


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@93037 13f79535-47bb-0310-9956-ffa450edef68
2002-01-26 23:01:31 +00:00
fb29f09f00 Eliminate needless variable that wasn't initialized anyway.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@93023 13f79535-47bb-0310-9956-ffa450edef68
2002-01-25 05:39:21 +00:00
be95061013 Add another status code to ignore in the error_log.
(I'm really tempted to ditch this log line altogether.)


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@93021 13f79535-47bb-0310-9956-ffa450edef68
2002-01-25 02:38:52 +00:00
429aee9eec Turn the log verbosity WAY down by not logging TIMEUP and EOF errors in
read_request_line as these are very common place with HTTP keepalive
timeouts.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@93019 13f79535-47bb-0310-9956-ffa450edef68
2002-01-25 02:15:09 +00:00
cb0ab15d4b Somehow, I lost this condition when I changed to account for ap_rgetline.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@93016 13f79535-47bb-0310-9956-ffa450edef68
2002-01-25 01:20:00 +00:00
94d01b65aa Change ap_get_brigade prototype to remove *readbytes in favor of readbytes.
If you need the length, you should be using apr_brigade_length.  This is
much more consistent.  Of all the places that call ap_get_brigade, only
one (ap_http_filter) needs the length.  This makes it now possible to
pass constants down without assigning them to a temporary variable first.

Also:
- Change proxy_ftp to use EXHAUSTIVE mode (didn't catch its -1 before)
- Fix buglet in mod_ssl that would cause it to return too much data in
  some circumstances


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@93014 13f79535-47bb-0310-9956-ffa450edef68
2002-01-25 01:11:47 +00:00
f885c784d2 Rewrite ap_rgetline to remove the need to have an "internal" brigade stored
in the core_module structure by using the AP_MODE_SPECULATIVE filter mode
to determine if MIME-continuation should occur.

Notes:
- ap_rgetline has a new prototype.
- ap_rgetline returns APR_ENOSPC when we are out of buffer space.

All direct callers of ap_rgetline are now adjusted to handle this new API.
ap_getline will mimic the old API for now.

Reviewed by:	Ryan Morgan


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@93011 13f79535-47bb-0310-9956-ffa450edef68
2002-01-24 23:59:51 +00:00
7d32242a14 Input filtering prototype change: Socket blocking type should be
separate from the input filter mode type.

We also no longer look at readbytes to determine the method of
filter operation.  This makes the use of filters more obvious and
allows a wider range of options for input filters modes.

To start with, the new input filter modes are:

AP_MODE_READBYTES (no more than *readbytes returned)
AP_MODE_GETLINE (old *readbytes == 0 case)
AP_MODE_EATCRLF (old AP_MODE_PEEK)
AP_MODE_SPECULATIVE (will be used in a future ap_getline rewrite)
AP_MODE_EXHAUSTIVE (old *readbytes == -1 case)
AP_MODE_INIT (special case for NNTP over SSL)

The block parameter is an apr_read_type_e: APR_BLOCK_READ, APR_NONBLOCK_READ

This also allows cleanup of mod_ssl's handling in the getline case.

Reviewed by:	Ryan Bloom (concept), Greg Stein (concept)


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@92928 13f79535-47bb-0310-9956-ffa450edef68
2002-01-19 07:45:18 +00:00
5ce2fa7b99 A modification to reduce the memory usage of the server:
Reduced the initial size of the r->headers_in and r->subprocess_env
tables...this saves us 600 bytes per request, which (based on tests
I just ran) helps keep r->pool from overflowing its initial 8KB
allocation and having to alloc another 8KB block.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@92843 13f79535-47bb-0310-9956-ffa450edef68
2002-01-13 21:30:14 +00:00
fe065c4cfd Making sure that the global variables have been initialized to avoid linker
problems at least on NetWare
Submitted by: Pavel Novy


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@92711 13f79535-47bb-0310-9956-ffa450edef68
2002-01-02 23:27:57 +00:00
fe8b39ceb8 Fixed a bug in ap_rgetline()
When an input line required more than one read, each subsequent
block of data was copied on top of the previous one.  So if a
request line got split into multiple packets, the data would be
corrupted.  The new code uses a power-of-two allocator to expand
the buffer and properly append the next block of data at the end
of the previous one.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@92558 13f79535-47bb-0310-9956-ffa450edef68
2001-12-21 04:21:15 +00:00
ec71dcebd6 Skip the setting of Last-Modified in the response header on
requests or subrequests for which no response header will be
generated (a performance improvement for mod_include)


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@92523 13f79535-47bb-0310-9956-ffa450edef68
2001-12-18 23:57:36 +00:00
0a02d0ae76 Address a signedness warning. No cleaner solutions here.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@92450 13f79535-47bb-0310-9956-ffa450edef68
2001-12-13 16:41:43 +00:00
a88efbd99f Fixed check for buffer overrun in ap_rgetline()
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@92324 13f79535-47bb-0310-9956-ffa450edef68
2001-12-05 01:34:00 +00:00
583f14309a get rid of an unused variable
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@92295 13f79535-47bb-0310-9956-ffa450edef68
2001-12-03 12:12:31 +00:00
4a8c3b4a3b include/http_protocol.h
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@92289 13f79535-47bb-0310-9956-ffa450edef68
2001-12-02 23:11:12 +00:00
38eb105792 Optimization: changed some apr_pstrndup calls to apr_pstrmemdup
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@92282 13f79535-47bb-0310-9956-ffa450edef68
2001-12-02 09:51:19 +00:00
1c0391b185 Yea, sure a message is always good. Note we can't log the exception.
Submitted by John Sterling <sterling@covalent.net>


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@92208 13f79535-47bb-0310-9956-ffa450edef68
2001-11-28 02:09:46 +00:00
d70af2b3eb Fix the timeout logic that I broke last week. This adds a request
level filter that sets the timeout on the socket that is connected
to the client.

Thanks Greg Stein for seeing this bug.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@92073 13f79535-47bb-0310-9956-ffa450edef68
2001-11-21 03:46:22 +00:00
8c931b983f Prevent segv in ap_note_basic_auth_failure() when no AuthName is configured
PR:
Obtained from:
Submitted by:	John Sterling <sterling@covalent.net>
Reviewed by:	dougm


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@92072 13f79535-47bb-0310-9956-ffa450edef68
2001-11-21 03:19:13 +00:00
0c05b625ac Begin to abstract out the underlying transport layer.
The first step is to remove the socket from the conn_rec,
the server now lives in a context that is passed to the
core's input and output filters. This forces us to be very
careful when adding calls that use the socket directly,
because the socket isn't available in most locations.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@91887 13f79535-47bb-0310-9956-ffa450edef68
2001-11-12 23:49:08 +00:00
4d8781b7c6 ap_getline() is useful to modules outside of the core..
change declaration from AP_CORE_DECLARE to AP_DECLARE so it can be used
used outside the core
PR:
Obtained from:
Submitted by:
Reviewed by:


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@91778 13f79535-47bb-0310-9956-ffa450edef68
2001-11-07 05:41:22 +00:00
e864d370bf change ap_getline to return the size of the buffer when there's no apparent end
to an input line.  This is more like the 1.3 behavior which should help the
callers recognize this condition.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@91714 13f79535-47bb-0310-9956-ffa450edef68
2001-10-31 21:14:23 +00:00
a71e3b8b33 don't lose the return code from ap_fwrite() when called from buffer_output()
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@91649 13f79535-47bb-0310-9956-ffa450edef68
2001-10-23 20:43:57 +00:00
2cb3776fae I believe it is a kosher for a filter to return EOS, but return APR_SUCCESS
via ap_get_brigade.  So, we should treat this as end-of-input.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@91311 13f79535-47bb-0310-9956-ffa450edef68
2001-10-05 08:51:43 +00:00
66ee5533d3 Remove the lameo create_req hack and delay the addition of the HTTP_IN
filter until after we have read the headers.  This eliminates the status
hack that was in http_protocol.c and makes it all around better.

server/protocol.c now directly adds HTTP_IN filter - should we create a
specific hook for this?  (Could we do this as a post_read_request hook?)
I'm not terribly sure, but let's move it down to the lowest possible
place in ap_read_request.  We can change this detail later as we see fit.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@91192 13f79535-47bb-0310-9956-ffa450edef68
2001-09-29 08:48:59 +00:00
08eb7609da Input filtering rewrite. Consolidate how we handle HTTP input parsing by
rearranging and rethinking some things.  The net result is that the HTTP
filter is now a request filter and is now only responsible for HTTP things.
The core input filter is now responsible for handling all of the dirty work.

Highlights:
- Removes the dechunk filter and merges it with ap_http_filter (aka HTTP_IN).
  The dechunk filter was incorrectly handling certain cases (trailers).
- Moves ap_http_filter from a connection filter to a request filter
  to support the consolidation above (it needs header info).
- Change support code to allow the http_filter to be a
  request filter (how the request is setup initially).
- Move most of the logic from HTTP_IN to CORE_IN (core_input_filter).
  HTTP_IN is now only concerned about HTTP things.  The core filter
  is now responsible for returning data.  It is impossible to
  consolidate dechunk and http without this because HTTP_IN previously
  buffered data.  As Greg has suggested, it may make sense to write
  some brigade functions that handle input (getline).  It should be
  fairly trivial to add these.  Some of the calls in ap_http_filter
  could be switched as well.

This is the original patch as submitted to dev@httpd on Monday, Sep.
24th.  Additional comments and some minor tweaks done after that
submission are coming up next.  This should allow people who reviewed
the original patch to see what has changed and review them piecemeal.

This test passes all current tests in httpd-test.  Please perform
chicken sacrifices to verify that this hasn't blown up your favorite
input.

Reviewed by:	Greg Stein, Ryan Bloom, and Cliff Woolley (buckets)


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@91189 13f79535-47bb-0310-9956-ffa450edef68
2001-09-29 08:17:11 +00:00