You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by rp...@apache.org on 2016/07/20 18:25:01 UTC
svn commit: r1753592 - in /httpd/httpd/trunk: CHANGES
modules/proxy/mod_proxy.c
Author: rpluem
Date: Wed Jul 20 18:25:01 2016
New Revision: 1753592
URL: http://svn.apache.org/viewvc?rev=1753592&view=rev
Log:
* Do not overwrite r->status with access_status if access_status is OK or DONE
as in this case r->status might contain the true response code.
PR: 59869
Modified:
httpd/httpd/trunk/CHANGES
httpd/httpd/trunk/modules/proxy/mod_proxy.c
Modified: httpd/httpd/trunk/CHANGES
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/CHANGES?rev=1753592&r1=1753591&r2=1753592&view=diff
==============================================================================
--- httpd/httpd/trunk/CHANGES [utf-8] (original)
+++ httpd/httpd/trunk/CHANGES [utf-8] Wed Jul 20 18:25:01 2016
@@ -1,6 +1,9 @@
-*- coding: utf-8 -*-
Changes with Apache 2.5.0
+ *) mo_proxy: Correctly consider error response codes by the backend when
+ processing failonstatus. PR 59869 [Ruediger Pluem]
+
*) mod_http2: new H2CopyFiles directive that changes treatment of file
handles in responses. Necessary in order to fix broken lifetime handling
in modules such as mod_wsgi.
Modified: httpd/httpd/trunk/modules/proxy/mod_proxy.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/proxy/mod_proxy.c?rev=1753592&r1=1753591&r2=1753592&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/proxy/mod_proxy.c (original)
+++ httpd/httpd/trunk/modules/proxy/mod_proxy.c Wed Jul 20 18:25:01 2016
@@ -1273,16 +1273,24 @@ cleanup:
* the error page on the proxy or if the error was not generated by the
* backend itself but by the proxy e.g. a bad gateway) in order to give
* ap_proxy_post_request a chance to act correctly on the status code.
+ * But only do the above if access_status is not OK and not DONE, because
+ * in this case r->status might contain the true status and overwriting
+ * it with OK or DONE would be wrong.
*/
- saved_status = r->status;
- r->status = access_status;
- ap_proxy_post_request(worker, balancer, r, conf);
- /*
- * Only restore r->status if it has not been changed by
- * ap_proxy_post_request as we assume that this change was intentional.
- */
- if (r->status == access_status) {
- r->status = saved_status;
+ if ((access_status != OK) && (access_status != DONE)) {
+ saved_status = r->status;
+ r->status = access_status;
+ ap_proxy_post_request(worker, balancer, r, conf);
+ /*
+ * Only restore r->status if it has not been changed by
+ * ap_proxy_post_request as we assume that this change was intentional.
+ */
+ if (r->status == access_status) {
+ r->status = saved_status;
+ }
+ }
+ else {
+ ap_proxy_post_request(worker, balancer, r, conf);
}
proxy_run_request_status(&access_status, r);