1
0
mirror of https://github.com/apache/httpd.git synced 2026-10-25 10:59:28 +03:00
Commit Graph

898 Commits

Author SHA1 Message Date
Justin Erenkrantz
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
Jeff Trawick
8b31569e09 Currently, when the map-to-storage handler for TRACE returns DONE, the
caller -- ap_process_request_internal() -- catches that and returns
OK to its caller -- ap_process_request().  But ap_process_request(),
seeing OK, tries to run a handler.  It needs to skip that if the
request was completed in ap_process_request_internal().

Reviewed by:	William A. Rowe, Jr.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@91095 13f79535-47bb-0310-9956-ffa450edef68
2001-09-20 17:54:51 +00:00
Justin Erenkrantz
cb8569e4f8 This patch eliminates the wasteful run-time conversion of method names from
strings to numbers in places where the methods are known at compile
time.

(Justin fixed the va_end() call to be correct.)

Submitted by:	Brian Pane <bpane@pacbell.net>
Reviewed by:	Justin Erenkrantz


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@91078 13f79535-47bb-0310-9956-ffa450edef68
2001-09-19 05:52:42 +00:00
Greg Stein
0d93863aa4 Temporary hack to ensure that the split results are within a brigade
attached to the proper pool. Otherwise, ctx->b would end up associated with
the request pool, and the SOCKET bucket from the CORE_IN filter would get
cleared at request end (thus the next request would go to CORE_IN for more
data and get APR_EOF, and figured there were no more requests).

This section of code was only triggered when a request had a body. The
symptom was closing the connection (even though it should have been a
keepalive) after the response was sent.

For more info, see Message-ID on dev@: <20010917061613.B466@lyra.org>


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@91053 13f79535-47bb-0310-9956-ffa450edef68
2001-09-17 13:12:37 +00:00
William A. Rowe Jr
7f0b609358 The per_dir_merge overlay of AddInputFilter/AddOutputFilter must
absolutely replace a prior definition for the same file extension.
  Picture AddOutputFilter Includes .html in a directory, and needing
  to replace that behavior in a subdirectory which does not contain
  SSI html files.  This behavior must remain consistent to the other
  mime behaviors, as documented in manual/mod/mod_mime.html


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@90959 13f79535-47bb-0310-9956-ffa450edef68
2001-09-08 05:50:12 +00:00
Justin Erenkrantz
06dc8eff0e We should be copying the filters as well when we perform the extension merge
(which seems to use a ; syntax).

Try:
AddOutputFilter GZ html  (server-level)
AddOutputFilter Includes html  (directory-level)

Oops.

Without this, when you use mod_gz and go to /foobarnotthere/, the error
page isn't handled by mod_include.  Oooops.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@90871 13f79535-47bb-0310-9956-ffa450edef68
2001-09-02 08:34:45 +00:00
Ryan Bloom
57b309fdd1 Fix logging of bytes sent for HEAD requests. %b and %B should
log either - or 0, before this patch, they were both logging
the file size.

