You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by yl...@apache.org on 2014/12/06 15:33:52 UTC

svn commit: r1643537 - in /httpd/httpd/trunk: CHANGES docs/log-message-tags/next-number modules/proxy/mod_proxy_ajp.c

Author: ylavic
Date: Sat Dec  6 14:33:52 2014
New Revision: 1643537

URL: http://svn.apache.org/r1643537
Log:
* mod_proxy_ajp: Fix client connection errors handling and logged status
when it occurs.  PR 56823.

Modified:
    httpd/httpd/trunk/CHANGES
    httpd/httpd/trunk/docs/log-message-tags/next-number
    httpd/httpd/trunk/modules/proxy/mod_proxy_ajp.c

Modified: httpd/httpd/trunk/CHANGES
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/CHANGES?rev=1643537&r1=1643536&r2=1643537&view=diff
==============================================================================
--- httpd/httpd/trunk/CHANGES [utf-8] (original)
+++ httpd/httpd/trunk/CHANGES [utf-8] Sat Dec  6 14:33:52 2014
@@ -1,6 +1,9 @@
                                                          -*- coding: utf-8 -*-
 Changes with Apache 2.5.0
   
+  *) mod_proxy_ajp: Fix client connection errors handling and logged status
+     when it occurs.  PR 56823.  [Yann Ylavic]
+
   *) ap_expr: Add filemod function for checking file modification dates
      [Daniel Gruno]
      

Modified: httpd/httpd/trunk/docs/log-message-tags/next-number
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/docs/log-message-tags/next-number?rev=1643537&r1=1643536&r2=1643537&view=diff
==============================================================================
--- httpd/httpd/trunk/docs/log-message-tags/next-number (original)
+++ httpd/httpd/trunk/docs/log-message-tags/next-number Sat Dec  6 14:33:52 2014
@@ -1 +1 @@
-2821
+2823

Modified: httpd/httpd/trunk/modules/proxy/mod_proxy_ajp.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/proxy/mod_proxy_ajp.c?rev=1643537&r1=1643536&r2=1643537&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/proxy/mod_proxy_ajp.c (original)
+++ httpd/httpd/trunk/modules/proxy/mod_proxy_ajp.c Sat Dec  6 14:33:52 2014
@@ -186,7 +186,7 @@ static int ap_proxy_ajp_request(apr_pool
     int data_sent = 0;
     int request_ended = 0;
     int headers_sent = 0;
-    int rv = 0;
+    int rv = OK;
     apr_int32_t conn_poll_fd;
     apr_pollfd_t *conn_poll;
     proxy_server_conf *psf =
@@ -394,6 +394,9 @@ static int ap_proxy_ajp_request(apr_pool
                         if (status != APR_SUCCESS) {
                             ap_log_rerror(APLOG_MARK, APLOG_DEBUG, status, r, APLOGNO(00880)
                                           "ap_get_brigade failed");
+                            if (APR_STATUS_IS_TIMEUP(status)) {
+                                rv = HTTP_REQUEST_TIME_OUT;
+                            }
                             output_failed = 1;
                             break;
                         }
@@ -404,6 +407,7 @@ static int ap_proxy_ajp_request(apr_pool
                         if (status != APR_SUCCESS) {
                             ap_log_rerror(APLOG_MARK, APLOG_DEBUG, status, r, APLOGNO(00881)
                                          "apr_brigade_flatten failed");
+                            rv = HTTP_INTERNAL_SERVER_ERROR;
                             output_failed = 1;
                             break;
                         }
@@ -559,15 +563,19 @@ static int ap_proxy_ajp_request(apr_pool
 
         /*
          * If connection has been aborted by client: Stop working.
-         * Nevertheless, we regard our operation so far as a success:
-         * So reset output_failed to 0 and set result to CMD_AJP13_END_RESPONSE
-         * But: Close this connection to the backend.
+         * Pretend we are done (data_sent) to avoid further processing.
          */
         if (r->connection->aborted) {
-            conn->close = 1;
-            output_failed = 0;
-            result = CMD_AJP13_END_RESPONSE;
-            request_ended = 1;
+            ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(02821)
+                          "client connection aborted");
+            /* no response yet (or ever), set status for access log */
+            if (!headers_sent) {
+                r->status = HTTP_BAD_REQUEST;
+            }
+            /* return DONE */
+            output_failed = 1;
+            data_sent = 1;
+            break;
         }
 
         /*
@@ -677,6 +685,14 @@ static int ap_proxy_ajp_request(apr_pool
             }
         }
     }
+    else if (output_failed) {
+        ap_log_rerror(APLOG_MARK, APLOG_ERR, status, r, APLOGNO(02822)
+                      "dialog with client %pI failed",
+                      r->connection->client_addr);
+        if (rv == OK) {
+            rv = HTTP_BAD_REQUEST;
+        }
+    }
 
     /*
      * Ensure that we sent an EOS bucket thru the filter chain, if we already
@@ -684,7 +700,8 @@ static int ap_proxy_ajp_request(apr_pool
      * one to the brigade already (no longer making it empty). So we should
      * not do this in this case.
      */
-    if (data_sent && !r->eos_sent && APR_BRIGADE_EMPTY(output_brigade)) {
+    if (data_sent && !r->eos_sent && !r->connection->aborted
+            && APR_BRIGADE_EMPTY(output_brigade)) {
         e = apr_bucket_eos_create(r->connection->bucket_alloc);
         APR_BRIGADE_INSERT_TAIL(output_brigade, e);
     }



Re: svn commit: r1643537 - in /httpd/httpd/trunk: CHANGES docs/log-message-tags/next-number modules/proxy/mod_proxy_ajp.c

Posted by Yann Ylavic <yl...@gmail.com>.
On Sat, Dec 6, 2014 at 3:44 PM, Eric Covener <co...@gmail.com> wrote:
> On Sat, Dec 6, 2014 at 9:33 AM,  <yl...@apache.org> wrote:
>> +    else if (output_failed) {
>> +        ap_log_rerror(APLOG_MARK, APLOG_ERR, status, r, APLOGNO(02822)
>> +                      "dialog with client %pI failed",
>> +                      r->connection->client_addr);
>> +        if (rv == OK) {
>> +            rv = HTTP_BAD_REQUEST;
>> +        }
>> +    }
>
> From memory/spot-checking, I think this would make c->aborted errors
> noisier when they happen to be handled by proxy_ajp.

Agreed, fixed in r1643543.

Thanks,
Yann.

Re: svn commit: r1643537 - in /httpd/httpd/trunk: CHANGES docs/log-message-tags/next-number modules/proxy/mod_proxy_ajp.c

Posted by Eric Covener <co...@gmail.com>.
On Sat, Dec 6, 2014 at 9:33 AM,  <yl...@apache.org> wrote:
> +    else if (output_failed) {
> +        ap_log_rerror(APLOG_MARK, APLOG_ERR, status, r, APLOGNO(02822)
> +                      "dialog with client %pI failed",
> +                      r->connection->client_addr);
> +        if (rv == OK) {
> +            rv = HTTP_BAD_REQUEST;
> +        }
> +    }

>From memory/spot-checking, I think this would make c->aborted errors
noisier when they happen to be handled by proxy_ajp.




-- 
Eric Covener
covener@gmail.com