Hello,

Credit goes to David Dankwerth for supplying this patch.
It is meant to abort an http connection if the content length value exceeds a
predefined value.
The predefined value can be specified in apache's httpd.conf by using the
LimitRequestBody directive.

F.e.:
LimitRequestBody 10000
JkEnvVar JkLimitRequestBody apache
will limit the request to 10K.

Apache will throw a 413 error when the limit has been exceeded so you can
define an ErrorDocument in httpd.conf to show up an informative page indicating
the error.

Anyway, it's been a real and helpful solution for me and I was wondering if the
author would consider using it? :)

See attachment for a diff on the original v1.23 source.


Greetings, Philippe.
1326,1330d1325
<  * this function will also check the request length , if the length exceeds
<  * the limit set by JkEnvVar JkLimitRequestBody (values are a number[bytes]
<  * or apache to mark the use of LimitRequestBody , then this function will
<  * decline the request (to aviod Unrecoverable errors)
<  * added by David Dankwerth and David Brewster of ri3k
1333,1336c1328,1329
< {
<  
<         char *worker = NULL  ;
<     if(!r->proxyreq) {
---
> {    
>     if(!r->proxyreq) {        
1339c1332
<  
---
> 
1341,1395c1334,1335
<                         worker = map_uri_to_worker(conf->uw_map,
<                                                                            r->uri,
<                                        conf->log ? conf->log : main_log);
<  
<                         // check if there is a contect length in the request (might 
not have !)
<                         if ( ap_table_get(r->headers_in, "Content-Length") != NULL )
<                         {
<                                 long requestLength = 
atol(ap_table_get(r->headers_in, "Content-Length")) ;
<                                 if (requestLength != 0 )
<                                 {
<                                         server_rec *s = r->server;
<                                         jk_server_conf_t *conf =
<                                         (jk_server_conf_t 
*)ap_get_module_config(s->module_config, &jk_module);
<  
<                                         jk_logger_t *l = conf->log ? conf->log : 
main_log;
<  
<                                         long max = 0 ;
<                                         // get the defenition from the JkEnvVar 
JkLimitRequestBody
<                                         const char* maxLength= 
ap_table_get(conf->envvars,"JkLimitRequestBody");
<                                         // apachs LimitRequestBody Value
<                                         long apacheLimit = ap_get_limit_req_body(r) ;
<                                         jk_log(l, JK_LOG_DEBUG,
<                                                         "mod_jk :: Apache 
LimitRequestBody is %d \n",apacheLimit);
<  
<  
<                                         if (maxLength != NULL )
<                                         {
<                                                 // check if to use apache's limit
<                                                 if (0 == strcmp("apache",maxLength))
<                                                         max = apacheLimit ;
<                                                 else
<                                                         max = atol(maxLength) ;
<                                         }
<  
<  
<                                     jk_log(l, JK_LOG_DEBUG,
<                                            "mod_jk:: AllowedRequestSize is  %d , 
current Request %d\n",max,requestLength);
<  
<                                         // if max defined is 0 allow
<                                         if (max == 0 || requestLength <  max )
<                                         {
<                                             jk_log(l, JK_LOG_DEBUG,
<                                                    "mod_jk:: Request authorized to 
pass length limitation");
<  
<                                         }
<                                         else
<                                         {
<  
<                                             jk_log(l, JK_LOG_DEBUG,
<                                                    "mod_jk:: Request declined to 
pass length limitation");
<                                                 return DECLINED ;
<                                         }
<                                 }
<                         }
<  
---
>             char *worker = map_uri_to_worker(conf->uw_map, r->uri, conf->log ? 
>conf->log : main_log);
> 
1402c1342
<  
---
> 

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to