httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Greg Stein <gst...@lyra.org>
Subject Re: cvs commit: apache-2.0/src/main http_core.c
Date Thu, 02 Nov 2000 20:57:58 GMT
Woah! Wait a sec.

Why is this done? discard_request_body() will already do this. And you
really need to discard the body for *any* method, not just POST methods.

If I send a PROPFIND method, and it ends up at the default handler, then the
PROPFIND body better get thrown out.

I don't understand two things with this patch:

1) why there is a new function to duplicate what discard does
2) why it gets used on a POST instead of the standard discard

Cheers,
-g

On Thu, Nov 02, 2000 at 08:48:53PM -0000, sascha@locus.apache.org wrote:
> sascha      00/11/02 12:48:51
> 
>   Modified:    src/main http_core.c
>   Log:
>   Make the default handler read the dechunked request body on a POST request.
>   
>   Revision  Changes    Path
>   1.194     +25 -15    apache-2.0/src/main/http_core.c
>   
>   Index: http_core.c
>   ===================================================================
>   RCS file: /home/cvs/apache-2.0/src/main/http_core.c,v
>   retrieving revision 1.193
>   retrieving revision 1.194
>   diff -u -u -r1.193 -r1.194
>   --- http_core.c	2000/11/02 20:33:48	1.193
>   +++ http_core.c	2000/11/02 20:48:48	1.194
>   @@ -2912,14 +2912,25 @@
>    
>    static int do_nothing(request_rec *r) { return OK; }
>    
>   -/*
>   - * Default handler for MIME types without other handlers.  Only GET
>   - * and OPTIONS at this point... anyone who wants to write a generic
>   - * handler for PUT or POST is free to do so, but it seems unwise to provide
>   - * any defaults yet... So, for now, we assume that this will always be
>   - * the last handler called and return 405 or 501.
>   - */
>   +#define POST_CHUNK_SIZE 4096
>    
>   +static int handle_request_body(request_rec *r)
>   +{
>   +    int rv;
>   +    char buf[POST_CHUNK_SIZE];
>   +    long n;
>   +
>   +    if ((rv = ap_setup_client_block(r, REQUEST_CHUNKED_DECHUNK)))
>   +        return rv;
>   +
>   +    if ((rv = ap_should_client_block(r)) == 0)
>   +        return APR_SUCCESS;
>   +
>   +    while ((n = ap_get_client_block(r, buf, POST_CHUNK_SIZE)) > 0);
>   +
>   +    return APR_SUCCESS;
>   +}
>   +
>    static int default_handler(request_rec *r)
>    {
>        core_dir_config *d =
>   @@ -2940,13 +2951,6 @@
>        int bld_content_md5 = 
>            (d->content_md5 & 1) && r->output_filters->frec->ftype
!= AP_FTYPE_CONTENT;
>    
>   -    /* This handler has no use for a request body (yet), but we still
>   -     * need to read and discard it if the client sent one.
>   -     */
>   -    if ((errstatus = ap_discard_request_body(r)) != OK) {
>   -        return errstatus;
>   -    }
>   -
>        ap_allow_methods(r, MERGE_ALLOW, "GET", "OPTIONS", NULL);
>    
>        if (r->method_number == M_INVALID) {
>   @@ -2967,7 +2971,13 @@
>    		      : r->filename);
>    	return HTTP_NOT_FOUND;
>        }
>   -    if (r->method_number != M_GET) {
>   +    if (r->method_number == M_POST) {
>   +        if ((errstatus = handle_request_body(r)) != APR_SUCCESS) {
>   +            return errstatus;
>   +        }
>   +    } else if ((errstatus = ap_discard_request_body(r)) != OK) {
>   +        return errstatus;
>   +    } else if (r->method_number != M_GET) {
>            return HTTP_METHOD_NOT_ALLOWED;
>        }
>    	
>   
>   
>   

-- 
Greg Stein, http://www.lyra.org/

Mime
View raw message