You are viewing a plain text version of this content. The canonical link for it is here.
Posted to bugs@httpd.apache.org by bu...@apache.org on 2016/07/18 07:51:45 UTC

[Bug 59869] mod_proxy failonstatus option is broken since 2.4.17 on Solaris 10

https://bz.apache.org/bugzilla/show_bug.cgi?id=59869

--- Comment #1 from Ruediger Pluem <rp...@apache.org> ---
Created attachment 34050
  --> https://bz.apache.org/bugzilla/attachment.cgi?id=34050&action=edit
Patch against trunk

Does the attached patch against trunk (applies to 2.4.x with offset) fix your
problem?

Index: modules/proxy/mod_proxy.c
===================================================================
--- modules/proxy/mod_proxy.c   (revision 1753164)
+++ modules/proxy/mod_proxy.c   (working copy)
@@ -1273,17 +1273,25 @@
      * 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 or 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);
     AP_PROXY_RUN_FINISHED(r, attempts, access_status);

-- 
You are receiving this mail because:
You are the assignee for the bug.

---------------------------------------------------------------------
To unsubscribe, e-mail: bugs-unsubscribe@httpd.apache.org
For additional commands, e-mail: bugs-help@httpd.apache.org