From 1e0933500a794e4723f42e846ba90a9663433eb9 Mon Sep 17 00:00:00 2001
From: Remi Collet <fedora@famillecollet.com>
Date: Sun, 16 Nov 2014 10:01:56 +0100
Subject: PHP 5.5.19 + upstream patches for php-fpm

---
 php-bug68420.patch | 53 ++++++++++++++++++++++++++++++++++++++++
 php-bug68421.patch | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 php-bug68423.patch | 55 +++++++++++++++++++++++++++++++++++++++++
 php55.spec         | 16 +++++++++++-
 4 files changed, 195 insertions(+), 1 deletion(-)
 create mode 100644 php-bug68420.patch
 create mode 100644 php-bug68421.patch
 create mode 100644 php-bug68423.patch

diff --git a/php-bug68420.patch b/php-bug68420.patch
new file mode 100644
index 0000000..0191244
--- /dev/null
+++ b/php-bug68420.patch
@@ -0,0 +1,53 @@
+From 1d9bb287c566425a9ab4b8de62940565fe357270 Mon Sep 17 00:00:00 2001
+From: Remi Collet <remi@php.net>
+Date: Sat, 15 Nov 2014 08:08:23 +0100
+Subject: [PATCH] Fixed Bug #68420 listen=9000 listens to ipv6 localhost
+ instead of all addresses
+
+Restore default behavior when no address configured:
+Listen on all IPv4 addresses.
+
+At some time we could consider to switch to all IPv6
+but this will be a BC break.
+---
+ sapi/fpm/fpm/fpm_sockets.c | 24 +++++++++++++++++-------
+ 1 file changed, 17 insertions(+), 7 deletions(-)
+
+diff --git a/sapi/fpm/fpm/fpm_sockets.c b/sapi/fpm/fpm/fpm_sockets.c
+index 3e4f09c..9d9def3 100644
+--- a/sapi/fpm/fpm/fpm_sockets.c
++++ b/sapi/fpm/fpm/fpm_sockets.c
+@@ -274,13 +274,23 @@ static int fpm_socket_af_inet_listening_socket(struct fpm_worker_pool_s *wp) /*
+ 		return -1;
+ 	}
+ 
+-	// strip brackets from address for getaddrinfo
+-	if (addr != NULL) {
+-		addr_len = strlen(addr);
+-		if (addr[0] == '[' && addr[addr_len - 1] == ']') {
+-			addr[addr_len - 1] = '\0';
+-			addr++;
+-		}
++	if (!addr) {
++		/* no address: default documented behavior, all IPv4 addresses */
++		struct sockaddr_in sa_in;
++
++		memset(&sa_in, 0, sizeof(sa_in));
++		sa_in.sin_family = AF_INET;
++		sa_in.sin_port = htons(port);
++		sa_in.sin_addr.s_addr = htonl(INADDR_ANY);
++		free(dup_address);
++		return fpm_sockets_get_listening_socket(wp, (struct sockaddr *) &sa_in, sizeof(struct sockaddr_in));
++	}
++
++	/* strip brackets from address for getaddrinfo */
++	addr_len = strlen(addr);
++	if (addr[0] == '[' && addr[addr_len - 1] == ']') {
++		addr[addr_len - 1] = '\0';
++		addr++;
+ 	}
+ 
+ 	memset(&hints, 0, sizeof hints);
+-- 
+2.1.0
+
diff --git a/php-bug68421.patch b/php-bug68421.patch
new file mode 100644
index 0000000..0f59efd
--- /dev/null
+++ b/php-bug68421.patch
@@ -0,0 +1,72 @@
+From 5112fdd670175f4eab4529c84ccf4774f5577797 Mon Sep 17 00:00:00 2001
+From: Remi Collet <remi@php.net>
+Date: Fri, 14 Nov 2014 19:09:50 +0100
+Subject: [PATCH] Fix bug #68421 access.format='%R' doesn't log ipv6 address
+
+---
+ sapi/fpm/fpm/fastcgi.c | 10 ++++++++--
+ sapi/fpm/fpm/fastcgi.h |  2 +-
+ sapi/fpm/fpm/fpm_log.c |  2 +-
+ 3 files changed, 10 insertions(+), 4 deletions(-)
+
+diff --git a/sapi/fpm/fpm/fastcgi.c b/sapi/fpm/fpm/fastcgi.c
+index d77b6f8..86fca17 100644
+--- a/sapi/fpm/fpm/fastcgi.c
++++ b/sapi/fpm/fpm/fastcgi.c
+@@ -137,6 +137,7 @@ typedef union _sa_t {
+ 	struct sockaddr     sa;
+ 	struct sockaddr_un  sa_unix;
+ 	struct sockaddr_in  sa_inet;
++	struct sockaddr_in6 sa_inet6;
+ } sa_t;
+ 
+ static HashTable fcgi_mgmt_vars;
+@@ -1094,12 +1095,17 @@ void fcgi_free_mgmt_var_cb(void * ptr)
+ 	pefree(*var, 1);
+ }
+ 
+-char *fcgi_get_last_client_ip() /* {{{ */
++const char *fcgi_get_last_client_ip() /* {{{ */
+ {
++	static char str[INET6_ADDRSTRLEN];
++
+ 	if (client_sa.sa.sa_family == AF_UNIX) {
+ 		return NULL;
+ 	}
+-	return inet_ntoa(client_sa.sa_inet.sin_addr);
++	if (client_sa.sa.sa_family == AF_INET) {
++		return inet_ntop(client_sa.sa.sa_family, &client_sa.sa_inet.sin_addr, str, INET6_ADDRSTRLEN);
++	}
++	return inet_ntop(client_sa.sa.sa_family, &client_sa.sa_inet6.sin6_addr, str, INET6_ADDRSTRLEN);
+ }
+ /* }}} */
+ /*
+diff --git a/sapi/fpm/fpm/fastcgi.h b/sapi/fpm/fpm/fastcgi.h
+index 34f9eef..f5cfe9f 100644
+--- a/sapi/fpm/fpm/fastcgi.h
++++ b/sapi/fpm/fpm/fastcgi.h
+@@ -133,7 +133,7 @@ int fcgi_flush(fcgi_request *req, int close);
+ void fcgi_set_mgmt_var(const char * name, size_t name_len, const char * value, size_t value_len);
+ void fcgi_free_mgmt_var_cb(void * ptr);
+ 
+-char *fcgi_get_last_client_ip();
++const char *fcgi_get_last_client_ip();
+ 
+ /*
+  * Local variables:
+diff --git a/sapi/fpm/fpm/fpm_log.c b/sapi/fpm/fpm/fpm_log.c
+index 4e1a057..c71281b 100644
+--- a/sapi/fpm/fpm/fpm_log.c
++++ b/sapi/fpm/fpm/fpm_log.c
+@@ -367,7 +367,7 @@ int fpm_log_write(char *log_format TSRMLS_DC) /* {{{ */
+ 
+ 				case 'R': /* remote IP address */
+ 					if (!test) {
+-						char *tmp = fcgi_get_last_client_ip();
++						const char *tmp = fcgi_get_last_client_ip();
+ 						len2 = snprintf(b, FPM_LOG_BUFFER - len, "%s", tmp ? tmp : "-");
+ 					}
+ 					break;
+-- 
+2.1.0
+
diff --git a/php-bug68423.patch b/php-bug68423.patch
new file mode 100644
index 0000000..34ba57a
--- /dev/null
+++ b/php-bug68423.patch
@@ -0,0 +1,55 @@
+From 23db11976889c3600cf7853fe0fd687a1c9435e6 Mon Sep 17 00:00:00 2001
+From: Remi Collet <remi@php.net>
+Date: Fri, 14 Nov 2014 17:29:31 +0100
+Subject: [PATCH] Fix bug #68423i PHP-FPM will no longer load all pools
+
+The hash need to be unique per IP + Port
+Previous version have (IPv4 only)
+   sprintf(key, "%u.%u.%u.%u:%u", IPQUAD(&sa_in->sin_addr), (unsigned int) ntohs(sa_in->sin_port));
+---
+ sapi/fpm/fpm/fpm_sockets.c | 17 ++++++++++++++---
+ 1 file changed, 14 insertions(+), 3 deletions(-)
+
+diff --git a/sapi/fpm/fpm/fpm_sockets.c b/sapi/fpm/fpm/fpm_sockets.c
+index da14d63..3e4f09c 100644
+--- a/sapi/fpm/fpm/fpm_sockets.c
++++ b/sapi/fpm/fpm/fpm_sockets.c
+@@ -85,13 +85,24 @@ static void *fpm_get_in_addr(struct sockaddr *sa) /* {{{ */
+ }
+ /* }}} */
+ 
++static int fpm_get_in_port(struct sockaddr *sa) /* {{{ */
++{
++    if (sa->sa_family == AF_INET) {
++        return ntohs(((struct sockaddr_in*)sa)->sin_port);
++    }
++
++    return ntohs(((struct sockaddr_in6*)sa)->sin6_port);
++}
++/* }}} */
++
+ static int fpm_sockets_hash_op(int sock, struct sockaddr *sa, char *key, int type, int op) /* {{{ */
+ {
+ 	if (key == NULL) {
+ 		switch (type) {
+ 			case FPM_AF_INET : {
+-				key = alloca(INET6_ADDRSTRLEN);
+-				inet_ntop(sa->sa_family, fpm_get_in_addr(sa), key, sizeof key);
++				key = alloca(INET6_ADDRSTRLEN+10);
++				inet_ntop(sa->sa_family, fpm_get_in_addr(sa), key, INET6_ADDRSTRLEN);
++				sprintf(key+strlen(key), ":%d", fpm_get_in_port(sa));
+ 				break;
+ 			}
+ 
+@@ -246,7 +257,7 @@ static int fpm_socket_af_inet_listening_socket(struct fpm_worker_pool_s *wp) /*
+ 	char *addr = NULL;
+ 	int addr_len;
+ 	int port = 0;
+-	int sock;
++	int sock = -1;
+ 	int status;
+ 
+ 	if (port_str) { /* this is host:port pair */
+-- 
+2.1.0
+
diff --git a/php55.spec b/php55.spec
index 7285d10..4284a6c 100644
--- a/php55.spec
+++ b/php55.spec
@@ -128,7 +128,7 @@ Version: 5.5.19
 %if 0%{?snapdate:1}%{?rcver:1}
 Release: 0.1.%{?snapdate}%{?rcver}%{?dist}
 %else
-Release: 1%{?dist}
+Release: 2%{?dist}
 %endif
 # All files licensed under PHP version 3.01, except
 # Zend is licensed under Zend
@@ -189,6 +189,9 @@ Patch47: php-5.4.9-phpinfo.patch
 Patch91: php-5.3.7-oci8conf.patch
 
 # Upstream fixes (100+)
+Patch101: php-bug68423.patch
+Patch102: php-bug68421.patch
+Patch103: php-bug68420.patch
 
 # Security fixes (200+)
 
@@ -940,6 +943,9 @@ rm -rf ext/json
 %patch91 -p1 -b .remi-oci8
 
 # upstream patches
+%patch101 -p1 -b .bug68423
+%patch102 -p1 -b .bug68421
+%patch103 -p1 -b .bug68420
 
 # security patches
 
@@ -1943,6 +1949,14 @@ fi
 
 
 %changelog
+* Sun Nov 16 2014 Remi Collet <remi@fedoraproject.org> 5.5.19-2
+- FPM: add upstream patch for https://bugs.php.net/68421
+  access.format=R doesn't log ipv6 address
+- FPM: add upstream patch for https://bugs.php.net/68420
+  listen=9000 listens to ipv6 localhost instead of all addresses
+- FPM: add upstream patch for https://bugs.php.net/68423
+  will no longer load all pools
+
 * Thu Nov 13 2014 Remi Collet <remi@fedoraproject.org> 5.5.19-1
 - Update to 5.5.19
   http://www.php.net/releases/5_5_19.php
-- 
cgit