summaryrefslogtreecommitdiffstats
path: root/php-bug62172.patch
blob: 81ccc353de929587c072fadb9dd545273b8f45ef (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
From 07d2dcdf09fcfbd617031bd341384efb236de12c Mon Sep 17 00:00:00 2001
From: Remi Collet <remi@php.net>
Date: Fri, 29 Jan 2016 10:20:42 +0100
Subject: [PATCH] Fixed Bug #62172 FPM not working with Apache httpd 2.4
 balancer/fcgi setup

Only needed with Apache version < 2.4.12 (ex RHEL-7)
---
 sapi/fpm/fpm/fpm_main.c | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/sapi/fpm/fpm/fpm_main.c b/sapi/fpm/fpm/fpm_main.c
index f3c8ccc..d12ac01 100644
--- a/sapi/fpm/fpm/fpm_main.c
+++ b/sapi/fpm/fpm/fpm_main.c
@@ -1108,11 +1108,14 @@ static void init_request_info(TSRMLS_D)
 		}
 
 #define APACHE_PROXY_FCGI_PREFIX "proxy:fcgi://"
-		/* Fix proxy URLs in SCRIPT_FILENAME generated by Apache mod_proxy_fcgi:
+#define APACHE_PROXY_BALANCER_PREFIX "proxy:balancer://"
+		/* Fix proxy URLs in SCRIPT_FILENAME generated by Apache mod_proxy_fcgi and mod_proxy_balancer:
 		 *     proxy:fcgi://localhost:9000/some-dir/info.php/test?foo=bar
+		 *     proxy:balancer://localhost:9000/some-dir/info.php/test?foo=bar
 		 * should be changed to:
 		 *     /some-dir/info.php/test
 		 * See: http://bugs.php.net/bug.php?id=54152
+		 *      http://bugs.php.net/bug.php?id=62172
 		 *      https://issues.apache.org/bugzilla/show_bug.cgi?id=50851
 		 */
 		if (env_script_filename &&
@@ -1136,6 +1139,27 @@ static void init_request_info(TSRMLS_D)
 			}
 		}
 
+		if (env_script_filename &&
+			strncasecmp(env_script_filename, APACHE_PROXY_BALANCER_PREFIX, sizeof(APACHE_PROXY_BALANCER_PREFIX) - 1) == 0) {
+			/* advance to first character of hostname */
+			char *p = env_script_filename + (sizeof(APACHE_PROXY_BALANCER_PREFIX) - 1);
+			while (*p != '\0' && *p != '/') {
+				p++;	/* move past hostname and port */
+			}
+			if (*p != '\0') {
+				/* Copy path portion in place to avoid memory leak.  Note
+				 * that this also affects what script_path_translated points
+				 * to. */
+				memmove(env_script_filename, p, strlen(p) + 1);
+				apache_was_here = 1;
+			}
+			/* ignore query string if sent by Apache (RewriteRule) */
+			p = strchr(env_script_filename, '?');
+			if (p) {
+				*p =0;
+			}
+		}
+
 		if (CGIG(fix_pathinfo)) {
 			struct stat st;
 			char *real_path = NULL;