PR:	8021
Submitted by:	Taketo Kabe <kabe@sra-tohoku.co.jp>


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@90870 13f79535-47bb-0310-9956-ffa450edef68
2001-09-02 03:21:47 +00:00
William A. Rowe Jr
76eef7ccce Now that stinks, sorry. In moving code - I didn't notice my code
now served out (r) info instead of the (rnew) info.  Made for nasty
  cyclic loops in mod_dir :(

  It looks like this works once again.  I'll post completed deltas to
  the list ASAP.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@90838 13f79535-47bb-0310-9956-ffa450edef68
2001-08-31 03:49:42 +00:00
William A. Rowe Jr
d78dd20618 Much better - sorry - I missed one case of forcing pipeline flush when
the handler returned a non-OK result.  ergo, 304's weren't sent.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@90837 13f79535-47bb-0310-9956-ffa450edef68
2001-08-31 02:46:29 +00:00
William A. Rowe Jr
96c3ce2961 After calling ap_process_request_internal(), the caller must invoke
the handler themselves.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@90835 13f79535-47bb-0310-9956-ffa450edef68
2001-08-31 02:29:48 +00:00
William A. Rowe Jr
3db323656f Normalize all paths to run the same, common code for pre-request setup
from the primary request, redirects and sub-requests.

  This will significantly reduce opporunities for inconsistancy (such
  as Ian observed, and as I repaired only a month ago.)

  This promotes process_request_internal to an ap_ namespace protected
  entity in server/request.c (from it's old home in http/http_request.c)
  since this fn has no http specifics.

Reviewed (in concept): Cliff Woolley, Ian Holsman


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@90832 13f79535-47bb-0310-9956-ffa450edef68
2001-08-31 01:38:06 +00:00
William A. Rowe Jr
3044c08741 Fix mod_mime skipping over mime.types when some _other_ field was set
with mod_mime, but not AddType.

  Why is everybody always breaking my local CHANGES file ;-?


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@90796 13f79535-47bb-0310-9956-ffa450edef68
2001-08-30 04:11:57 +00:00
William A. Rowe Jr
e18cb04fd3 Also in the prior commit (1.338)
*) Modfied mod_mime to prevent mod_negotation from serving a multiview
     of a 'handler' or 'filter', so that any filename extension that does
     not contribute to the negotiated metadata can't be served without
     an explicit request.  E.g., if the .Z extension is associated with
     an unzip filter, the user request somefile.Z.html, mod_negotiation
     won't serve it.  It can serve somefile.Z.html when somefile.Z is
     requested, since the .Z extension is explictly requested, if the
     .html extension is associated with ContentType text/html.

    See changes for a complete description.  Because (in the example) the
    .Z extension doesn't affect negotiated behavior, the files index.html
    and index.Z.html couldn't be distinguished, and the user would get an
    error 406 NOT ACCEPTABLE, which is the _wrong_ answer.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@90759 13f79535-47bb-0310-9956-ffa450edef68
2001-08-28 15:31:08 +00:00
William A. Rowe Jr
0ba34fee71 Introduces mod_mime AddInputFilter and AddOutputFilter filter ext syntax.
Significantly refactored the code to maintain single functions for the
  add_extension_info hash and remove_extension_info table processing.

  The AddInputFilter/AddOutputFilter could have been plural, as they accept
  a semicolon delimited list of filters (e.g. you need to stack two different
  filters based on a single extension.)  I expect that the plural could
  confuse users, though, as they might expect AddInputFilters foo bar var
  to add foo and bar to the extension var, which it definately doesn't do!


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@90756 13f79535-47bb-0310-9956-ffa450edef68
2001-08-28 15:07:11 +00:00
Doug MacEachern
46a6922999 backing out the ap_set_keepalive uncheck for Content-Length header
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@90707 13f79535-47bb-0310-9956-ffa450edef68
2001-08-26 20:09:52 +00:00
Doug MacEachern
1a461cd85c ap_content_length_filter has already set Content-Length
before ap_set_keepalive is called.  need to remove this check
in order for keepalives to work.
PR:
Obtained from:
Submitted by:
Reviewed by:


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@90700 13f79535-47bb-0310-9956-ffa450edef68
2001-08-26 18:57:16 +00:00
William A. Rowe Jr
d9dee61f75 Readded "downgrade-1.0" which I (inadvertantly) pulled with the
map_to_storage patch.  I knew it had to have a better home, and
  it sure looks like this is it.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@90683 13f79535-47bb-0310-9956-ffa450edef68
2001-08-26 04:59:37 +00:00
William A. Rowe Jr
307ab55886 Introduce the map_to_storage hook, which allows modules to bypass
the directory_walk and file_walk for non-file requests.  TRACE
  shortcut moved to http_protocol.c as APR_HOOK_MIDDLE, and the
  directory_walk/file_walk happen as APR_HOOK_VERY_LAST in core.c.

  A seperate patch to mod_proxy is required to short circuit both the
  TRACE and directory_walk/file_walk stuff.  That patch is next.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@90665 13f79535-47bb-0310-9956-ffa450edef68
2001-08-25 23:43:19 +00:00
William A. Rowe Jr
bdaf32fa88 Downgrade must occur before we attempt to TRACE, e.g., for clients with
broken chunking.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@90658 13f79535-47bb-0310-9956-ffa450edef68
2001-08-25 17:48:52 +00:00
Cliff Woolley
95a67f5150 Just a little extra commentary...
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@90649 13f79535-47bb-0310-9956-ffa450edef68
2001-08-24 20:38:27 +00:00
Cliff Woolley
64dd7641e7 Fix a double-free condition when byterange requests are made on brigades
containing any bucket that cannot be copied natively (ie, pipe or socket
buckets).

Before, we were reading that bucket to morph it to a heap bucket and then
taking the str that heap bucket points to and placing it in a second,
completely separate heap bucket.  That means we'd have two apr_bucket/
apr_bucket_heap pairs each with a refcount of 1 (rather than two apr_buckets
and a single apr_bucket_heap with a refcount of 2).  str would then be
doubly-freed when the second of those two buckets was destroyed.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@90648 13f79535-47bb-0310-9956-ffa450edef68
2001-08-24 20:27:40 +00:00
William A. Rowe Jr
13cff90a55 Two cases we are certain of canonical correctness
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@90586 13f79535-47bb-0310-9956-ffa450edef68
2001-08-23 21:05:42 +00:00
Doug MacEachern
3ae56fb280 reverting to sterlings original segv fix when extension_mappings is NULL
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@90512 13f79535-47bb-0310-9956-ffa450edef68
2001-08-22 22:03:01 +00:00
Doug MacEachern
8a61898a77 v2 of sterlings segv fix
always initialize the extension_info hash rather than checking that it is
!= NULL
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@90510 13f79535-47bb-0310-9956-ffa450edef68
2001-08-22 20:43:30 +00:00
Doug MacEachern
4fbdccc7aa fix segv in mod_mime if no AddTypes are 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@90506 13f79535-47bb-0310-9956-ffa450edef68
2001-08-22 20:03:47 +00:00
William A. Rowe Jr
65e3920e8e Just chasing nits
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@90425 13f79535-47bb-0310-9956-ffa450edef68
2001-08-20 20:42:31 +00:00
Ryan Bloom
6fdd45dc48 Update the Apache code to account for the XtOffset change in APR.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@90356 13f79535-47bb-0310-9956-ffa450edef68
2001-08-19 05:48:19 +00:00
William A. Rowe Jr
6d654c07cd Based on the VC6 switch - and pulling the win32 make files from cvs
- some more ignores are in order.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@90274 13f79535-47bb-0310-9956-ffa450edef68
2001-08-17 07:19:08 +00:00
William A. Rowe Jr
ebf7a3fe03 Ignore goodness
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@90250 13f79535-47bb-0310-9956-ffa450edef68
2001-08-16 23:14:06 +00:00
William A. Rowe Jr
1c0c1a70a2 The two more Remove flavors needed testing, as well. While I'm at it,
add a reasonable explanation of why we are about to copy.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@90245 13f79535-47bb-0310-9956-ffa450edef68
2001-08-16 21:23:29 +00:00
William A. Rowe Jr
80d01c5861 Push back CHANGES to document the complete mod_mime segfault solution.
Rounded out the mod_mime Add/Remove pairs by adding RemoveLanguage
  and RemoveCharset directives, and rolled in the remove_items handling.
  This is (effectively) my complete patch, sans pool optimizations.
  [William Rowe]


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@90239 13f79535-47bb-0310-9956-ffa450edef68
2001-08-16 20:04:32 +00:00
William A. Rowe Jr
4a48ea1586 Build on Greg's fix for the hash copy, and always copy the exinfo elements
as well.  This should sufficiently demonstrate in benchmarking why we either
  must optimize, or revert to tables.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@90237 13f79535-47bb-0310-9956-ffa450edef68
2001-08-16 18:36:17 +00:00
Doug MacEachern
d79cea3d70 enable ssl Translate, UserCheck, Access and Auth hooks
add support for renegotiation during the Access hook
this requires hooking into the read and write SSL BIOs in order to
flush data to the client and read from the filter chain

this also requires that the ssl filters become "aware" that
renegotitation is in progress so that the BIOs are left alone for
SSL_renegotiate/SSL_do_handshake in ssl_hook_Access to deal with

PR:
Obtained from:
Submitted by:
Reviewed by:


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@90185 13f79535-47bb-0310-9956-ffa450edef68
2001-08-16 03:58:16 +00:00
William A. Rowe Jr
5e3e42e250 Solve the segfault until the right patch is unearthed.
[Greg Ames]


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@90166 13f79535-47bb-0310-9956-ffa450edef68
2001-08-15 03:09:32 +00:00
Roy T. Fielding
184c965da5 Clean up several parsing errors in find_ct that may or may not be causing
a seg fault.  In any case, it was butt ugly code.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@90150 13f79535-47bb-0310-9956-ffa450edef68
2001-08-14 02:35:55 +00:00
Ryan Bloom
6e932b2870 Fix the new method code. We need to cast 1 to an apr_int64_t or it will
be treated as a 32-bit integer, and it will wrap after being shifted
32 times.
Submitted by:	Cody Sherr <csherr@covalent.net> and
		Ryan Morgan <rmorgan@covalent.net>


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@90090 13f79535-47bb-0310-9956-ffa450edef68
2001-08-11 04:04:13 +00:00
Ryan Bloom
a2cab6eda2 This should fix the remaining problems with POST. Basically, we
add a new macro, called APR_BRIGADE_NORMALIZE.  This macro searches
all the buckets, and removes any zero length bucket.  They we can
just use APR_BRIGADE_EMPTY to determine if our brigade has any data,
and we can quickly call ap_get_brigade if it doesn't.

Doug, please throw your battery of tests at this to make sure it works.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@90070 13f79535-47bb-0310-9956-ffa450edef68
2001-08-10 18:35:08 +00:00
Ryan Bloom
4b239f39d3 If we are going to get the length of a brigade, it helps if that
brigade has data.  To that end, if we have just expanded ctx->b, we need
to concat ctx->b to the end of b, so that b has something to pass
back to the previous filter.

This fixes the problem with the proxy not proxying non-keepalive
connections.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@90046 13f79535-47bb-0310-9956-ffa450edef68
2001-08-09 04:56:23 +00:00
Ryan Bloom
9d615b23da Add a comment so that the next poor fool who re-writes this section
of code will know about this case.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@90045 13f79535-47bb-0310-9956-ffa450edef68
2001-08-09 04:25:46 +00:00
Ryan Bloom
979df5fa53 Handle the -1 case in ap_http_filter. -1 means that we have to read
all data from the socket until the socket is closed.  This has been
used to proxy www.google.com successfully, but it doesn't return anything
when used with www.yahoo.com.  Still debugging that problem.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@90044 13f79535-47bb-0310-9956-ffa450edef68
2001-08-09 04:21:26 +00:00
Ryan Bloom
6513c027a7 Remove the block argument from apr_brigade_partition. This looked good
in theory, but in reality, we should just rely on the timeouts to handle
this.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@90043 13f79535-47bb-0310-9956-ffa450edef68
2001-08-08 22:24:04 +00:00
Ryan Bloom
0e959b94c7 Re-apply the patch from yesterday that makes ap_http_filter use
apr_brigade_partition.  In order to do this cleanly, I had to make
some changes to the apr_brigade_partition API, so this also adds fixes
all of the calls to that function throughout the server.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@90029 13f79535-47bb-0310-9956-ffa450edef68
2001-08-08 15:42:08 +00:00
Doug MacEachern
3712a19778 this change breaks POST, backing out for the moment
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@90003 13f79535-47bb-0310-9956-ffa450edef68
2001-08-07 19:54:06 +00:00
William A. Rowe Jr
cd6a44feef Must return something in the 2^32 domain (preferably one, as shown here),
not in the 2^64 domain.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@89998 13f79535-47bb-0310-9956-ffa450edef68
2001-08-07 18:37:04 +00:00
Ryan Bloom
9fc8386d20 Greatly simplify the ap_http_filter logic, by using the
apr_brigade_partition function.  This should also remove a warning from
the Windows build, because apr_off_t and apr_size_t aren't the same
size.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@89997 13f79535-47bb-0310-9956-ffa450edef68
2001-08-07 17:57:44 +00:00
William A. Rowe Jr
58c8930a02 Just cleaning up some indents
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@89991 13f79535-47bb-0310-9956-ffa450edef68
2001-08-07 16:40:29 +00:00
Ryan Bloom
cf2e6a1831 Remove all warnings from the input filtering stack.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@89987 13f79535-47bb-0310-9956-ffa450edef68
2001-08-07 16:19:03 +00:00
William A. Rowe Jr
ff7a816bf5 Remove the ->mtime reset back to negotiation, who decided to do this.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@89949 13f79535-47bb-0310-9956-ffa450edef68
2001-08-06 19:13:02 +00:00
William A. Rowe Jr
5835764fc8 _THIS_ is why mod_dir wouldn't serve the results of mod_negotiation
with a query string


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@89948 13f79535-47bb-0310-9956-ffa450edef68
2001-08-06 19:10:12 +00:00
William A. Rowe Jr
68eb2c2c83 The real slim shady finally stood up. This patch segregates the fast
internal redirect logic back into http_request, the next patch will
  actually fix it.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@89946 13f79535-47bb-0310-9956-ffa450edef68
2001-08-06 19:03:37 +00:00