rebase to 8.2.13

add %__phpize and %__phpconfig macros
move httpd/nginx wants directives to config files in /etc
php-fpm.conf: move include directive after [global] section
  following upstream example, allowing overriding
use SPDX license IDs

Related: RHEL-14705
This commit is contained in:
Remi Collet 2023-11-27 11:35:33 +01:00
parent b65897eacf
commit 1590c3d26a
17 changed files with 1304 additions and 2182 deletions

2
.gitignore vendored
View File

@ -12,3 +12,5 @@ php-7.4*.xz*
/php-8.0.20.tar.xz.asc /php-8.0.20.tar.xz.asc
/php-8.0.27.tar.xz /php-8.0.27.tar.xz
/php-8.0.27.tar.xz.asc /php-8.0.27.tar.xz.asc
/php-8.2.13.tar.xz
/php-8.2.13.tar.xz.asc

View File

@ -115,7 +115,12 @@ opcache.blacklist_filename=/etc/php.d/opcache*.blacklist
;opcache.file_cache_fallback=1 ;opcache.file_cache_fallback=1
; Enables or disables copying of PHP code (text segment) into HUGE PAGES. ; Enables or disables copying of PHP code (text segment) into HUGE PAGES.
; This should improve performance, but requires appropriate OS configuration. ; Under certain circumstances (if only a single global PHP process is
; started from which all others fork), this can increase performance
; by a tiny amount because TLB misses are reduced. On the other hand, this
; delays PHP startup, increases memory usage and degrades performance
; under memory pressure - use with care.
; Requires appropriate OS configuration.
opcache.huge_code_pages=0 opcache.huge_code_pages=0
; Validate cached file permissions. ; Validate cached file permissions.
@ -136,12 +141,12 @@ opcache.huge_code_pages=0
; Specifies a PHP script that is going to be compiled and executed at server ; Specifies a PHP script that is going to be compiled and executed at server
; start-up. ; start-up.
; http://php.net/opcache.preload ; https://php.net/opcache.preload
;opcache.preload= ;opcache.preload=
; Preloading code as root is not allowed for security reasons. This directive ; Preloading code as root is not allowed for security reasons. This directive
; facilitates to let the preloading to be run as another user. ; facilitates to let the preloading to be run as another user.
; http://php.net/opcache.preload_user ; https://php.net/opcache.preload_user
;opcache.preload_user= ;opcache.preload_user=
; Prevents caching files that are less than this number of seconds old. It ; Prevents caching files that are less than this number of seconds old. It

View File

@ -18,4 +18,10 @@
%__php %{_bindir}/php %__php %{_bindir}/php
%__ztsphp %{_bindir}/zts-php %__ztsphp %{_bindir}/zts-php
%__phpize %{_bindir}/phpize
%__ztsphpize %{_bindir}/zts-phpize
%__phpconfig %{_bindir}/php-config
%__ztsphpconfig %{_bindir}/zts-php-config
%pecl_xmldir %{_sharedstatedir}/php/peclxml %pecl_xmldir %{_sharedstatedir}/php/peclxml

View File

@ -1,118 +0,0 @@
Drop "Configure Command" from phpinfo as it doesn't
provide any useful information.
The available extensions are not related to this command.
Replace full GCC name by gcc in php -v output
Also apply
From 9bf43c45908433d382f0499d529849172d0d8206 Mon Sep 17 00:00:00 2001
From: Remi Collet <remi@remirepo.net>
Date: Mon, 28 Dec 2020 08:33:09 +0100
Subject: [PATCH] rename COMPILER and ARCHITECTURE macro (too generic)
---
configure.ac | 4 ++--
ext/standard/info.c | 8 ++++----
sapi/cli/php_cli.c | 8 ++++----
win32/build/confutils.js | 10 +++++-----
4 files changed, 15 insertions(+), 15 deletions(-)
diff --git a/configure.ac b/configure.ac
index 9d9c8b155b07..143dc061346b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1289,10 +1289,10 @@ if test -n "${PHP_BUILD_PROVIDER}"; then
AC_DEFINE_UNQUOTED(PHP_BUILD_PROVIDER,"$PHP_BUILD_PROVIDER",[build provider])
fi
if test -n "${PHP_BUILD_COMPILER}"; then
- AC_DEFINE_UNQUOTED(COMPILER,"$PHP_BUILD_COMPILER",[used compiler for build])
+ AC_DEFINE_UNQUOTED(PHP_BUILD_COMPILER,"$PHP_BUILD_COMPILER",[used compiler for build])
fi
if test -n "${PHP_BUILD_ARCH}"; then
- AC_DEFINE_UNQUOTED(ARCHITECTURE,"$PHP_BUILD_ARCH",[build architecture])
+ AC_DEFINE_UNQUOTED(PHP_BUILD_ARCH,"$PHP_BUILD_ARCH",[build architecture])
fi
PHP_SUBST_OLD(PHP_INSTALLED_SAPIS)
diff --git a/ext/standard/info.c b/ext/standard/info.c
index 153cb6cde014..8ceef31d9fe4 100644
--- a/ext/standard/info.c
+++ b/ext/standard/info.c
@@ -798,11 +798,11 @@ PHPAPI ZEND_COLD void php_print_info(int flag)
#ifdef PHP_BUILD_PROVIDER
php_info_print_table_row(2, "Build Provider", PHP_BUILD_PROVIDER);
#endif
-#ifdef COMPILER
- php_info_print_table_row(2, "Compiler", COMPILER);
+#ifdef PHP_BUILD_COMPILER
+ php_info_print_table_row(2, "Compiler", PHP_BUILD_COMPILER);
#endif
-#ifdef ARCHITECTURE
- php_info_print_table_row(2, "Architecture", ARCHITECTURE);
+#ifdef PHP_BUILD_ARCH
+ php_info_print_table_row(2, "Architecture", PHP_BUILD_ARCH);
#endif
#ifdef CONFIGURE_COMMAND
php_info_print_table_row(2, "Configure Command", CONFIGURE_COMMAND );
diff --git a/sapi/cli/php_cli.c b/sapi/cli/php_cli.c
index 5092fb0ffd68..9d296acec631 100644
--- a/sapi/cli/php_cli.c
+++ b/sapi/cli/php_cli.c
@@ -640,12 +640,12 @@ static int do_cli(int argc, char **argv) /* {{{ */
#else
"NTS "
#endif
-#ifdef COMPILER
- COMPILER
+#ifdef PHP_BUILD_COMPILER
+ PHP_BUILD_COMPILER
" "
#endif
-#ifdef ARCHITECTURE
- ARCHITECTURE
+#ifdef PHP_BUILD_ARCH
+ PHP_BUILD_ARCH
" "
#endif
#if ZEND_DEBUG
diff -up ./ext/standard/info.c.phpinfo ./ext/standard/info.c
--- ./ext/standard/info.c.phpinfo 2020-07-21 10:49:31.000000000 +0200
+++ ./ext/standard/info.c 2020-07-21 11:41:56.295633523 +0200
@@ -804,9 +804,6 @@ PHPAPI ZEND_COLD void php_print_info(int
#ifdef PHP_BUILD_ARCH
php_info_print_table_row(2, "Architecture", PHP_BUILD_ARCH);
#endif
-#ifdef CONFIGURE_COMMAND
- php_info_print_table_row(2, "Configure Command", CONFIGURE_COMMAND );
-#endif
if (sapi_module.pretty_name) {
php_info_print_table_row(2, "Server API", sapi_module.pretty_name );
diff -up ./ext/standard/tests/general_functions/phpinfo.phpt.phpinfo ./ext/standard/tests/general_functions/phpinfo.phpt
--- ./ext/standard/tests/general_functions/phpinfo.phpt.phpinfo 2020-07-21 10:49:31.000000000 +0200
+++ ./ext/standard/tests/general_functions/phpinfo.phpt 2020-07-21 11:41:56.296633522 +0200
@@ -17,7 +17,6 @@ PHP Version => %s
System => %s
Build Date => %s%a
-Configure Command => %s
Server API => Command Line Interface
Virtual Directory Support => %s
Configuration File (php.ini) Path => %s
diff -up ./sapi/cli/php_cli.c.phpinfo ./sapi/cli/php_cli.c
--- ./sapi/cli/php_cli.c.phpinfo 2020-07-21 11:43:38.812475300 +0200
+++ ./sapi/cli/php_cli.c 2020-07-21 11:43:45.783464540 +0200
@@ -641,8 +641,7 @@ static int do_cli(int argc, char **argv)
"NTS "
#endif
#ifdef PHP_BUILD_COMPILER
- PHP_BUILD_COMPILER
- " "
+ "gcc "
#endif
#ifdef PHP_BUILD_ARCH
PHP_BUILD_ARCH

View File

@ -1,515 +0,0 @@
Backported for 8.0 from
From 8bb0c74e24359a11216824117ac3adf3d5ef7b71 Mon Sep 17 00:00:00 2001
From: Remi Collet <remi@remirepo.net>
Date: Thu, 5 Aug 2021 11:10:15 +0200
Subject: [PATCH] switch phar to use sha256 signature by default
---
ext/phar/phar/pharcommand.inc | 2 +-
ext/phar/tests/create_new_and_modify.phpt | 4 ++--
ext/phar/tests/create_new_phar_c.phpt | 4 ++--
ext/phar/tests/phar_setsignaturealgo2.phpt | 2 +-
ext/phar/tests/tar/phar_setsignaturealgo2.phpt | 2 +-
ext/phar/tests/zip/phar_setsignaturealgo2.phpt | 2 +-
ext/phar/util.c | 6 +++---
ext/phar/zip.c | 2 +-
8 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/ext/phar/phar/pharcommand.inc b/ext/phar/phar/pharcommand.inc
index a31290eee75fe..5f698b4bec26b 100644
--- a/ext/phar/phar/pharcommand.inc
+++ b/ext/phar/phar/pharcommand.inc
@@ -92,7 +92,7 @@ class PharCommand extends CLICommand
'typ' => 'select',
'val' => NULL,
'inf' => '<method> Selects the hash algorithm.',
- 'select' => array('md5' => 'MD5','sha1' => 'SHA1')
+ 'select' => array('md5' => 'MD5','sha1' => 'SHA1', 'sha256' => 'SHA256', 'sha512' => 'SHA512', 'openssl' => 'OPENSSL')
),
'i' => array(
'typ' => 'regex',
diff --git a/ext/phar/tests/create_new_and_modify.phpt b/ext/phar/tests/create_new_and_modify.phpt
index 02e36c6cea2fe..32defcae8a639 100644
--- a/ext/phar/tests/create_new_and_modify.phpt
+++ b/ext/phar/tests/create_new_and_modify.phpt
@@ -49,8 +49,8 @@ include $pname . '/b.php';
<?php unlink(__DIR__ . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
--EXPECTF--
brand new!
-string(40) "%s"
-string(40) "%s"
+string(%d) "%s"
+string(%d) "%s"
bool(true)
modified!
another!
diff --git a/ext/phar/tests/create_new_phar_c.phpt b/ext/phar/tests/create_new_phar_c.phpt
index 566d3c4d5f8ad..bf6d740fd1d10 100644
--- a/ext/phar/tests/create_new_phar_c.phpt
+++ b/ext/phar/tests/create_new_phar_c.phpt
@@ -20,7 +20,7 @@ var_dump($phar->getSignature());
--EXPECTF--
array(2) {
["hash"]=>
- string(40) "%s"
+ string(64) "%s"
["hash_type"]=>
- string(5) "SHA-1"
+ string(7) "SHA-256"
}
diff --git a/ext/phar/tests/phar_setsignaturealgo2.phpt b/ext/phar/tests/phar_setsignaturealgo2.phpt
index 293d3196713d8..4f31836fbbbcc 100644
--- a/ext/phar/tests/phar_setsignaturealgo2.phpt
+++ b/ext/phar/tests/phar_setsignaturealgo2.phpt
@@ -52,7 +52,7 @@ array(2) {
["hash"]=>
string(%d) "%s"
["hash_type"]=>
- string(5) "SHA-1"
+ string(7) "SHA-256"
}
array(2) {
["hash"]=>
diff --git a/ext/phar/tests/tar/phar_setsignaturealgo2.phpt b/ext/phar/tests/tar/phar_setsignaturealgo2.phpt
index 9923ac5c88476..cc10a241d739b 100644
--- a/ext/phar/tests/tar/phar_setsignaturealgo2.phpt
+++ b/ext/phar/tests/tar/phar_setsignaturealgo2.phpt
@@ -51,7 +51,7 @@ array(2) {
["hash"]=>
string(%d) "%s"
["hash_type"]=>
- string(5) "SHA-1"
+ string(7) "SHA-256"
}
array(2) {
["hash"]=>
diff --git a/ext/phar/tests/zip/phar_setsignaturealgo2.phpt b/ext/phar/tests/zip/phar_setsignaturealgo2.phpt
index 8de77479d7825..60fec578ee894 100644
--- a/ext/phar/tests/zip/phar_setsignaturealgo2.phpt
+++ b/ext/phar/tests/zip/phar_setsignaturealgo2.phpt
@@ -78,7 +78,7 @@ array(2) {
["hash"]=>
string(%d) "%s"
["hash_type"]=>
- string(5) "SHA-1"
+ string(7) "SHA-256"
}
array(2) {
["hash"]=>
diff --git a/ext/phar/util.c b/ext/phar/util.c
index 314acfe81a788..8d2db03b69601 100644
--- a/ext/phar/util.c
+++ b/ext/phar/util.c
@@ -1798,6 +1798,8 @@ int phar_create_signature(phar_archive_d
*signature_length = 64;
break;
}
+ default:
+ phar->sig_flags = PHAR_SIG_SHA256;
case PHAR_SIG_SHA256: {
unsigned char digest[32];
PHP_SHA256_CTX context;
@@ -1894,8 +1896,6 @@ int phar_create_signature(phar_archive_d
*signature_length = siglen;
}
break;
- default:
- phar->sig_flags = PHAR_SIG_SHA1;
case PHAR_SIG_SHA1: {
unsigned char digest[20];
PHP_SHA1_CTX context;
diff --git a/ext/phar/zip.c b/ext/phar/zip.c
index 31d4bd2998215..c5e38cabf7b87 100644
--- a/ext/phar/zip.c
+++ b/ext/phar/zip.c
@@ -1423,7 +1423,7 @@ int phar_zip_flush(phar_archive_data *phar, char *user_stub, zend_long len, int
memcpy(eocd.signature, "PK\5\6", 4);
if (!phar->is_data && !phar->sig_flags) {
- phar->sig_flags = PHAR_SIG_SHA1;
+ phar->sig_flags = PHAR_SIG_SHA256;
}
if (phar->sig_flags) {
PHAR_SET_16(eocd.counthere, zend_hash_num_elements(&phar->manifest) + 1);
From c51af22fef988c1b2f92b7b9e3a9d745f7084815 Mon Sep 17 00:00:00 2001
From: Remi Collet <remi@remirepo.net>
Date: Thu, 5 Aug 2021 16:49:48 +0200
Subject: [PATCH] implement openssl_256 and openssl_512 for phar singatures
---
ext/openssl/openssl.c | 1 +
ext/phar/phar.1.in | 10 +++-
ext/phar/phar.c | 8 +++-
ext/phar/phar/pharcommand.inc | 14 +++++-
ext/phar/phar_internal.h | 2 +
ext/phar/phar_object.c | 24 ++++++++--
ext/phar/tests/files/openssl256.phar | Bin 0 -> 7129 bytes
ext/phar/tests/files/openssl256.phar.pubkey | 6 +++
ext/phar/tests/files/openssl512.phar | Bin 0 -> 7129 bytes
ext/phar/tests/files/openssl512.phar.pubkey | 6 +++
.../phar_get_supported_signatures_002a.phpt | 6 ++-
.../tests/tar/phar_setsignaturealgo2.phpt | 16 +++++++
ext/phar/tests/test_signaturealgos.phpt | 8 ++++
ext/phar/util.c | 45 ++++++++++++++----
14 files changed, 128 insertions(+), 18 deletions(-)
create mode 100644 ext/phar/tests/files/openssl256.phar
create mode 100644 ext/phar/tests/files/openssl256.phar.pubkey
create mode 100644 ext/phar/tests/files/openssl512.phar
create mode 100644 ext/phar/tests/files/openssl512.phar.pubkey
diff --git a/ext/phar/phar.1.in b/ext/phar/phar.1.in
index 77912b241dfd5..323e77b0e2a3b 100644
--- a/ext/phar/phar.1.in
+++ b/ext/phar/phar.1.in
@@ -475,7 +475,15 @@ SHA512
.TP
.PD
.B openssl
-OpenSSL
+OpenSSL using SHA-1
+.TP
+.PD
+.B openssl_sha256
+OpenSSL using SHA-256
+.TP
+.PD
+.B openssl_sha512
+OpenSSL using SHA-512
.SH SEE ALSO
For a more or less complete description of PHAR look here:
diff --git a/ext/phar/phar.c b/ext/phar/phar.c
index 77f21cef9da53..bc08e4edde05d 100644
--- a/ext/phar/phar.c
+++ b/ext/phar/phar.c
@@ -869,6 +869,8 @@ static int phar_parse_pharfile(php_stream *fp, char *fname, size_t fname_len, ch
PHAR_GET_32(sig_ptr, sig_flags);
switch(sig_flags) {
+ case PHAR_SIG_OPENSSL_SHA512:
+ case PHAR_SIG_OPENSSL_SHA256:
case PHAR_SIG_OPENSSL: {
uint32_t signature_len;
char *sig;
@@ -903,7 +905,7 @@ static int phar_parse_pharfile(php_stream *fp, char *fname, size_t fname_len, ch
return FAILURE;
}
- if (FAILURE == phar_verify_signature(fp, end_of_phar, PHAR_SIG_OPENSSL, sig, signature_len, fname, &signature, &sig_len, error)) {
+ if (FAILURE == phar_verify_signature(fp, end_of_phar, sig_flags, sig, signature_len, fname, &signature, &sig_len, error)) {
efree(savebuf);
efree(sig);
php_stream_close(fp);
@@ -3162,7 +3164,9 @@ int phar_flush(phar_archive_data *phar, char *user_stub, zend_long len, int conv
php_stream_write(newfile, digest, digest_len);
efree(digest);
- if (phar->sig_flags == PHAR_SIG_OPENSSL) {
+ if (phar->sig_flags == PHAR_SIG_OPENSSL ||
+ phar->sig_flags == PHAR_SIG_OPENSSL_SHA256 ||
+ phar->sig_flags == PHAR_SIG_OPENSSL_SHA512) {
phar_set_32(sig_buf, digest_len);
php_stream_write(newfile, sig_buf, 4);
}
diff --git a/ext/phar/phar/pharcommand.inc b/ext/phar/phar/pharcommand.inc
index 5f698b4bec26b..1b1eeca59c560 100644
--- a/ext/phar/phar/pharcommand.inc
+++ b/ext/phar/phar/pharcommand.inc
@@ -92,7 +92,7 @@ class PharCommand extends CLICommand
'typ' => 'select',
'val' => NULL,
'inf' => '<method> Selects the hash algorithm.',
- 'select' => array('md5' => 'MD5','sha1' => 'SHA1', 'sha256' => 'SHA256', 'sha512' => 'SHA512', 'openssl' => 'OPENSSL')
+ 'select' => ['md5' => 'MD5','sha1' => 'SHA1', 'sha256' => 'SHA256', 'sha512' => 'SHA512', 'openssl' => 'OPENSSL', 'openssl_sha256' => 'OPENSSL_SHA256', 'openssl_sha512' => 'OPENSSL_SHA512']
),
'i' => array(
'typ' => 'regex',
@@ -156,6 +156,8 @@ class PharCommand extends CLICommand
$hash_avail = Phar::getSupportedSignatures();
$hash_optional = array('SHA-256' => 'SHA256',
'SHA-512' => 'SHA512',
+ 'OpenSSL_sha256' => 'OpenSSL_SHA256',
+ 'OpenSSL_sha512' => 'OpenSSL_SHA512',
'OpenSSL' => 'OpenSSL');
if (!in_array('OpenSSL', $hash_avail)) {
unset($phar_args['y']);
@@ -429,6 +431,16 @@ class PharCommand extends CLICommand
self::error("Cannot use OpenSSL signing without key.\n");
}
return Phar::OPENSSL;
+ case 'openssl_sha256':
+ if (!$privkey) {
+ self::error("Cannot use OpenSSL signing without key.\n");
+ }
+ return Phar::OPENSSL_SHA256;
+ case 'openssl_sha512':
+ if (!$privkey) {
+ self::error("Cannot use OpenSSL signing without key.\n");
+ }
+ return Phar::OPENSSL_SHA512;
}
}
// }}}
diff --git a/ext/phar/phar_internal.h b/ext/phar/phar_internal.h
index a9f81e2ab994a..30b408a8c4462 100644
--- a/ext/phar/phar_internal.h
+++ b/ext/phar/phar_internal.h
@@ -88,6 +88,8 @@
#define PHAR_SIG_SHA256 0x0003
#define PHAR_SIG_SHA512 0x0004
#define PHAR_SIG_OPENSSL 0x0010
+#define PHAR_SIG_OPENSSL_SHA256 0x0011
+#define PHAR_SIG_OPENSSL_SHA512 0x0012
/* flags byte for each file adheres to these bitmasks.
All unused values are reserved */
diff --git a/ext/phar/phar_object.c b/ext/phar/phar_object.c
index 9c1e5f2fa1eef..c05970e657f18 100644
--- a/ext/phar/phar_object.c
+++ b/ext/phar/phar_object.c
@@ -1246,9 +1246,13 @@ PHP_METHOD(Phar, getSupportedSignatures)
add_next_index_stringl(return_value, "SHA-512", 7);
#ifdef PHAR_HAVE_OPENSSL
add_next_index_stringl(return_value, "OpenSSL", 7);
+ add_next_index_stringl(return_value, "OpenSSL_SHA256", 14);
+ add_next_index_stringl(return_value, "OpenSSL_SHA512", 14);
#else
if (zend_hash_str_exists(&module_registry, "openssl", sizeof("openssl")-1)) {
add_next_index_stringl(return_value, "OpenSSL", 7);
+ add_next_index_stringl(return_value, "OpenSSL_SHA256", 14);
+ add_next_index_stringl(return_value, "OpenSSL_SHA512", 14);
}
#endif
}
@@ -3028,6 +3032,8 @@ PHP_METHOD(Phar, setSignatureAlgorithm)
case PHAR_SIG_MD5:
case PHAR_SIG_SHA1:
case PHAR_SIG_OPENSSL:
+ case PHAR_SIG_OPENSSL_SHA256:
+ case PHAR_SIG_OPENSSL_SHA512:
if (phar_obj->archive->is_persistent && FAILURE == phar_copy_on_write(&(phar_obj->archive))) {
zend_throw_exception_ex(phar_ce_PharException, 0, "phar \"%s\" is persistent, unable to copy on write", phar_obj->archive->fname);
RETURN_THROWS();
@@ -3066,19 +3072,25 @@ PHP_METHOD(Phar, getSignature)
add_assoc_stringl(return_value, "hash", phar_obj->archive->signature, phar_obj->archive->sig_len);
switch(phar_obj->archive->sig_flags) {
case PHAR_SIG_MD5:
- add_assoc_stringl(return_value, "hash_type", "MD5", 3);
+ add_assoc_string(return_value, "hash_type", "MD5");
break;
case PHAR_SIG_SHA1:
- add_assoc_stringl(return_value, "hash_type", "SHA-1", 5);
+ add_assoc_string(return_value, "hash_type", "SHA-1");
break;
case PHAR_SIG_SHA256:
- add_assoc_stringl(return_value, "hash_type", "SHA-256", 7);
+ add_assoc_string(return_value, "hash_type", "SHA-256");
break;
case PHAR_SIG_SHA512:
- add_assoc_stringl(return_value, "hash_type", "SHA-512", 7);
+ add_assoc_string(return_value, "hash_type", "SHA-512");
break;
case PHAR_SIG_OPENSSL:
- add_assoc_stringl(return_value, "hash_type", "OpenSSL", 7);
+ add_assoc_string(return_value, "hash_type", "OpenSSL");
+ break;
+ case PHAR_SIG_OPENSSL_SHA256:
+ add_assoc_string(return_value, "hash_type", "OpenSSL_SHA256");
+ break;
+ case PHAR_SIG_OPENSSL_SHA512:
+ add_assoc_string(return_value, "hash_type", "OpenSSL_SHA512");
break;
default:
unknown = strpprintf(0, "Unknown (%u)", phar_obj->archive->sig_flags);
@@ -5103,6 +5115,8 @@ void phar_object_init(void) /* {{{ */
REGISTER_PHAR_CLASS_CONST_LONG(phar_ce_archive, "PHPS", PHAR_MIME_PHPS)
REGISTER_PHAR_CLASS_CONST_LONG(phar_ce_archive, "MD5", PHAR_SIG_MD5)
REGISTER_PHAR_CLASS_CONST_LONG(phar_ce_archive, "OPENSSL", PHAR_SIG_OPENSSL)
+ REGISTER_PHAR_CLASS_CONST_LONG(phar_ce_archive, "OPENSSL_SHA256", PHAR_SIG_OPENSSL_SHA256)
+ REGISTER_PHAR_CLASS_CONST_LONG(phar_ce_archive, "OPENSSL_SHA512", PHAR_SIG_OPENSSL_SHA512)
REGISTER_PHAR_CLASS_CONST_LONG(phar_ce_archive, "SHA1", PHAR_SIG_SHA1)
REGISTER_PHAR_CLASS_CONST_LONG(phar_ce_archive, "SHA256", PHAR_SIG_SHA256)
REGISTER_PHAR_CLASS_CONST_LONG(phar_ce_archive, "SHA512", PHAR_SIG_SHA512)
diff --git a/ext/phar/tests/phar_get_supported_signatures_002a.phpt b/ext/phar/tests/phar_get_supported_signatures_002a.phpt
index 06d811f2c35c2..639143b3d2c90 100644
--- a/ext/phar/tests/phar_get_supported_signatures_002a.phpt
+++ b/ext/phar/tests/phar_get_supported_signatures_002a.phpt
@@ -14,7 +14,7 @@ phar.readonly=0
var_dump(Phar::getSupportedSignatures());
?>
--EXPECT--
-array(5) {
+array(7) {
[0]=>
string(3) "MD5"
[1]=>
@@ -25,4 +25,8 @@ array(5) {
string(7) "SHA-512"
[4]=>
string(7) "OpenSSL"
+ [5]=>
+ string(14) "OpenSSL_SHA256"
+ [6]=>
+ string(14) "OpenSSL_SHA512"
}
diff --git a/ext/phar/tests/tar/phar_setsignaturealgo2.phpt b/ext/phar/tests/tar/phar_setsignaturealgo2.phpt
index cc10a241d739b..c2eb5d77a5bf0 100644
--- a/ext/phar/tests/tar/phar_setsignaturealgo2.phpt
+++ b/ext/phar/tests/tar/phar_setsignaturealgo2.phpt
@@ -38,6 +38,10 @@ $pkey = '';
openssl_pkey_export($private, $pkey, NULL, $config_arg);
$p->setSignatureAlgorithm(Phar::OPENSSL, $pkey);
var_dump($p->getSignature());
+$p->setSignatureAlgorithm(Phar::OPENSSL_SHA512, $pkey);
+var_dump($p->getSignature());
+$p->setSignatureAlgorithm(Phar::OPENSSL_SHA256, $pkey);
+var_dump($p->getSignature());
} catch (Exception $e) {
echo $e->getMessage();
}
@@ -83,3 +87,15 @@ array(2) {
["hash_type"]=>
string(7) "OpenSSL"
}
+array(2) {
+ ["hash"]=>
+ string(%d) "%s"
+ ["hash_type"]=>
+ string(14) "OpenSSL_SHA512"
+}
+array(2) {
+ ["hash"]=>
+ string(%d) "%s"
+ ["hash_type"]=>
+ string(14) "OpenSSL_SHA256"
+}
diff --git a/ext/phar/util.c b/ext/phar/util.c
index 8d2db03b69601..515830bf2c70a 100644
--- a/ext/phar/util.c
+++ b/ext/phar/util.c
@@ -34,7 +34,7 @@
#include <openssl/ssl.h>
#include <openssl/pkcs12.h>
#else
-static int phar_call_openssl_signverify(int is_sign, php_stream *fp, zend_off_t end, char *key, size_t key_len, char **signature, size_t *signature_len);
+static int phar_call_openssl_signverify(int is_sign, php_stream *fp, zend_off_t end, char *key, size_t key_len, char **signature, size_t *signature_len, php_uint32 sig_type);
#endif
/* for links to relative location, prepend cwd of the entry */
@@ -1381,11 +1381,11 @@ static int phar_hex_str(const char *digest, size_t digest_len, char **signature)
/* }}} */
#ifndef PHAR_HAVE_OPENSSL
-static int phar_call_openssl_signverify(int is_sign, php_stream *fp, zend_off_t end, char *key, size_t key_len, char **signature, size_t *signature_len) /* {{{ */
+static int phar_call_openssl_signverify(int is_sign, php_stream *fp, zend_off_t end, char *key, size_t key_len, char **signature, size_t *signature_len, php_uint32 sig_type) /* {{{ */
{
zend_fcall_info fci;
zend_fcall_info_cache fcc;
- zval retval, zp[3], openssl;
+ zval retval, zp[4], openssl;
zend_string *str;
ZVAL_STRINGL(&openssl, is_sign ? "openssl_sign" : "openssl_verify", is_sign ? sizeof("openssl_sign")-1 : sizeof("openssl_verify")-1);
@@ -1402,6 +1402,14 @@ static int phar_call_openssl_signverify(int is_sign, php_stream *fp, zend_off_t
} else {
ZVAL_EMPTY_STRING(&zp[0]);
}
+ if (sig_type == PHAR_SIG_OPENSSL_SHA512) {
+ ZVAL_LONG(&zp[3], 9); /* value from openssl.c #define OPENSSL_ALGO_SHA512 9 */
+ } else if (sig_type == PHAR_SIG_OPENSSL_SHA256) {
+ ZVAL_LONG(&zp[3], 7); /* value from openssl.c #define OPENSSL_ALGO_SHA256 7 */
+ } else {
+ /* don't rely on default value which may change in the future */
+ ZVAL_LONG(&zp[3], 1); /* value from openssl.c #define OPENSSL_ALGO_SHA1 1 */
+ }
if ((size_t)end != Z_STRLEN(zp[0])) {
zval_ptr_dtor_str(&zp[0]);
@@ -1419,7 +1427,7 @@ static int phar_call_openssl_signverify(int is_sign, php_stream *fp, zend_off_t
return FAILURE;
}
- fci.param_count = 3;
+ fci.param_count = 4;
fci.params = zp;
Z_ADDREF(zp[0]);
if (is_sign) {
@@ -1482,12 +1490,22 @@ int phar_verify_signature(php_stream *fp, size_t end_of_phar, uint32_t sig_type,
php_stream_rewind(fp);
switch (sig_type) {
+ case PHAR_SIG_OPENSSL_SHA512:
+ case PHAR_SIG_OPENSSL_SHA256:
case PHAR_SIG_OPENSSL: {
#ifdef PHAR_HAVE_OPENSSL
BIO *in;
EVP_PKEY *key;
- EVP_MD *mdtype = (EVP_MD *) EVP_sha1();
+ const EVP_MD *mdtype;
EVP_MD_CTX *md_ctx;
+
+ if (sig_type == PHAR_SIG_OPENSSL_SHA512) {
+ mdtype = EVP_sha512();
+ } else if (sig_type == PHAR_SIG_OPENSSL_SHA256) {
+ mdtype = EVP_sha256();
+ } else {
+ mdtype = EVP_sha1();
+ }
#else
size_t tempsig;
#endif
@@ -1521,7 +1539,7 @@ int phar_verify_signature(php_stream *fp, size_t end_of_phar, uint32_t sig_type,
#ifndef PHAR_HAVE_OPENSSL
tempsig = sig_len;
- if (FAILURE == phar_call_openssl_signverify(0, fp, end_of_phar, pubkey ? ZSTR_VAL(pubkey) : NULL, pubkey ? ZSTR_LEN(pubkey) : 0, &sig, &tempsig)) {
+ if (FAILURE == phar_call_openssl_signverify(0, fp, end_of_phar, pubkey ? ZSTR_VAL(pubkey) : NULL, pubkey ? ZSTR_LEN(pubkey) : 0, &sig, &tempsig, sig_type)) {
if (pubkey) {
zend_string_release_ex(pubkey, 0);
}
@@ -1815,6 +1833,8 @@ int phar_create_signature(phar_archive_data *phar, php_stream *fp, char **signat
*signature_length = 32;
break;
}
+ case PHAR_SIG_OPENSSL_SHA512:
+ case PHAR_SIG_OPENSSL_SHA256:
case PHAR_SIG_OPENSSL: {
unsigned char *sigbuf;
#ifdef PHAR_HAVE_OPENSSL
@@ -1822,6 +1842,15 @@ int phar_create_signature(phar_archive_data *phar, php_stream *fp, char **signat
BIO *in;
EVP_PKEY *key;
EVP_MD_CTX *md_ctx;
+ const EVP_MD *mdtype;
+
+ if (phar->sig_flags == PHAR_SIG_OPENSSL_SHA512) {
+ mdtype = EVP_sha512();
+ } else if (phar->sig_flags == PHAR_SIG_OPENSSL_SHA256) {
+ mdtype = EVP_sha256();
+ } else {
+ mdtype = EVP_sha1();
+ }
in = BIO_new_mem_buf(PHAR_G(openssl_privatekey), PHAR_G(openssl_privatekey_len));
@@ -1847,7 +1876,7 @@ int phar_create_signature(phar_archive_data *phar, php_stream *fp, char **signat
siglen = EVP_PKEY_size(key);
sigbuf = emalloc(siglen + 1);
- if (!EVP_SignInit(md_ctx, EVP_sha1())) {
+ if (!EVP_SignInit(md_ctx, mdtype)) {
EVP_PKEY_free(key);
efree(sigbuf);
if (error) {
@@ -1885,7 +1914,7 @@ int phar_create_signature(phar_archive_data *phar, php_stream *fp, char **signat
siglen = 0;
php_stream_seek(fp, 0, SEEK_END);
- if (FAILURE == phar_call_openssl_signverify(1, fp, php_stream_tell(fp), PHAR_G(openssl_privatekey), PHAR_G(openssl_privatekey_len), (char **)&sigbuf, &siglen)) {
+ if (FAILURE == phar_call_openssl_signverify(1, fp, php_stream_tell(fp), PHAR_G(openssl_privatekey), PHAR_G(openssl_privatekey_len), (char **)&sigbuf, &siglen, phar->sig_flags)) {
if (error) {
spprintf(error, 0, "unable to write phar \"%s\" with requested openssl signature", phar->fname);
}

View File

@ -1,143 +0,0 @@
Backported for 8.0 from
From 718e91343fddb8817a004f96f111c424843bf746 Mon Sep 17 00:00:00 2001
From: Remi Collet <remi@php.net>
Date: Wed, 11 Aug 2021 13:02:18 +0200
Subject: [PATCH] add SHA256 and SHA512 for security protocol
---
ext/snmp/config.m4 | 18 +++++++++-
ext/snmp/snmp.c | 33 ++++++++++++++++++-
.../tests/snmp-object-setSecurity_error.phpt | 2 +-
ext/snmp/tests/snmp3-error.phpt | 2 +-
4 files changed, 51 insertions(+), 4 deletions(-)
diff --git a/ext/snmp/config.m4 b/ext/snmp/config.m4
index 1475ddfe2b7f0..f285a572de9cb 100644
--- a/ext/snmp/config.m4
+++ b/ext/snmp/config.m4
@@ -30,7 +30,7 @@ if test "$PHP_SNMP" != "no"; then
AC_MSG_ERROR([Could not find the required paths. Please check your net-snmp installation.])
fi
else
- AC_MSG_ERROR([Net-SNMP version 5.3 or greater reqired (detected $snmp_full_version).])
+ AC_MSG_ERROR([Net-SNMP version 5.3 or greater required (detected $snmp_full_version).])
fi
else
AC_MSG_ERROR([Could not find net-snmp-config binary. Please check your net-snmp installation.])
@@ -54,6 +54,22 @@ if test "$PHP_SNMP" != "no"; then
$SNMP_SHARED_LIBADD
])
+ dnl Check whether usmHMAC192SHA256AuthProtocol exists.
+ PHP_CHECK_LIBRARY($SNMP_LIBNAME, usmHMAC192SHA256AuthProtocol,
+ [
+ AC_DEFINE(HAVE_SNMP_SHA256, 1, [ ])
+ ], [], [
+ $SNMP_SHARED_LIBADD
+ ])
+
+ dnl Check whether usmHMAC384SHA512AuthProtocol exists.
+ PHP_CHECK_LIBRARY($SNMP_LIBNAME, usmHMAC384SHA512AuthProtocol,
+ [
+ AC_DEFINE(HAVE_SNMP_SHA512, 1, [ ])
+ ], [], [
+ $SNMP_SHARED_LIBADD
+ ])
+
PHP_NEW_EXTENSION(snmp, snmp.c, $ext_shared)
PHP_SUBST(SNMP_SHARED_LIBADD)
fi
diff --git a/ext/snmp/snmp.c b/ext/snmp/snmp.c
index 69d6549405b17..f0917501751f5 100644
--- a/ext/snmp/snmp.c
+++ b/ext/snmp/snmp.c
@@ -29,6 +29,7 @@
#include "php_snmp.h"
#include "zend_exceptions.h"
+#include "zend_smart_string.h"
#include "ext/spl/spl_exceptions.h"
#include "snmp_arginfo.h"
@@ -938,16 +939,48 @@ static int netsnmp_session_set_auth_protocol(struct snmp_session *s, char *prot)
if (!strcasecmp(prot, "MD5")) {
s->securityAuthProto = usmHMACMD5AuthProtocol;
s->securityAuthProtoLen = USM_AUTH_PROTO_MD5_LEN;
- } else
+ return 0;
+ }
#endif
+
if (!strcasecmp(prot, "SHA")) {
s->securityAuthProto = usmHMACSHA1AuthProtocol;
s->securityAuthProtoLen = USM_AUTH_PROTO_SHA_LEN;
- } else {
- zend_value_error("Authentication protocol must be either \"MD5\" or \"SHA\"");
- return (-1);
+ return 0;
}
- return (0);
+
+#ifdef HAVE_SNMP_SHA256
+ if (!strcasecmp(prot, "SHA256")) {
+ s->securityAuthProto = usmHMAC192SHA256AuthProtocol;
+ s->securityAuthProtoLen = sizeof(usmHMAC192SHA256AuthProtocol) / sizeof(oid);
+ return 0;
+ }
+#endif
+
+#ifdef HAVE_SNMP_SHA512
+ if (!strcasecmp(prot, "SHA512")) {
+ s->securityAuthProto = usmHMAC384SHA512AuthProtocol;
+ s->securityAuthProtoLen = sizeof(usmHMAC384SHA512AuthProtocol) / sizeof(oid);
+ return 0;
+ }
+#endif
+
+ smart_string err = {0};
+
+ smart_string_appends(&err, "Authentication protocol must be \"SHA\"");
+#ifdef HAVE_SNMP_SHA256
+ smart_string_appends(&err, " or \"SHA256\"");
+#endif
+#ifdef HAVE_SNMP_SHA512
+ smart_string_appends(&err, " or \"SHA512\"");
+#endif
+#ifndef DISABLE_MD5
+ smart_string_appends(&err, " or \"MD5\"");
+#endif
+ smart_string_0(&err);
+ zend_value_error("%s", err.c);
+ smart_string_free(&err);
+ return -1;
}
/* }}} */
diff --git a/ext/snmp/tests/snmp-object-setSecurity_error.phpt b/ext/snmp/tests/snmp-object-setSecurity_error.phpt
index f8de846492a75..cf4f928837773 100644
--- a/ext/snmp/tests/snmp-object-setSecurity_error.phpt
+++ b/ext/snmp/tests/snmp-object-setSecurity_error.phpt
@@ -59,7 +59,7 @@ var_dump($session->close());
--EXPECTF--
Security level must be one of "noAuthNoPriv", "authNoPriv", or "authPriv"
Security level must be one of "noAuthNoPriv", "authNoPriv", or "authPriv"
-Authentication protocol must be either "MD5" or "SHA"
+Authentication protocol must be %s
Warning: SNMP::setSecurity(): Error generating a key for authentication pass phrase '': Generic error (The supplied password length is too short.) in %s on line %d
bool(false)
diff --git a/ext/snmp/tests/snmp3-error.phpt b/ext/snmp/tests/snmp3-error.phpt
index 849e363b45058..389800dad6b28 100644
--- a/ext/snmp/tests/snmp3-error.phpt
+++ b/ext/snmp/tests/snmp3-error.phpt
@@ -58,7 +58,7 @@ try {
Checking error handling
Security level must be one of "noAuthNoPriv", "authNoPriv", or "authPriv"
Security level must be one of "noAuthNoPriv", "authNoPriv", or "authPriv"
-Authentication protocol must be either "MD5" or "SHA"
+Authentication protocol must be %s
Warning: snmp3_get(): Error generating a key for authentication pass phrase '': Generic error (The supplied password length is too short.) in %s on line %d
bool(false)

View File

@ -1,45 +0,0 @@
From fc4e31467c352032ee709ac55d3c67bc22abcd8d Mon Sep 17 00:00:00 2001
From: Remi Collet <remi@remirepo.net>
Date: Fri, 15 Oct 2021 17:11:12 +0200
Subject: [PATCH] add --with-external-libcrypt build option display an error
message if some algo not available in external libcrypt
---
ext/standard/config.m4 | 21 ++++++++++++++++-----
1 file changed, 16 insertions(+), 5 deletions(-)
diff --git a/ext/standard/config.m4 b/ext/standard/config.m4
index 58b9c5e658a4..3ec18be4d7df 100644
--- a/ext/standard/config.m4
+++ b/ext/standard/config.m4
@@ -267,14 +267,25 @@ int main() {
])])
+PHP_ARG_WITH([external-libcrypt],
+ [for external libcrypt or libxcrypt],
+ [AS_HELP_STRING([--with-external-libcrypt],
+ [Use external libcrypt or libxcrypt])],
+ [no],
+ [no])
+
dnl
dnl If one of them is missing, use our own implementation, portable code is then possible
dnl
-dnl TODO This is currently always enabled
-if test "$ac_cv_crypt_blowfish" = "no" || test "$ac_cv_crypt_des" = "no" || test "$ac_cv_crypt_ext_des" = "no" || test "$ac_cv_crypt_md5" = "no" || test "$ac_cv_crypt_sha512" = "no" || test "$ac_cv_crypt_sha256" = "no" || test "$ac_cv_func_crypt_r" != "yes" || true; then
- AC_DEFINE_UNQUOTED(PHP_USE_PHP_CRYPT_R, 1, [Whether PHP has to use its own crypt_r for blowfish, des, ext des and md5])
-
- PHP_ADD_SOURCES(PHP_EXT_DIR(standard), crypt_freesec.c crypt_blowfish.c crypt_sha512.c crypt_sha256.c php_crypt_r.c)
+dnl This is currently enabled by default
+if test "$ac_cv_crypt_blowfish" = "no" || test "$ac_cv_crypt_des" = "no" || test "$ac_cv_crypt_ext_des" = "no" || test "$ac_cv_crypt_md5" = "no" || test "$ac_cv_crypt_sha512" = "no" || test "$ac_cv_crypt_sha256" = "no" || test "$ac_cv_func_crypt_r" != "yes" || test "$PHP_EXTERNAL_LIBCRYPT" = "no"; then
+ if test "$PHP_EXTERNAL_LIBCRYPT" = "no"; then
+ AC_DEFINE_UNQUOTED(PHP_USE_PHP_CRYPT_R, 1, [Whether PHP has to use its own crypt_r for blowfish, des, ext des and md5])
+
+ PHP_ADD_SOURCES(PHP_EXT_DIR(standard), crypt_freesec.c crypt_blowfish.c crypt_sha512.c crypt_sha256.c php_crypt_r.c)
+ else
+ AC_MSG_ERROR([Cannot use external libcrypt as some algo are missing])
+ fi
else
AC_DEFINE_UNQUOTED(PHP_USE_PHP_CRYPT_R, 0, [Whether PHP has to use its own crypt_r for blowfish, des and ext des])
fi

View File

@ -1,400 +0,0 @@
From 4dc8b3c0efaae25b08c8f59b068f17c97c59d0ae Mon Sep 17 00:00:00 2001
From: Remi Collet <remi@remirepo.net>
Date: Wed, 5 May 2021 15:41:00 +0200
Subject: [PATCH] get rid of inet_aton and inet_ntoa use inet_ntop iand
inet_pton where available standardize buffer size
---
ext/sockets/sockaddr_conv.c | 4 ++++
ext/sockets/sockets.c | 48 +++++++++++++++++++++++++------------
ext/standard/dns.c | 16 ++++++++++++-
main/network.c | 20 ++++++++++++++--
4 files changed, 70 insertions(+), 18 deletions(-)
diff --git a/ext/sockets/sockaddr_conv.c b/ext/sockets/sockaddr_conv.c
index 57996612d2d7e..65c8418fb3a6f 100644
--- a/ext/sockets/sockaddr_conv.c
+++ b/ext/sockets/sockaddr_conv.c
@@ -87,7 +87,11 @@ int php_set_inet_addr(struct sockaddr_in *sin, char *string, php_socket *php_soc
struct in_addr tmp;
struct hostent *host_entry;
+#ifdef HAVE_INET_PTON
+ if (inet_pton(AF_INET, string, &tmp)) {
+#else
if (inet_aton(string, &tmp)) {
+#endif
sin->sin_addr.s_addr = tmp.s_addr;
} else {
if (strlen(string) > MAXFQDNLEN || ! (host_entry = php_network_gethostbyname(string))) {
diff --git a/ext/sockets/sockets.c b/ext/sockets/sockets.c
index 16ad3e8013a4c..85c938d1b97b1 100644
--- a/ext/sockets/sockets.c
+++ b/ext/sockets/sockets.c
@@ -220,8 +220,10 @@ zend_module_entry sockets_module_entry = {
ZEND_GET_MODULE(sockets)
#endif
+#ifndef HAVE_INET_NTOP
/* inet_ntop should be used instead of inet_ntoa */
int inet_ntoa_lock = 0;
+#endif
static int php_open_listen_sock(php_socket *sock, int port, int backlog) /* {{{ */
{
@@ -1082,10 +1084,12 @@ PHP_FUNCTION(socket_getsockname)
struct sockaddr_in *sin;
#if HAVE_IPV6
struct sockaddr_in6 *sin6;
- char addr6[INET6_ADDRSTRLEN+1];
+#endif
+#ifdef HAVE_INET_NTOP
+ char addrbuf[INET6_ADDRSTRLEN];
#endif
struct sockaddr_un *s_un;
- char *addr_string;
+ const char *addr_string;
socklen_t salen = sizeof(php_sockaddr_storage);
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Oz|z", &arg1, socket_ce, &addr, &port) == FAILURE) {
@@ -1106,8 +1110,8 @@ PHP_FUNCTION(socket_getsockname)
#if HAVE_IPV6
case AF_INET6:
sin6 = (struct sockaddr_in6 *) sa;
- inet_ntop(AF_INET6, &sin6->sin6_addr, addr6, INET6_ADDRSTRLEN);
- ZEND_TRY_ASSIGN_REF_STRING(addr, addr6);
+ inet_ntop(AF_INET6, &sin6->sin6_addr, addrbuf, sizeof(addrbuf));
+ ZEND_TRY_ASSIGN_REF_STRING(addr, addrbuf);
if (port != NULL) {
ZEND_TRY_ASSIGN_REF_LONG(port, htons(sin6->sin6_port));
@@ -1117,11 +1121,14 @@ PHP_FUNCTION(socket_getsockname)
#endif
case AF_INET:
sin = (struct sockaddr_in *) sa;
+#ifdef HAVE_INET_NTOP
+ addr_string = inet_ntop(AF_INET, &sin->sin_addr, addrbuf, sizeof(addrbuf));
+#else
while (inet_ntoa_lock == 1);
inet_ntoa_lock = 1;
addr_string = inet_ntoa(sin->sin_addr);
inet_ntoa_lock = 0;
-
+#endif
ZEND_TRY_ASSIGN_REF_STRING(addr, addr_string);
if (port != NULL) {
@@ -1154,10 +1161,12 @@ PHP_FUNCTION(socket_getpeername)
struct sockaddr_in *sin;
#if HAVE_IPV6
struct sockaddr_in6 *sin6;
- char addr6[INET6_ADDRSTRLEN+1];
+#endif
+#ifdef HAVE_INET_NTOP
+ char addrbuf[INET6_ADDRSTRLEN];
#endif
struct sockaddr_un *s_un;
- char *addr_string;
+ const char *addr_string;
socklen_t salen = sizeof(php_sockaddr_storage);
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Oz|z", &arg1, socket_ce, &arg2, &arg3) == FAILURE) {
@@ -1178,9 +1187,9 @@ PHP_FUNCTION(socket_getpeername)
#if HAVE_IPV6
case AF_INET6:
sin6 = (struct sockaddr_in6 *) sa;
- inet_ntop(AF_INET6, &sin6->sin6_addr, addr6, INET6_ADDRSTRLEN);
+ inet_ntop(AF_INET6, &sin6->sin6_addr, addrbuf, sizeof(addrbuf));
- ZEND_TRY_ASSIGN_REF_STRING(arg2, addr6);
+ ZEND_TRY_ASSIGN_REF_STRING(arg2, addrbuf);
if (arg3 != NULL) {
ZEND_TRY_ASSIGN_REF_LONG(arg3, htons(sin6->sin6_port));
@@ -1191,11 +1200,14 @@ PHP_FUNCTION(socket_getpeername)
#endif
case AF_INET:
sin = (struct sockaddr_in *) sa;
+#ifdef HAVE_INET_NTOP
+ addr_string = inet_ntop(AF_INET, &sin->sin_addr, addrbuf, sizeof(addrbuf));
+#else
while (inet_ntoa_lock == 1);
inet_ntoa_lock = 1;
addr_string = inet_ntoa(sin->sin_addr);
inet_ntoa_lock = 0;
-
+#endif
ZEND_TRY_ASSIGN_REF_STRING(arg2, addr_string);
if (arg3 != NULL) {
@@ -1527,12 +1539,14 @@ PHP_FUNCTION(socket_recvfrom)
struct sockaddr_in sin;
#if HAVE_IPV6
struct sockaddr_in6 sin6;
- char addr6[INET6_ADDRSTRLEN];
+#endif
+#ifdef HAVE_INET_NTOP
+ char addrbuf[INET6_ADDRSTRLEN];
#endif
socklen_t slen;
int retval;
zend_long arg3, arg4;
- char *address;
+ const char *address;
zend_string *recv_buf;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ozllz|z", &arg1, socket_ce, &arg2, &arg3, &arg4, &arg5, &arg6) == FAILURE) {
@@ -1590,7 +1604,11 @@ PHP_FUNCTION(socket_recvfrom)
ZSTR_LEN(recv_buf) = retval;
ZSTR_VAL(recv_buf)[ZSTR_LEN(recv_buf)] = '\0';
+#ifdef HAVE_INET_NTOP
+ address = inet_ntop(AF_INET, &sin.sin_addr, addrbuf, sizeof(addrbuf));
+#else
address = inet_ntoa(sin.sin_addr);
+#endif
ZEND_TRY_ASSIGN_REF_NEW_STR(arg2, recv_buf);
ZEND_TRY_ASSIGN_REF_STRING(arg5, address ? address : "0.0.0.0");
@@ -1617,11 +1635,11 @@ PHP_FUNCTION(socket_recvfrom)
ZSTR_LEN(recv_buf) = retval;
ZSTR_VAL(recv_buf)[ZSTR_LEN(recv_buf)] = '\0';
- memset(addr6, 0, INET6_ADDRSTRLEN);
- inet_ntop(AF_INET6, &sin6.sin6_addr, addr6, INET6_ADDRSTRLEN);
+ memset(addrbuf, 0, INET6_ADDRSTRLEN);
+ inet_ntop(AF_INET6, &sin6.sin6_addr, addrbuf, sizeof(addrbuf));
ZEND_TRY_ASSIGN_REF_NEW_STR(arg2, recv_buf);
- ZEND_TRY_ASSIGN_REF_STRING(arg5, addr6[0] ? addr6 : "::");
+ ZEND_TRY_ASSIGN_REF_STRING(arg5, addrbuf[0] ? addrbuf : "::");
ZEND_TRY_ASSIGN_REF_LONG(arg6, ntohs(sin6.sin6_port));
break;
#endif
diff --git a/ext/standard/dns.c b/ext/standard/dns.c
index 41b98424edb60..6efdbbe894b46 100644
--- a/ext/standard/dns.c
+++ b/ext/standard/dns.c
@@ -228,6 +228,9 @@ PHP_FUNCTION(gethostbynamel)
struct hostent *hp;
struct in_addr in;
int i;
+#ifdef HAVE_INET_NTOP
+ char addr4[INET_ADDRSTRLEN];
+#endif
ZEND_PARSE_PARAMETERS_START(1, 1)
Z_PARAM_PATH(hostname, hostname_len)
@@ -255,7 +258,11 @@ PHP_FUNCTION(gethostbynamel)
}
in = *h_addr_entry;
+#ifdef HAVE_INET_NTOP
+ add_next_index_string(return_value, inet_ntop(AF_INET, &in, addr4, INET_ADDRSTRLEN));
+#else
add_next_index_string(return_value, inet_ntoa(in));
+#endif
}
}
/* }}} */
@@ -266,7 +273,10 @@ static zend_string *php_gethostbyname(char *name)
struct hostent *hp;
struct in_addr *h_addr_0; /* Don't call this h_addr, it's a macro! */
struct in_addr in;
- char *address;
+#ifdef HAVE_INET_NTOP
+ char addr4[INET_ADDRSTRLEN];
+#endif
+ const char *address;
hp = php_network_gethostbyname(name);
if (!hp) {
@@ -281,7 +291,11 @@ static zend_string *php_gethostbyname(char *name)
memcpy(&in.s_addr, h_addr_0, sizeof(in.s_addr));
+#ifdef HAVE_INET_NTOP
+ address = inet_ntop(AF_INET, &in, addr4, INET_ADDRSTRLEN);
+#else
address = inet_ntoa(in);
+#endif
return zend_string_init(address, strlen(address), 0);
}
/* }}} */
diff --git a/main/network.c b/main/network.c
index 2c504952b2dd1..7f2f714ec42df 100644
--- a/main/network.c
+++ b/main/network.c
@@ -236,8 +236,12 @@ PHPAPI int php_network_getaddresses(const char *host, int socktype, struct socka
} while ((sai = sai->ai_next) != NULL);
freeaddrinfo(res);
+#else
+#ifdef HAVE_INET_PTON
+ if (!inet_pton(AF_INET, host, &in)) {
#else
if (!inet_aton(host, &in)) {
+#endif
if(strlen(host) > MAXFQDNLEN) {
host_info = NULL;
errno = E2BIG;
@@ -555,7 +559,11 @@ PHPAPI int php_network_parse_network_address_with_port(const char *addr, zend_lo
goto out;
}
#endif
+#ifdef HAVE_INET_PTON
+ if (inet_pton(AF_INET, tmp, &in4->sin_addr) > 0) {
+#else
if (inet_aton(tmp, &in4->sin_addr) > 0) {
+#endif
in4->sin_port = htons(port);
in4->sin_family = AF_INET;
*sl = sizeof(struct sockaddr_in);
@@ -617,15 +625,19 @@ PHPAPI void php_network_populate_name_from_sockaddr(
}
if (textaddr) {
-#if HAVE_IPV6 && HAVE_INET_NTOP
+#ifdef HAVE_INET_NTOP
char abuf[256];
#endif
- char *buf = NULL;
+ const char *buf = NULL;
switch (sa->sa_family) {
case AF_INET:
/* generally not thread safe, but it *is* thread safe under win32 */
+#ifdef HAVE_INET_NTOP
+ buf = inet_ntop(AF_INET, &((struct sockaddr_in*)sa)->sin_addr, (char *)&abuf, sizeof(abuf));
+#else
buf = inet_ntoa(((struct sockaddr_in*)sa)->sin_addr);
+#endif
if (buf) {
*textaddr = strpprintf(0, "%s:%d",
buf, ntohs(((struct sockaddr_in*)sa)->sin_port));
@@ -862,7 +874,11 @@ php_socket_t php_network_connect_socket_to_host(const char *host, unsigned short
in4->sin_family = sa->sa_family;
in4->sin_port = htons(bindport);
+#ifdef HAVE_INET_PTON
+ if (!inet_pton(AF_INET, bindto, &in4->sin_addr)) {
+#else
if (!inet_aton(bindto, &in4->sin_addr)) {
+#endif
php_error_docref(NULL, E_WARNING, "Invalid IP Address: %s", bindto);
goto skip_bind;
}
From e5b6f43ec7813392d83ea586b7902e0396a1f792 Mon Sep 17 00:00:00 2001
From: Remi Collet <remi@remirepo.net>
Date: Thu, 6 May 2021 14:21:29 +0200
Subject: [PATCH] get rid of inet_addr usage
---
main/fastcgi.c | 4 ++++
sapi/litespeed/lsapilib.c | 4 ++++
2 files changed, 8 insertions(+)
diff --git a/main/fastcgi.c b/main/fastcgi.c
index 071f69d3a7f0..c936d42405de 100644
--- a/main/fastcgi.c
+++ b/main/fastcgi.c
@@ -688,8 +688,12 @@ int fcgi_listen(const char *path, int backlog)
if (!*host || !strncmp(host, "*", sizeof("*")-1)) {
sa.sa_inet.sin_addr.s_addr = htonl(INADDR_ANY);
} else {
+#ifdef HAVE_INET_PTON
+ if (!inet_pton(AF_INET, host, &sa.sa_inet.sin_addr)) {
+#else
sa.sa_inet.sin_addr.s_addr = inet_addr(host);
if (sa.sa_inet.sin_addr.s_addr == INADDR_NONE) {
+#endif
struct hostent *hep;
if(strlen(host) > MAXFQDNLEN) {
diff --git a/sapi/litespeed/lsapilib.c b/sapi/litespeed/lsapilib.c
index a72b5dc1b988..305f3326a682 100644
--- a/sapi/litespeed/lsapilib.c
+++ b/sapi/litespeed/lsapilib.c
@@ -2672,8 +2672,12 @@ int LSAPI_ParseSockAddr( const char * pBind, struct sockaddr * pAddr )
((struct sockaddr_in *)pAddr)->sin_addr.s_addr = htonl( INADDR_LOOPBACK );
else
{
+#ifdef HAVE_INET_PTON
+ if (!inet_pton(AF_INET, p, &((struct sockaddr_in *)pAddr)->sin_addr))
+#else
((struct sockaddr_in *)pAddr)->sin_addr.s_addr = inet_addr( p );
if ( ((struct sockaddr_in *)pAddr)->sin_addr.s_addr == INADDR_BROADCAST)
+#endif
{
doAddrInfo = 1;
}
From 99d67d121acd4c324738509679d23acaf759d065 Mon Sep 17 00:00:00 2001
From: Remi Collet <remi@remirepo.net>
Date: Thu, 6 May 2021 16:35:48 +0200
Subject: [PATCH] use getnameinfo instead of gethostbyaddr
---
ext/standard/dns.c | 34 ++++++++++++++++++++++------------
1 file changed, 22 insertions(+), 12 deletions(-)
diff --git a/ext/standard/dns.c b/ext/standard/dns.c
index edd9a4549f5c..540c777faaba 100644
--- a/ext/standard/dns.c
+++ b/ext/standard/dns.c
@@ -169,20 +169,30 @@ PHP_FUNCTION(gethostbyaddr)
static zend_string *php_gethostbyaddr(char *ip)
{
#if HAVE_IPV6 && HAVE_INET_PTON
- struct in6_addr addr6;
-#endif
- struct in_addr addr;
- struct hostent *hp;
+ struct sockaddr_in sa4;
+ struct sockaddr_in6 sa6;
+ char out[NI_MAXHOST];
-#if HAVE_IPV6 && HAVE_INET_PTON
- if (inet_pton(AF_INET6, ip, &addr6)) {
- hp = gethostbyaddr((char *) &addr6, sizeof(addr6), AF_INET6);
- } else if (inet_pton(AF_INET, ip, &addr)) {
- hp = gethostbyaddr((char *) &addr, sizeof(addr), AF_INET);
- } else {
- return NULL;
+ if (inet_pton(AF_INET6, ip, &sa6.sin6_addr)) {
+ sa6.sin6_family = AF_INET6;
+
+ if (getnameinfo((struct sockaddr *)&sa6, sizeof(sa6), out, sizeof(out), NULL, 0, NI_NAMEREQD) < 0) {
+ return zend_string_init(ip, strlen(ip), 0);
+ }
+ return zend_string_init(out, strlen(out), 0);
+ } else if (inet_pton(AF_INET, ip, &sa4.sin_addr)) {
+ sa4.sin_family = AF_INET;
+
+ if (getnameinfo((struct sockaddr *)&sa4, sizeof(sa4), out, sizeof(out), NULL, 0, NI_NAMEREQD) < 0) {
+ return zend_string_init(ip, strlen(ip), 0);
+ }
+ return zend_string_init(out, strlen(out), 0);
}
+ return NULL; /* not a valid IP */
#else
+ struct in_addr addr;
+ struct hostent *hp;
+
addr.s_addr = inet_addr(ip);
if (addr.s_addr == -1) {
@@ -190,13 +200,13 @@ static zend_string *php_gethostbyaddr(char *ip)
}
hp = gethostbyaddr((char *) &addr, sizeof(addr), AF_INET);
-#endif
if (!hp || hp->h_name == NULL || hp->h_name[0] == '\0') {
return zend_string_init(ip, strlen(ip), 0);
}
return zend_string_init(hp->h_name, strlen(hp->h_name), 0);
+#endif
}
/* }}} */

View File

@ -79,10 +79,10 @@ diff -up ./ext/dba/dba.c.libdb ./ext/dba/dba.c
PHP_MINIT_FUNCTION(dba); PHP_MINIT_FUNCTION(dba);
PHP_MSHUTDOWN_FUNCTION(dba); PHP_MSHUTDOWN_FUNCTION(dba);
PHP_MINFO_FUNCTION(dba); PHP_MINFO_FUNCTION(dba);
@@ -459,6 +463,10 @@ PHP_MINFO_FUNCTION(dba) @@ -452,6 +456,10 @@ PHP_MINFO_FUNCTION(dba)
php_info_print_table_start(); php_info_print_table_start();
php_info_print_table_row(2, "DBA support", "enabled"); php_info_print_table_row(2, "DBA support", "enabled");
+#ifdef DB_VERSION_STRING +#ifdef DB_VERSION_STRING
+ php_info_print_table_row(2, "libdb header version", DB_VERSION_STRING); + php_info_print_table_row(2, "libdb header version", DB_VERSION_STRING);
+ php_info_print_table_row(2, "libdb library version", db_version(NULL, NULL, NULL)); + php_info_print_table_row(2, "libdb library version", db_version(NULL, NULL, NULL));

44
php-8.1.0-phpinfo.patch Normal file
View File

@ -0,0 +1,44 @@
Drop "Configure Command" from phpinfo as it doesn't
provide any useful information.
The available extensions are not related to this command.
Replace full GCC name by gcc in php -v output
diff -up ./ext/standard/info.c.phpinfo ./ext/standard/info.c
--- ./ext/standard/info.c.phpinfo 2020-07-21 10:49:31.000000000 +0200
+++ ./ext/standard/info.c 2020-07-21 11:41:56.295633523 +0200
@@ -805,9 +805,6 @@ PHPAPI ZEND_COLD void php_print_info(int
#ifdef PHP_BUILD_ARCH
php_info_print_table_row(2, "Architecture", PHP_BUILD_ARCH);
#endif
-#ifdef CONFIGURE_COMMAND
- php_info_print_table_row(2, "Configure Command", CONFIGURE_COMMAND );
-#endif
if (sapi_module.pretty_name) {
php_info_print_table_row(2, "Server API", sapi_module.pretty_name );
diff -up ./ext/standard/tests/general_functions/phpinfo.phpt.phpinfo ./ext/standard/tests/general_functions/phpinfo.phpt
--- ./ext/standard/tests/general_functions/phpinfo.phpt.phpinfo 2020-07-21 10:49:31.000000000 +0200
+++ ./ext/standard/tests/general_functions/phpinfo.phpt 2020-07-21 11:41:56.296633522 +0200
@@ -17,7 +17,6 @@ PHP Version => %s
System => %s
Build Date => %s%a
-Configure Command => %s
Server API => Command Line Interface
Virtual Directory Support => %s
Configuration File (php.ini) Path => %s
diff -up ./sapi/cli/php_cli.c.phpinfo ./sapi/cli/php_cli.c
--- ./sapi/cli/php_cli.c.phpinfo 2020-07-21 11:43:38.812475300 +0200
+++ ./sapi/cli/php_cli.c 2020-07-21 11:43:45.783464540 +0200
@@ -645,7 +645,7 @@ static int do_cli(int argc, char **argv)
"NTS"
#endif
#ifdef PHP_BUILD_COMPILER
- " " PHP_BUILD_COMPILER
+ " gcc"
#endif
#ifdef PHP_BUILD_ARCH
" " PHP_BUILD_ARCH

View File

@ -5,7 +5,10 @@ Add support for use of the system timezone database, rather
than embedding a copy. Discussed upstream but was not desired. than embedding a copy. Discussed upstream but was not desired.
History: History:
r21: retrieve tzdata version from /usr/share/zoneinfo/tzdata.zi f24: add internal UTC if tzdata is missing
r23: fix possible buffer overflow
r22: retrieve tzdata version from /usr/share/zoneinfo/tzdata.zi
r21: adapt for timelib 2021.03 (in 8.1.0)
r20: adapt for timelib 2020.03 (in 8.0.10RC1) r20: adapt for timelib 2020.03 (in 8.0.10RC1)
r19: adapt for timelib 2020.02 (in 8.0.0beta2) r19: adapt for timelib 2020.02 (in 8.0.0beta2)
r18: adapt for autotool change in 7.3.3RC1 r18: adapt for autotool change in 7.3.3RC1
@ -32,8 +35,9 @@ r3: fix a crash if /usr/share/zoneinfo doesn't exist (Raphael Geissert)
r2: add filesystem trawl to set up name alias index r2: add filesystem trawl to set up name alias index
r1: initial revision r1: initial revision
diff --git a/ext/date/config0.m4 b/ext/date/config0.m4 diff --git a/ext/date/config0.m4 b/ext/date/config0.m4
index 20e4164aaa..a61243646d 100644 index 6b803bf33e..53c3cdb3f4 100644
--- a/ext/date/config0.m4 --- a/ext/date/config0.m4
+++ b/ext/date/config0.m4 +++ b/ext/date/config0.m4
@@ -4,6 +4,19 @@ AC_CHECK_HEADERS([io.h]) @@ -4,6 +4,19 @@ AC_CHECK_HEADERS([io.h])
@ -53,14 +57,14 @@ index 20e4164aaa..a61243646d 100644
+ fi + fi
+fi +fi
+ +
PHP_DATE_CFLAGS="-I@ext_builddir@/lib -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DHAVE_TIMELIB_CONFIG_H=1" PHP_DATE_CFLAGS="-Wno-implicit-fallthrough -I@ext_builddir@/lib -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -DHAVE_TIMELIB_CONFIG_H=1"
timelib_sources="lib/astro.c lib/dow.c lib/parse_date.c lib/parse_tz.c timelib_sources="lib/astro.c lib/dow.c lib/parse_date.c lib/parse_tz.c lib/parse_posix.c
lib/timelib.c lib/tm2unixtime.c lib/unixtime2tm.c lib/parse_iso_intervals.c lib/interval.c" lib/timelib.c lib/tm2unixtime.c lib/unixtime2tm.c lib/parse_iso_intervals.c lib/interval.c"
diff --git a/ext/date/lib/parse_tz.c b/ext/date/lib/parse_tz.c diff --git a/ext/date/lib/parse_tz.c b/ext/date/lib/parse_tz.c
index e9bd0f136d..c04ff01adc 100644 index c7f93580d7..ec196a98b6 100644
--- a/ext/date/lib/parse_tz.c --- a/ext/date/lib/parse_tz.c
+++ b/ext/date/lib/parse_tz.c +++ b/ext/date/lib/parse_tz.c
@@ -26,8 +26,21 @@ @@ -26,9 +26,33 @@
#include "timelib.h" #include "timelib.h"
#include "timelib_private.h" #include "timelib_private.h"
@ -73,8 +77,20 @@ index e9bd0f136d..c04ff01adc 100644
+ +
+#include "php_scandir.h" +#include "php_scandir.h"
+ +
+static const unsigned char internal_utc[] = {
+ 0x54, 0x5a, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x55, 0x54, 0x43, 0x00, 0x54, 0x5a, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x54, 0x43, 0x00, 0x0a, 0x55, 0x54, 0x43,
+ 0x30, 0x0a
+};
+
+#else +#else
#define TIMELIB_SUPPORTS_V2DATA #define TIMELIB_SUPPORTS_V2DATA
#define TIMELIB_SUPPORT_SLIM_FILE
#include "timezonedb.h" #include "timezonedb.h"
+#endif +#endif
+ +
@ -82,7 +98,7 @@ index e9bd0f136d..c04ff01adc 100644
#if (defined(__APPLE__) || defined(__APPLE_CC__)) && (defined(__BIG_ENDIAN__) || defined(__LITTLE_ENDIAN__)) #if (defined(__APPLE__) || defined(__APPLE_CC__)) && (defined(__BIG_ENDIAN__) || defined(__LITTLE_ENDIAN__))
# if defined(__LITTLE_ENDIAN__) # if defined(__LITTLE_ENDIAN__)
@@ -94,6 +107,11 @@ static int read_php_preamble(const unsigned char **tzf, timelib_tzinfo *tz) @@ -95,6 +119,11 @@ static int read_php_preamble(const unsigned char **tzf, timelib_tzinfo *tz)
{ {
uint32_t version; uint32_t version;
@ -94,7 +110,7 @@ index e9bd0f136d..c04ff01adc 100644
/* read ID */ /* read ID */
version = (*tzf)[3] - '0'; version = (*tzf)[3] - '0';
*tzf += 4; *tzf += 4;
@@ -435,7 +453,467 @@ void timelib_dump_tzinfo(timelib_tzinfo *tz) @@ -577,7 +606,475 @@ void timelib_dump_tzinfo(timelib_tzinfo *tz)
} }
} }
@ -324,7 +340,6 @@ index e9bd0f136d..c04ff01adc 100644
+ return timelib_strcasecmp(alpha->id, beta->id); + return timelib_strcasecmp(alpha->id, beta->id);
+} +}
+ +
+
+/* Retrieve tzdata version. */ +/* Retrieve tzdata version. */
+static void retrieve_zone_version(timelib_tzdb *db) +static void retrieve_zone_version(timelib_tzdb *db)
+{ +{
@ -363,6 +378,7 @@ index e9bd0f136d..c04ff01adc 100644
+ } + }
+} +}
+ +
+
+/* Create the zone identifier index by trawling the filesystem. */ +/* Create the zone identifier index by trawling the filesystem. */
+static void create_zone_index(timelib_tzdb *db) +static void create_zone_index(timelib_tzdb *db)
+{ +{
@ -438,6 +454,9 @@ index e9bd0f136d..c04ff01adc 100644
+ +
+ qsort(db_index, index_next, sizeof *db_index, sysdbcmp); + qsort(db_index, index_next, sizeof *db_index, sysdbcmp);
+ +
+ if (!index_next) {
+ db_index[index_next++].id = strdup("UTC");
+ }
+ db->index = db_index; + db->index = db_index;
+ db->index_size = index_next; + db->index_size = index_next;
+ +
@ -454,7 +473,7 @@ index e9bd0f136d..c04ff01adc 100644
+ size_t n; + size_t n;
+ char *data, *p; + char *data, *p;
+ +
+ data = malloc(3 * sysdb->index_size + 7); + data = malloc(3 * sysdb->index_size + sizeof(FAKE_HEADER) - 1);
+ +
+ p = mempcpy(data, FAKE_HEADER, sizeof(FAKE_HEADER) - 1); + p = mempcpy(data, FAKE_HEADER, sizeof(FAKE_HEADER) - 1);
+ +
@ -544,7 +563,12 @@ index e9bd0f136d..c04ff01adc 100644
+ +
+ fd = open(fname, O_RDONLY); + fd = open(fname, O_RDONLY);
+ if (fd == -1) { + if (fd == -1) {
+ return NULL; + if (strcmp(timezone, "UTC")) {
+ return NULL;
+ } else {
+ *length = sizeof(internal_utc);
+ return internal_utc;
+ }
+ } else if (fstat(fd, &st) != 0 || !is_valid_tzfile(&st, fd)) { + } else if (fstat(fd, &st) != 0 || !is_valid_tzfile(&st, fd)) {
+ close(fd); + close(fd);
+ return NULL; + return NULL;
@ -563,7 +587,7 @@ index e9bd0f136d..c04ff01adc 100644
{ {
int left = 0, right = tzdb->index_size - 1; int left = 0, right = tzdb->index_size - 1;
@@ -461,9 +939,49 @@ static int seek_to_tz_position(const unsigned char **tzf, const char *timezone, @@ -603,9 +1100,49 @@ static int seek_to_tz_position(const unsigned char **tzf, const char *timezone,
return 0; return 0;
} }
@ -597,7 +621,7 @@ index e9bd0f136d..c04ff01adc 100644
+ if (timezonedb_system == NULL) { + if (timezonedb_system == NULL) {
+ timelib_tzdb *tmp = malloc(sizeof *tmp); + timelib_tzdb *tmp = malloc(sizeof *tmp);
+ +
+ tmp->version = "0.system"; + tmp->version = "0";
+ tmp->data = NULL; + tmp->data = NULL;
+ create_zone_index(tmp); + create_zone_index(tmp);
+ retrieve_zone_version(tmp); + retrieve_zone_version(tmp);
@ -613,7 +637,7 @@ index e9bd0f136d..c04ff01adc 100644
} }
const timelib_tzdb_index_entry *timelib_timezone_identifiers_list(const timelib_tzdb *tzdb, int *count) const timelib_tzdb_index_entry *timelib_timezone_identifiers_list(const timelib_tzdb *tzdb, int *count)
@@ -475,7 +993,30 @@ const timelib_tzdb_index_entry *timelib_timezone_identifiers_list(const timelib_ @@ -617,7 +1154,32 @@ const timelib_tzdb_index_entry *timelib_timezone_identifiers_list(const timelib_
int timelib_timezone_id_is_valid(const char *timezone, const timelib_tzdb *tzdb) int timelib_timezone_id_is_valid(const char *timezone, const timelib_tzdb *tzdb)
{ {
const unsigned char *tzf; const unsigned char *tzf;
@ -627,7 +651,9 @@ index e9bd0f136d..c04ff01adc 100644
+ if (timezone[0] == '\0' || strstr(timezone, "..") != NULL) { + if (timezone[0] == '\0' || strstr(timezone, "..") != NULL) {
+ return 0; + return 0;
+ } + }
+ + if (!strcmp(timezone, "UTC")) {
+ return 1;
+ }
+ if (system_location_table) { + if (system_location_table) {
+ if (find_zone_info(system_location_table, timezone) != NULL) { + if (find_zone_info(system_location_table, timezone) != NULL) {
+ /* found in cache */ + /* found in cache */
@ -645,7 +671,7 @@ index e9bd0f136d..c04ff01adc 100644
} }
static int skip_64bit_preamble(const unsigned char **tzf, timelib_tzinfo *tz) static int skip_64bit_preamble(const unsigned char **tzf, timelib_tzinfo *tz)
@@ -517,6 +1058,8 @@ static timelib_tzinfo* timelib_tzinfo_ctor(const char *name) @@ -662,6 +1224,8 @@ static timelib_tzinfo* timelib_tzinfo_ctor(const char *name)
timelib_tzinfo *timelib_parse_tzfile(const char *timezone, const timelib_tzdb *tzdb, int *error_code) timelib_tzinfo *timelib_parse_tzfile(const char *timezone, const timelib_tzdb *tzdb, int *error_code)
{ {
const unsigned char *tzf; const unsigned char *tzf;
@ -654,7 +680,7 @@ index e9bd0f136d..c04ff01adc 100644
timelib_tzinfo *tmp; timelib_tzinfo *tmp;
int version; int version;
int transitions_result, types_result; int transitions_result, types_result;
@@ -524,7 +1067,7 @@ timelib_tzinfo *timelib_parse_tzfile(const char *timezone, const timelib_tzdb *t @@ -669,7 +1233,7 @@ timelib_tzinfo *timelib_parse_tzfile(const char *timezone, const timelib_tzdb *t
*error_code = TIMELIB_ERROR_NO_ERROR; *error_code = TIMELIB_ERROR_NO_ERROR;
@ -663,9 +689,9 @@ index e9bd0f136d..c04ff01adc 100644
tmp = timelib_tzinfo_ctor(timezone); tmp = timelib_tzinfo_ctor(timezone);
version = read_preamble(&tzf, tmp, &type); version = read_preamble(&tzf, tmp, &type);
@@ -563,11 +1106,36 @@ timelib_tzinfo *timelib_parse_tzfile(const char *timezone, const timelib_tzdb *t @@ -712,11 +1276,38 @@ timelib_tzinfo *timelib_parse_tzfile(const char *timezone, const timelib_tzdb *t
return NULL;
} }
skip_posix_string(&tzf, tmp);
+#ifdef HAVE_SYSTEM_TZDATA +#ifdef HAVE_SYSTEM_TZDATA
+ if (memmap) { + if (memmap) {
@ -686,7 +712,9 @@ index e9bd0f136d..c04ff01adc 100644
+ } + }
+ +
+ /* Now done with the mmap segment - discard it. */ + /* Now done with the mmap segment - discard it. */
+ munmap(memmap, maplen); + if (memmap != internal_utc) {
+ munmap(memmap, maplen);
+ }
+ } else { + } else {
+#endif +#endif
if (type == TIMELIB_TZINFO_PHP) { if (type == TIMELIB_TZINFO_PHP) {
@ -701,10 +729,10 @@ index e9bd0f136d..c04ff01adc 100644
*error_code = TIMELIB_ERROR_NO_SUCH_TIMEZONE; *error_code = TIMELIB_ERROR_NO_SUCH_TIMEZONE;
tmp = NULL; tmp = NULL;
diff --git a/ext/date/php_date.c b/ext/date/php_date.c diff --git a/ext/date/php_date.c b/ext/date/php_date.c
index 2d5cffb963..389f09f313 100644 index 48c82bf7ec..443299c089 100644
--- a/ext/date/php_date.c --- a/ext/date/php_date.c
+++ b/ext/date/php_date.c +++ b/ext/date/php_date.c
@@ -457,7 +457,11 @@ PHP_MINFO_FUNCTION(date) @@ -490,7 +490,11 @@ PHP_MINFO_FUNCTION(date)
php_info_print_table_row(2, "date/time support", "enabled"); php_info_print_table_row(2, "date/time support", "enabled");
php_info_print_table_row(2, "timelib version", TIMELIB_ASCII_VERSION); php_info_print_table_row(2, "timelib version", TIMELIB_ASCII_VERSION);
php_info_print_table_row(2, "\"Olson\" Timezone Database Version", tzdb->version); php_info_print_table_row(2, "\"Olson\" Timezone Database Version", tzdb->version);

16
php-8.2.0-parser.patch Normal file
View File

@ -0,0 +1,16 @@
diff -up ./build/gen_stub.php.syslib ./build/gen_stub.php
--- ./build/gen_stub.php.syslib 2020-06-25 08:11:51.782046813 +0200
+++ ./build/gen_stub.php 2020-06-25 08:13:11.188860368 +0200
@@ -3265,6 +3265,12 @@ function initPhpParser() {
}
$isInitialized = true;
+
+ if (file_exists('/usr/share/php/PhpParser4/autoload.php')) {
+ require_once '/usr/share/php/PhpParser4/autoload.php';
+ return;
+ }
+
$version = "4.15.1";
$phpParserDir = __DIR__ . "/PHP-Parser-$version";
if (!is_dir($phpParserDir)) {

View File

@ -5,11 +5,6 @@
; All relative paths in this configuration file are relative to PHP's install ; All relative paths in this configuration file are relative to PHP's install
; prefix. ; prefix.
; Include one or more files. If glob(3) exists, it is used to include a bunch of
; files from a glob(3) pattern. This directive can be used everywhere in the
; file.
include=/etc/php-fpm.d/*.conf
;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;
; Global Options ; ; Global Options ;
;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;
@ -133,5 +128,8 @@ daemonize = yes
; used in logs and stats. There is no limitation on the number of pools which ; used in logs and stats. There is no limitation on the number of pools which
; FPM can handle. Your system will tell you anyway :) ; FPM can handle. Your system will tell you anyway :)
; See /etc/php-fpm.d/*.conf ; Include one or more files. If glob(3) exists, it is used to include a bunch of
; files from a glob(3) pattern. This directive can be used everywhere in the
; file.
include=/etc/php-fpm.d/*.conf

File diff suppressed because it is too large Load Diff

369
php.ini

File diff suppressed because it is too large Load Diff

344
php.spec
View File

@ -7,8 +7,8 @@
# #
# API/ABI check # API/ABI check
%global apiver 20200930 %global apiver 20220829
%global zendver 20200930 %global zendver 20220829
%global pdover 20170320 %global pdover 20170320
# we don't want -z defs linker flag # we don't want -z defs linker flag
@ -18,7 +18,7 @@
%global _hardened_build 1 %global _hardened_build 1
# version used for php embedded library soname # version used for php embedded library soname
%global embed_version 8.0 %global embed_version 8.2
%global mysql_sock %(mysql_config --socket 2>/dev/null || echo /var/lib/mysql/mysql.sock) %global mysql_sock %(mysql_config --socket 2>/dev/null || echo /var/lib/mysql/mysql.sock)
@ -33,28 +33,38 @@
# needed at srpm build time, when httpd-devel not yet installed # needed at srpm build time, when httpd-devel not yet installed
%{!?_httpd_mmn: %{expand: %%global _httpd_mmn %%(cat %{_includedir}/httpd/.mmn 2>/dev/null || echo 0-0)}} %{!?_httpd_mmn: %{expand: %%global _httpd_mmn %%(cat %{_includedir}/httpd/.mmn 2>/dev/null || echo 0-0)}}
%global with_modphp 1
%if 0%{?fedora} %if 0%{?fedora}
%global with_zts 1 # Enabled by default on Fedora
%global with_firebird 1 %bcond_without zts
%global with_imap 1 %ifarch s390x
%global with_freetds 1 # https://bugzilla.redhat.com/show_bug.cgi?id=1969393
%global with_sodium 1 # firebird have ExcludeArch: s390x
%global with_pspell 1 %bcond_with firebird
%global with_lmdb 1
%global with_tidy 1
%else %else
%global with_zts 0 %bcond_without firebird
%global with_firebird 0
%global with_imap 0
%global with_freetds 0
%global with_sodium 0
%global with_pspell 0
%global with_lmdb 0
%global with_tidy 0
%endif %endif
%bcond_without freetds
%bcond_without sodium
%bcond_without pspell
%bcond_without tidy
%bcond_without qdbm
%else
# Disabled by default on RHEL
%bcond_with zts
%bcond_with firebird
%bcond_with freetds
%bcond_with sodium
%bcond_with pspell
%bcond_with tidy
%bcond_with qdbm
%endif
%bcond_with imap
%bcond_without lmdb
# RHEL-8 only
%bcond_without modphp
%bcond_without db4
%global upver 8.0.27 %global upver 8.2.13
#global rcver RC1 #global rcver RC1
Summary: PHP scripting language for creating dynamic web sites Summary: PHP scripting language for creating dynamic web sites
@ -67,7 +77,8 @@ Release: 1%{?dist}
# main/snprintf.c, main/spprintf.c and main/rfc1867.c are ASL 1.0 # main/snprintf.c, main/spprintf.c and main/rfc1867.c are ASL 1.0
# ext/date/lib is MIT # ext/date/lib is MIT
# Zend/zend_sort is NCSA # Zend/zend_sort is NCSA
License: PHP and Zend and BSD and MIT and ASL 1.0 and NCSA # Zend/asm is Boost
License: PHP-3.01 AND Zend-2.0 AND BSD-2-Clause AND MIT AND Apache-1.0 AND NCSA AND BSL-1.0
URL: http://www.php.net/ URL: http://www.php.net/
Source0: https://www.php.net/distributions/php-%{upver}%{?rcver}.tar.xz Source0: https://www.php.net/distributions/php-%{upver}%{?rcver}.tar.xz
@ -94,27 +105,20 @@ Source53: 20-ffi.ini
Patch1: php-7.4.0-httpd.patch Patch1: php-7.4.0-httpd.patch
Patch5: php-7.2.0-includedir.patch Patch5: php-7.2.0-includedir.patch
Patch6: php-8.0.0-embed.patch Patch6: php-8.0.0-embed.patch
Patch8: php-7.4.0-libdb.patch Patch8: php-8.1.0-libdb.patch
# get rid of deprecated functions from 8.1
Patch9: php-8.0.6-deprecated.patch
# Functional changes # Functional changes
# Use system nikic/php-parser
Patch41: php-8.2.0-parser.patch
# use system tzdata # use system tzdata
Patch42: php-8.0.10-systzdata-v21.patch Patch42: php-8.1.0-systzdata-v24.patch
# See http://bugs.php.net/53436 # See http://bugs.php.net/53436
Patch43: php-7.4.0-phpize.patch Patch43: php-7.4.0-phpize.patch
# Use -lldap_r for OpenLDAP # Use -lldap_r for OpenLDAP
Patch45: php-7.4.0-ldap_r.patch Patch45: php-7.4.0-ldap_r.patch
# drop "Configure command" from phpinfo output # drop "Configure command" from phpinfo output
# and only use gcc (instead of full version) # and only use gcc (instead of full version)
Patch47: php-8.0.0-phpinfo.patch Patch47: php-8.1.0-phpinfo.patch
# add sha256 / sha512 security protocol, from 8.1
Patch48: php-8.0.10-snmp-sha.patch
# switch phar to use sha256 signature by default, from 8.1
# implement openssl_256 and openssl_512 for phar signatures, from 8.1
Patch49: php-8.0.10-phar-sha.patch
# use system libxcrypt
Patch51: php-8.0.13-crypt.patch
# Upstream fixes (100+) # Upstream fixes (100+)
@ -136,7 +140,7 @@ BuildRequires: httpd-filesystem
BuildRequires: nginx-filesystem BuildRequires: nginx-filesystem
BuildRequires: libstdc++-devel BuildRequires: libstdc++-devel
# no pkgconfig to avoid compat-openssl10 # no pkgconfig to avoid compat-openssl10
BuildRequires: openssl-devel >= 1.0.1 BuildRequires: openssl-devel >= 1.0.2
BuildRequires: pkgconfig(sqlite3) >= 3.7.4 BuildRequires: pkgconfig(sqlite3) >= 3.7.4
BuildRequires: pkgconfig(zlib) >= 1.2.0.4 BuildRequires: pkgconfig(zlib) >= 1.2.0.4
BuildRequires: smtpdaemon BuildRequires: smtpdaemon
@ -155,19 +159,27 @@ BuildRequires: libtool-ltdl-devel
BuildRequires: systemtap-sdt-devel BuildRequires: systemtap-sdt-devel
# used for tests # used for tests
BuildRequires: %{_bindir}/ps BuildRequires: %{_bindir}/ps
BuildRequires: tzdata
%if %{with_zts} %if %{with zts}
Provides: php-zts = %{version}-%{release} Provides: php-zts = %{version}-%{release}
Provides: php-zts%{?_isa} = %{version}-%{release} Provides: php-zts%{?_isa} = %{version}-%{release}
%endif %endif
%if %{with_modphp} %if %{with modphp}
Requires: httpd-mmn = %{_httpd_mmn} Requires: httpd-mmn = %{_httpd_mmn}
Provides: mod_php = %{version}-%{release} Provides: mod_php = %{version}-%{release}
# To ensure correct /var/lib/php/session ownership: # To ensure correct /var/lib/php/session ownership:
Requires(pre): httpd-filesystem Requires(pre): httpd-filesystem
# php engine for Apache httpd webserver # php engine for Apache httpd webserver
Provides: php(httpd) Provides: php(httpd)
# mod_php is deprecated, no package should requires php or mod_php
# all packages must requires used SAPI (cli, fpm, embded..)
# and used extrensions (mysqli, mbstring, xmlwriter...)
Provides: deprecated()
%else
# preserve old behavior
Recommends: httpd
%endif %endif
Requires: php-common%{?_isa} = %{version}-%{release} Requires: php-common%{?_isa} = %{version}-%{release}
# For backwards-compatibility, pull the "php" command # For backwards-compatibility, pull the "php" command
@ -179,7 +191,7 @@ Recommends: php-fpm%{?_isa} = %{version}-%{release}
Recommends: php-mbstring%{?_isa} = %{version}-%{release} Recommends: php-mbstring%{?_isa} = %{version}-%{release}
Recommends: php-opcache%{?_isa} = %{version}-%{release} Recommends: php-opcache%{?_isa} = %{version}-%{release}
Recommends: php-pdo%{?_isa} = %{version}-%{release} Recommends: php-pdo%{?_isa} = %{version}-%{release}
%if %{with_sodium} %if %{with sodium}
Recommends: php-sodium%{?_isa} = %{version}-%{release} Recommends: php-sodium%{?_isa} = %{version}-%{release}
%endif %endif
Recommends: php-xml%{?_isa} = %{version}-%{release} Recommends: php-xml%{?_isa} = %{version}-%{release}
@ -192,16 +204,16 @@ offers built-in database integration for several commercial and
non-commercial database management systems, so writing a non-commercial database management systems, so writing a
database-enabled webpage with PHP is fairly simple. The most common database-enabled webpage with PHP is fairly simple. The most common
use of PHP coding is probably as a replacement for CGI scripts. use of PHP coding is probably as a replacement for CGI scripts.
%if %{with_modphp} %if %{with modphp}
The php package contains the module (often referred to as mod_php) The php package contains the module (often referred to as mod_php)
which adds support for the PHP language to Apache HTTP Server when which adds support for the PHP language to Apache HTTP Server when
running in prefork mode. running in prefork mode. This module is deprecated.
%endif %endif
%package cli %package cli
Summary: Command-line interface for PHP Summary: Command-line interface for PHP
# sapi/cli/ps_title.c is PostgreSQL # sapi/cli/ps_title.c is PostgreSQL
License: PHP and Zend and BSD and MIT and ASL 1.0 and NCSA and PostgreSQL License: PHP-3.01 AND Zend-2.0 AND BSD-2-Clause AND MIT AND Apache-1.0 AND NCSA AND PostgreSQL
Requires: php-common%{?_isa} = %{version}-%{release} Requires: php-common%{?_isa} = %{version}-%{release}
Provides: php-cgi = %{version}-%{release}, php-cgi%{?_isa} = %{version}-%{release} Provides: php-cgi = %{version}-%{release}, php-cgi%{?_isa} = %{version}-%{release}
Provides: php-pcntl, php-pcntl%{?_isa} Provides: php-pcntl, php-pcntl%{?_isa}
@ -224,8 +236,8 @@ The php-dbg package contains the interactive PHP debugger.
Summary: PHP FastCGI Process Manager Summary: PHP FastCGI Process Manager
BuildRequires: libacl-devel BuildRequires: libacl-devel
BuildRequires: pkgconfig(libsystemd) >= 209 BuildRequires: pkgconfig(libsystemd) >= 209
BuildRequires: pkgconfig(libselinux)
Requires: php-common%{?_isa} = %{version}-%{release} Requires: php-common%{?_isa} = %{version}-%{release}
Requires(pre): /usr/sbin/useradd
%{?systemd_requires} %{?systemd_requires}
# To ensure correct /var/lib/php/session ownership: # To ensure correct /var/lib/php/session ownership:
Requires(pre): httpd-filesystem Requires(pre): httpd-filesystem
@ -247,7 +259,8 @@ Summary: Common files for PHP
# All files licensed under PHP version 3.01, except # All files licensed under PHP version 3.01, except
# fileinfo is licensed under PHP version 3.0 # fileinfo is licensed under PHP version 3.0
# regex, libmagic are licensed under BSD # regex, libmagic are licensed under BSD
License: PHP and BSD License: PHP-3.01 AND BSD-2-Clause
Requires: tzdata
# ABI/API check - Arch specific # ABI/API check - Arch specific
Provides: php(api) = %{apiver}-%{__isa_bits} Provides: php(api) = %{apiver}-%{__isa_bits}
Provides: php(zend-abi) = %{zendver}-%{__isa_bits} Provides: php(zend-abi) = %{zendver}-%{__isa_bits}
@ -275,6 +288,7 @@ Provides: php-libxml, php-libxml%{?_isa}
Provides: php-openssl, php-openssl%{?_isa} Provides: php-openssl, php-openssl%{?_isa}
Provides: php-phar, php-phar%{?_isa} Provides: php-phar, php-phar%{?_isa}
Provides: php-pcre, php-pcre%{?_isa} Provides: php-pcre, php-pcre%{?_isa}
Provides: php-random, php-random%{?_isa}
Provides: php-reflection, php-reflection%{?_isa} Provides: php-reflection, php-reflection%{?_isa}
Provides: php-session, php-session%{?_isa} Provides: php-session, php-session%{?_isa}
Provides: php-sockets, php-sockets%{?_isa} Provides: php-sockets, php-sockets%{?_isa}
@ -300,15 +314,15 @@ Requires: libtool
# see "php-config --libs" # see "php-config --libs"
Requires: krb5-devel%{?_isa} Requires: krb5-devel%{?_isa}
Requires: libxml2-devel%{?_isa} Requires: libxml2-devel%{?_isa}
Requires: openssl-devel%{?_isa} >= 1.0.1 Requires: openssl-devel%{?_isa} >= 1.0.2
Requires: pcre2-devel%{?_isa} Requires: pcre2-devel%{?_isa}
Requires: zlib-devel%{?_isa} Requires: zlib-devel%{?_isa}
Obsoletes: php-pecl-json-devel < %{version} %if %{with zts}
Obsoletes: php-pecl-jsonc-devel < %{version}
%if %{with_zts}
Provides: php-zts-devel = %{version}-%{release} Provides: php-zts-devel = %{version}-%{release}
Provides: php-zts-devel%{?_isa} = %{version}-%{release} Provides: php-zts-devel%{?_isa} = %{version}-%{release}
%endif %endif
Recommends: php-nikic-php-parser4 >= 4.15.1
%description devel %description devel
The php-devel package contains the files needed for building PHP The php-devel package contains the files needed for building PHP
@ -317,7 +331,7 @@ need to install this package.
%package opcache %package opcache
Summary: The Zend OPcache Summary: The Zend OPcache
License: PHP License: PHP-3.01
Requires: php-common%{?_isa} = %{version}-%{release} Requires: php-common%{?_isa} = %{version}-%{release}
Provides: php-pecl-zendopcache = %{version} Provides: php-pecl-zendopcache = %{version}
Provides: php-pecl-zendopcache%{?_isa} = %{version} Provides: php-pecl-zendopcache%{?_isa} = %{version}
@ -331,15 +345,15 @@ bytecode in the shared memory. This eliminates the stages of reading code from
the disk and compiling it on future access. In addition, it applies a few the disk and compiling it on future access. In addition, it applies a few
bytecode optimization patterns that make code execution faster. bytecode optimization patterns that make code execution faster.
%if %{with_imap} %if %{with imap}
%package imap %package imap
Summary: A module for PHP applications that use IMAP Summary: A module for PHP applications that use IMAP
# All files licensed under PHP version 3.01 # All files licensed under PHP version 3.01
License: PHP License: PHP-3.01
Requires: php-common%{?_isa} = %{version}-%{release} Requires: php-common%{?_isa} = %{version}-%{release}
BuildRequires: pkgconfig(krb5) BuildRequires: pkgconfig(krb5)
BuildRequires: pkgconfig(krb5-gssapi) BuildRequires: pkgconfig(krb5-gssapi)
BuildRequires: openssl-devel >= 1.0.1 BuildRequires: openssl-devel >= 1.0.2
BuildRequires: libc-client-devel BuildRequires: libc-client-devel
%description imap %description imap
@ -351,11 +365,11 @@ messages on mail servers. PHP is an HTML-embedded scripting language.
%package ldap %package ldap
Summary: A module for PHP applications that use LDAP Summary: A module for PHP applications that use LDAP
# All files licensed under PHP version 3.01 # All files licensed under PHP version 3.01
License: PHP License: PHP-3.01
Requires: php-common%{?_isa} = %{version}-%{release} Requires: php-common%{?_isa} = %{version}-%{release}
BuildRequires: pkgconfig(libsasl2) BuildRequires: pkgconfig(libsasl2)
BuildRequires: openldap-devel BuildRequires: openldap-devel
BuildRequires: openssl-devel >= 1.0.1 BuildRequires: openssl-devel >= 1.0.2
%description ldap %description ldap
The php-ldap adds Lightweight Directory Access Protocol (LDAP) The php-ldap adds Lightweight Directory Access Protocol (LDAP)
@ -366,7 +380,7 @@ language.
%package pdo %package pdo
Summary: A database access abstraction module for PHP applications Summary: A database access abstraction module for PHP applications
# All files licensed under PHP version 3.01 # All files licensed under PHP version 3.01
License: PHP License: PHP-3.01
Requires: php-common%{?_isa} = %{version}-%{release} Requires: php-common%{?_isa} = %{version}-%{release}
# ABI/API check - Arch specific # ABI/API check - Arch specific
Provides: php-pdo-abi = %{pdover}-%{__isa_bits} Provides: php-pdo-abi = %{pdover}-%{__isa_bits}
@ -383,7 +397,7 @@ databases.
%package mysqlnd %package mysqlnd
Summary: A module for PHP applications that use MySQL databases Summary: A module for PHP applications that use MySQL databases
# All files licensed under PHP version 3.01 # All files licensed under PHP version 3.01
License: PHP License: PHP-3.01
Requires: php-pdo%{?_isa} = %{version}-%{release} Requires: php-pdo%{?_isa} = %{version}-%{release}
Provides: php_database Provides: php_database
Provides: php-mysqli = %{version}-%{release} Provides: php-mysqli = %{version}-%{release}
@ -402,12 +416,12 @@ This package use the MySQL Native Driver
%package pgsql %package pgsql
Summary: A PostgreSQL database module for PHP Summary: A PostgreSQL database module for PHP
# All files licensed under PHP version 3.01 # All files licensed under PHP version 3.01
License: PHP License: PHP-3.01
Requires: php-pdo%{?_isa} = %{version}-%{release} Requires: php-pdo%{?_isa} = %{version}-%{release}
Provides: php_database Provides: php_database
Provides: php-pdo_pgsql, php-pdo_pgsql%{?_isa} Provides: php-pdo_pgsql, php-pdo_pgsql%{?_isa}
BuildRequires: krb5-devel BuildRequires: krb5-devel
BuildRequires: openssl-devel >= 1.0.1 BuildRequires: openssl-devel >= 1.0.2
BuildRequires: libpq-devel BuildRequires: libpq-devel
%description pgsql %description pgsql
@ -421,7 +435,7 @@ php package.
%package process %package process
Summary: Modules for PHP script using system process interfaces Summary: Modules for PHP script using system process interfaces
# All files licensed under PHP version 3.01 # All files licensed under PHP version 3.01
License: PHP License: PHP-3.01
Requires: php-common%{?_isa} = %{version}-%{release} Requires: php-common%{?_isa} = %{version}-%{release}
Provides: php-posix, php-posix%{?_isa} Provides: php-posix, php-posix%{?_isa}
Provides: php-shmop, php-shmop%{?_isa} Provides: php-shmop, php-shmop%{?_isa}
@ -438,7 +452,7 @@ communication.
Summary: A module for PHP applications that use ODBC databases Summary: A module for PHP applications that use ODBC databases
# All files licensed under PHP version 3.01, except # All files licensed under PHP version 3.01, except
# pdo_odbc is licensed under PHP version 3.0 # pdo_odbc is licensed under PHP version 3.0
License: PHP License: PHP-3.01
Requires: php-pdo%{?_isa} = %{version}-%{release} Requires: php-pdo%{?_isa} = %{version}-%{release}
Provides: php_database Provides: php_database
Provides: php-pdo_odbc, php-pdo_odbc%{?_isa} Provides: php-pdo_odbc, php-pdo_odbc%{?_isa}
@ -456,7 +470,7 @@ package.
%package soap %package soap
Summary: A module for PHP applications that use the SOAP protocol Summary: A module for PHP applications that use the SOAP protocol
# All files licensed under PHP version 3.01 # All files licensed under PHP version 3.01
License: PHP License: PHP-3.01
Requires: php-common%{?_isa} = %{version}-%{release} Requires: php-common%{?_isa} = %{version}-%{release}
BuildRequires: pkgconfig(libxml-2.0) BuildRequires: pkgconfig(libxml-2.0)
@ -464,11 +478,11 @@ BuildRequires: pkgconfig(libxml-2.0)
The php-soap package contains a dynamic shared object that will add The php-soap package contains a dynamic shared object that will add
support to PHP for using the SOAP web services protocol. support to PHP for using the SOAP web services protocol.
%if %{with_firebird} %if %{with firebird}
%package pdo-firebird %package pdo-firebird
Summary: PDO driver for Interbase/Firebird databases Summary: PDO driver for Interbase/Firebird databases
# All files licensed under PHP version 3.01 # All files licensed under PHP version 3.01
License: PHP License: PHP-3.01
# for fb_config command # for fb_config command
BuildRequires: firebird-devel BuildRequires: firebird-devel
Requires: php-pdo%{?_isa} = %{version}-%{release} Requires: php-pdo%{?_isa} = %{version}-%{release}
@ -483,7 +497,7 @@ Interbase/Firebird databases.
%package snmp %package snmp
Summary: A module for PHP applications that query SNMP-managed devices Summary: A module for PHP applications that query SNMP-managed devices
# All files licensed under PHP version 3.01 # All files licensed under PHP version 3.01
License: PHP License: PHP-3.01
Requires: php-common%{?_isa} = %{version}-%{release}, net-snmp Requires: php-common%{?_isa} = %{version}-%{release}, net-snmp
BuildRequires: net-snmp-devel BuildRequires: net-snmp-devel
@ -496,7 +510,7 @@ will need to install this package and the php package.
%package xml %package xml
Summary: A module for PHP applications which use XML Summary: A module for PHP applications which use XML
# All files licensed under PHP version 3.01 # All files licensed under PHP version 3.01
License: PHP License: PHP-3.01
Requires: php-common%{?_isa} = %{version}-%{release} Requires: php-common%{?_isa} = %{version}-%{release}
Provides: php-dom, php-dom%{?_isa} Provides: php-dom, php-dom%{?_isa}
Provides: php-domxml, php-domxml%{?_isa} Provides: php-domxml, php-domxml%{?_isa}
@ -518,7 +532,7 @@ Summary: A module for PHP applications which need multi-byte string handling
# All files licensed under PHP version 3.01, except # All files licensed under PHP version 3.01, except
# libmbfl is licensed under LGPLv2 # libmbfl is licensed under LGPLv2
# ucgendat is licensed under OpenLDAP # ucgendat is licensed under OpenLDAP
License: PHP and LGPLv2 and OpenLDAP License: PHP-3.01 AND LGPL-2.1-only AND OLDAP-2.8
BuildRequires: pkgconfig(oniguruma) >= 6.8 BuildRequires: pkgconfig(oniguruma) >= 6.8
Provides: bundled(libmbfl) = 1.3.2 Provides: bundled(libmbfl) = 1.3.2
Requires: php-common%{?_isa} = %{version}-%{release} Requires: php-common%{?_isa} = %{version}-%{release}
@ -530,7 +544,7 @@ support for multi-byte string handling to PHP.
%package gd %package gd
Summary: A module for PHP applications for using the gd graphics library Summary: A module for PHP applications for using the gd graphics library
# All files licensed under PHP version 3.01 # All files licensed under PHP version 3.01
License: PHP License: PHP-3.01
Requires: php-common%{?_isa} = %{version}-%{release} Requires: php-common%{?_isa} = %{version}-%{release}
BuildRequires: pkgconfig(gdlib) >= 2.1.1 BuildRequires: pkgconfig(gdlib) >= 2.1.1
@ -542,7 +556,7 @@ support for using the gd graphics library to PHP.
Summary: A module for PHP applications for using the bcmath library Summary: A module for PHP applications for using the bcmath library
# All files licensed under PHP version 3.01, except # All files licensed under PHP version 3.01, except
# libbcmath is licensed under LGPLv2+ # libbcmath is licensed under LGPLv2+
License: PHP and LGPLv2+ License: PHP-3.01 AND LGPL-2.1-or-later
Requires: php-common%{?_isa} = %{version}-%{release} Requires: php-common%{?_isa} = %{version}-%{release}
%description bcmath %description bcmath
@ -552,7 +566,7 @@ support for using the bcmath library to PHP.
%package gmp %package gmp
Summary: A module for PHP applications for using the GNU MP library Summary: A module for PHP applications for using the GNU MP library
# All files licensed under PHP version 3.01 # All files licensed under PHP version 3.01
License: PHP License: PHP-3.01
BuildRequires: gmp-devel BuildRequires: gmp-devel
Requires: php-common%{?_isa} = %{version}-%{release} Requires: php-common%{?_isa} = %{version}-%{release}
@ -563,23 +577,28 @@ using the GNU MP library.
%package dba %package dba
Summary: A database abstraction layer module for PHP applications Summary: A database abstraction layer module for PHP applications
# All files licensed under PHP version 3.01 # All files licensed under PHP version 3.01
License: PHP License: PHP-3.01
%if %{with db4}
BuildRequires: libdb-devel BuildRequires: libdb-devel
%endif
BuildRequires: tokyocabinet-devel BuildRequires: tokyocabinet-devel
%if %{with_lmdb} %if %{with lmdb}
BuildRequires: lmdb-devel BuildRequires: lmdb-devel
%endif %endif
%if %{with qdbm}
BuildRequires: qdbm-devel
%endif
Requires: php-common%{?_isa} = %{version}-%{release} Requires: php-common%{?_isa} = %{version}-%{release}
%description dba %description dba
The php-dba package contains a dynamic shared object that will add The php-dba package contains a dynamic shared object that will add
support for using the DBA database abstraction layer to PHP. support for using the DBA database abstraction layer to PHP.
%if %{with_tidy} %if %{with tidy}
%package tidy %package tidy
Summary: Standard PHP module provides tidy library support Summary: Standard PHP module provides tidy library support
# All files licensed under PHP version 3.01 # All files licensed under PHP version 3.01
License: PHP License: PHP-3.01
Requires: php-common%{?_isa} = %{version}-%{release} Requires: php-common%{?_isa} = %{version}-%{release}
BuildRequires: libtidy-devel BuildRequires: libtidy-devel
@ -588,11 +607,11 @@ The php-tidy package contains a dynamic shared object that will add
support for using the tidy library to PHP. support for using the tidy library to PHP.
%endif %endif
%if %{with_freetds} %if %{with freetds}
%package pdo-dblib %package pdo-dblib
Summary: PDO driver for Microsoft SQL Server and Sybase databases Summary: PDO driver for Microsoft SQL Server and Sybase databases
# All files licensed under PHP version 3.01 # All files licensed under PHP version 3.01
License: PHP License: PHP-3.01
Requires: php-pdo%{?_isa} = %{version}-%{release} Requires: php-pdo%{?_isa} = %{version}-%{release}
BuildRequires: freetds-devel BuildRequires: freetds-devel
Provides: php-pdo_dblib, php-pdo_dblib%{?_isa} Provides: php-pdo_dblib, php-pdo_dblib%{?_isa}
@ -614,11 +633,11 @@ Provides: php-embedded-devel%{?_isa} = %{version}-%{release}
The php-embedded package contains a library which can be embedded The php-embedded package contains a library which can be embedded
into applications to provide PHP scripting language support. into applications to provide PHP scripting language support.
%if %{with_pspell} %if %{with pspell}
%package pspell %package pspell
Summary: A module for PHP applications for using pspell interfaces Summary: A module for PHP applications for using pspell interfaces
# All files licensed under PHP version 3.01 # All files licensed under PHP version 3.01
License: PHP License: PHP-3.01
Requires: php-common%{?_isa} = %{version}-%{release} Requires: php-common%{?_isa} = %{version}-%{release}
BuildRequires: aspell-devel >= 0.50.0 BuildRequires: aspell-devel >= 0.50.0
@ -630,7 +649,7 @@ support for using the pspell library to PHP.
%package intl %package intl
Summary: Internationalization extension for PHP applications Summary: Internationalization extension for PHP applications
# All files licensed under PHP version 3.01 # All files licensed under PHP version 3.01
License: PHP License: PHP-3.01
Requires: php-common%{?_isa} = %{version}-%{release} Requires: php-common%{?_isa} = %{version}-%{release}
BuildRequires: pkgconfig(icu-i18n) >= 50.1 BuildRequires: pkgconfig(icu-i18n) >= 50.1
BuildRequires: pkgconfig(icu-io) >= 50.1 BuildRequires: pkgconfig(icu-io) >= 50.1
@ -643,7 +662,7 @@ support for using the ICU library to PHP.
%package enchant %package enchant
Summary: Enchant spelling extension for PHP applications Summary: Enchant spelling extension for PHP applications
# All files licensed under PHP version 3.0 # All files licensed under PHP version 3.0
License: PHP License: PHP-3.01
Requires: php-common%{?_isa} = %{version}-%{release} Requires: php-common%{?_isa} = %{version}-%{release}
BuildRequires: pkgconfig(enchant-2) BuildRequires: pkgconfig(enchant-2)
@ -651,11 +670,11 @@ BuildRequires: pkgconfig(enchant-2)
The php-enchant package contains a dynamic shared object that will add The php-enchant package contains a dynamic shared object that will add
support for using the enchant library to PHP. support for using the enchant library to PHP.
%if %{with_sodium} %if %{with sodium}
%package sodium %package sodium
Summary: Wrapper for the Sodium cryptographic library Summary: Wrapper for the Sodium cryptographic library
# All files licensed under PHP version 3.0.1 # All files licensed under PHP version 3.0.1
License: PHP License: PHP-3.01
BuildRequires: pkgconfig(libsodium) >= 1.0.9 BuildRequires: pkgconfig(libsodium) >= 1.0.9
Requires: php-common%{?_isa} = %{version}-%{release} Requires: php-common%{?_isa} = %{version}-%{release}
@ -672,8 +691,7 @@ low-level PHP extension for the libsodium cryptographic library.
%package ffi %package ffi
Summary: Foreign Function Interface Summary: Foreign Function Interface
# All files licensed under PHP version 3.0.1 # All files licensed under PHP version 3.0.1
License: PHP License: PHP-3.01
Group: System Environment/Libraries
BuildRequires: pkgconfig(libffi) BuildRequires: pkgconfig(libffi)
Requires: php-common%{?_isa} = %{version}-%{release} Requires: php-common%{?_isa} = %{version}-%{release}
@ -691,33 +709,29 @@ in pure PHP.
%setup -q -n php-%{upver}%{?rcver} %setup -q -n php-%{upver}%{?rcver}
%patch1 -p1 -b .mpmcheck %patch -P1 -p1 -b .mpmcheck
%patch5 -p1 -b .includedir %patch -P5 -p1 -b .includedir
%patch6 -p1 -b .embed %patch -P6 -p1 -b .embed
%patch8 -p1 -b .libdb %patch -P8 -p1 -b .libdb
%patch9 -p1 -b .deprecated
%patch42 -p1 -b .systzdata %patch -P41 -p1 -b .syslib
%patch43 -p1 -b .headers %patch -P42 -p1 -b .systzdata
%if 0%{?fedora} >= 18 || 0%{?rhel} >= 7 %patch -P43 -p1 -b .headers
%patch45 -p1 -b .ldap_r %patch -P45 -p1 -b .ldap_r
%endif %patch -P47 -p1 -b .phpinfo
%patch47 -p1 -b .phpinfo
%patch48 -p1 -b .sha
%patch49 -p1 -b .pharsha
%patch51 -p1 -b .libxcrypt
# upstream patches # upstream patches
# security patches # security patches
# Fixes for tests # Fixes for tests
%patch300 -p1 -b .datetests %patch -P300 -p1 -b .datetests
# Prevent %%doc confusion over LICENSE files # Prevent %%doc confusion over LICENSE files
cp Zend/LICENSE ZEND_LICENSE cp Zend/LICENSE ZEND_LICENSE
cp TSRM/LICENSE TSRM_LICENSE cp TSRM/LICENSE TSRM_LICENSE
cp Zend/asm/LICENSE BOOST_LICENSE
cp sapi/fpm/LICENSE fpm_LICENSE cp sapi/fpm/LICENSE fpm_LICENSE
cp ext/mbstring/libmbfl/LICENSE libmbfl_LICENSE cp ext/mbstring/libmbfl/LICENSE libmbfl_LICENSE
cp ext/fileinfo/libmagic/LICENSE libmagic_LICENSE cp ext/fileinfo/libmagic/LICENSE libmagic_LICENSE
@ -726,10 +740,10 @@ cp ext/date/lib/LICENSE.rst timelib_LICENSE
# Multiple builds for multiple SAPIs # Multiple builds for multiple SAPIs
mkdir build-cgi build-embedded \ mkdir build-cgi build-embedded \
%if %{with_modphp} %if %{with modphp}
build-apache \ build-apache \
%endif %endif
%if %{with_zts} %if %{with zts}
build-zts build-ztscli \ build-zts build-ztscli \
%endif %endif
build-fpm build-fpm
@ -739,9 +753,8 @@ mkdir build-cgi build-embedded \
rm ext/date/tests/timezone_location_get.phpt rm ext/date/tests/timezone_location_get.phpt
rm ext/date/tests/timezone_version_get.phpt rm ext/date/tests/timezone_version_get.phpt
rm ext/date/tests/timezone_version_get_basic1.phpt rm ext/date/tests/timezone_version_get_basic1.phpt
rm ext/date/tests/bug80963.phpt
rm ext/date/tests/bug33415-2.phpt rm ext/date/tests/bug33415-2.phpt
# expired cert TODO fixed in 8.0.15
rm ext/openssl/tests/openssl_x509_checkpurpose_basic.phpt
# fails sometime # fails sometime
rm ext/sockets/tests/mcast_ipv?_recv.phpt rm ext/sockets/tests/mcast_ipv?_recv.phpt
# cause stack exhausion # cause stack exhausion
@ -889,7 +902,7 @@ build --libdir=%{_libdir}/php \
--enable-pcntl \ --enable-pcntl \
--enable-opcache \ --enable-opcache \
--enable-phpdbg \ --enable-phpdbg \
%if %{with_imap} %if %{with imap}
--with-imap=shared --with-imap-ssl \ --with-imap=shared --with-imap-ssl \
%endif %endif
--enable-mbstring=shared \ --enable-mbstring=shared \
@ -901,10 +914,16 @@ build --libdir=%{_libdir}/php \
--enable-bcmath=shared \ --enable-bcmath=shared \
--with-bz2=shared \ --with-bz2=shared \
--enable-ctype=shared \ --enable-ctype=shared \
--enable-dba=shared --with-db4=%{_prefix} \ --enable-dba=shared \
%if %{with db4}
--with-db4=%{_prefix} \
%endif
--with-tcadb=%{_prefix} \ --with-tcadb=%{_prefix} \
%if %{with_lmdb} %if %{with lmdb}
--with-lmdb=%{_prefix} \ --with-lmdb=%{_prefix} \
%endif
%if %{with qdbm}
--with-qdbm=%{_prefix} \
%endif %endif
--enable-exif=shared \ --enable-exif=shared \
--enable-ftp=shared \ --enable-ftp=shared \
@ -916,7 +935,7 @@ build --libdir=%{_libdir}/php \
--enable-mysqlnd=shared \ --enable-mysqlnd=shared \
--with-mysqli=shared,mysqlnd \ --with-mysqli=shared,mysqlnd \
--with-mysql-sock=%{mysql_sock} \ --with-mysql-sock=%{mysql_sock} \
%if %{with_firebird} %if %{with firebird}
--with-pdo-firebird=shared \ --with-pdo-firebird=shared \
%endif %endif
--enable-dom=shared \ --enable-dom=shared \
@ -933,17 +952,17 @@ build --libdir=%{_libdir}/php \
--with-pdo-mysql=shared,mysqlnd \ --with-pdo-mysql=shared,mysqlnd \
--with-pdo-pgsql=shared,%{_prefix} \ --with-pdo-pgsql=shared,%{_prefix} \
--with-pdo-sqlite=shared \ --with-pdo-sqlite=shared \
%if %{with_freetds} %if %{with freetds}
--with-pdo-dblib=shared,%{_prefix} \ --with-pdo-dblib=shared,%{_prefix} \
%endif %endif
--with-sqlite3=shared \ --with-sqlite3=shared \
--without-readline \ --without-readline \
--with-libedit \ --with-libedit \
%if %{with_pspell} %if %{with pspell}
--with-pspell=shared \ --with-pspell=shared \
%endif %endif
--enable-phar=shared \ --enable-phar=shared \
%if %{with_tidy} %if %{with tidy}
--with-tidy=shared,%{_prefix} \ --with-tidy=shared,%{_prefix} \
%endif %endif
--enable-sysvmsg=shared --enable-sysvshm=shared --enable-sysvsem=shared \ --enable-sysvmsg=shared --enable-sysvshm=shared --enable-sysvsem=shared \
@ -952,7 +971,7 @@ build --libdir=%{_libdir}/php \
--with-unixODBC=shared,%{_prefix} \ --with-unixODBC=shared,%{_prefix} \
--enable-fileinfo=shared \ --enable-fileinfo=shared \
--with-ffi=shared \ --with-ffi=shared \
%if %{with_sodium} %if %{with sodium}
--with-sodium=shared \ --with-sodium=shared \
%else %else
--without-sodium \ --without-sodium \
@ -976,7 +995,7 @@ without_shared="--without-gd \
--disable-shmop --disable-sockets --disable-tokenizer \ --disable-shmop --disable-sockets --disable-tokenizer \
--disable-sysvmsg --disable-sysvshm --disable-sysvsem" --disable-sysvmsg --disable-sysvshm --disable-sysvsem"
%if %{with_modphp} %if %{with modphp}
# Build Apache module, and the CLI SAPI, /usr/bin/php # Build Apache module, and the CLI SAPI, /usr/bin/php
pushd build-apache pushd build-apache
build --with-apxs2=%{_httpd_apxs} \ build --with-apxs2=%{_httpd_apxs} \
@ -992,6 +1011,7 @@ pushd build-fpm
build --enable-fpm \ build --enable-fpm \
--with-fpm-acl \ --with-fpm-acl \
--with-fpm-systemd \ --with-fpm-systemd \
--with-fpm-selinux \
--libdir=%{_libdir}/php \ --libdir=%{_libdir}/php \
--without-mysqli \ --without-mysqli \
--disable-pdo \ --disable-pdo \
@ -999,14 +1019,14 @@ build --enable-fpm \
popd popd
# Build for inclusion as embedded script language into applications, # Build for inclusion as embedded script language into applications,
# /usr/lib[64]/libphp7.so # /usr/lib[64]/libphp.so
pushd build-embedded pushd build-embedded
build --enable-embed \ build --enable-embed \
--without-mysqli --disable-pdo \ --without-mysqli --disable-pdo \
${without_shared} ${without_shared}
popd popd
%if %{with_zts} %if %{with zts}
# Build a special thread-safe (mainly for modules) # Build a special thread-safe (mainly for modules)
pushd build-ztscli pushd build-ztscli
@ -1019,7 +1039,7 @@ build --includedir=%{_includedir}/php-zts \
--with-config-file-scan-dir=%{_sysconfdir}/php-zts.d \ --with-config-file-scan-dir=%{_sysconfdir}/php-zts.d \
--enable-pcntl \ --enable-pcntl \
--enable-opcache \ --enable-opcache \
%if %{with_imap} %if %{with imap}
--with-imap=shared --with-imap-ssl \ --with-imap=shared --with-imap-ssl \
%endif %endif
--enable-mbstring=shared \ --enable-mbstring=shared \
@ -1031,10 +1051,16 @@ build --includedir=%{_includedir}/php-zts \
--enable-bcmath=shared \ --enable-bcmath=shared \
--with-bz2=shared \ --with-bz2=shared \
--enable-ctype=shared \ --enable-ctype=shared \
--enable-dba=shared --with-db4=%{_prefix} \ --enable-dba=shared \
%if %{with db4}
--with-db4=%{_prefix} \
%endif
--with-tcadb=%{_prefix} \ --with-tcadb=%{_prefix} \
%if %{with_lmdb} %if %{with lmdb}
--with-lmdb=%{_prefix} \ --with-lmdb=%{_prefix} \
%endif
%if %{with qdbm}
--with-qdbm=%{_prefix} \
%endif %endif
--with-gettext=shared \ --with-gettext=shared \
--with-iconv=shared \ --with-iconv=shared \
@ -1047,7 +1073,7 @@ build --includedir=%{_includedir}/php-zts \
--with-mysqli=shared,mysqlnd \ --with-mysqli=shared,mysqlnd \
--with-mysql-sock=%{mysql_sock} \ --with-mysql-sock=%{mysql_sock} \
--enable-mysqlnd-threading \ --enable-mysqlnd-threading \
%if %{with_firebird} %if %{with firebird}
--with-pdo-firebird=shared \ --with-pdo-firebird=shared \
%endif %endif
--enable-dom=shared \ --enable-dom=shared \
@ -1064,17 +1090,17 @@ build --includedir=%{_includedir}/php-zts \
--with-pdo-mysql=shared,mysqlnd \ --with-pdo-mysql=shared,mysqlnd \
--with-pdo-pgsql=shared,%{_prefix} \ --with-pdo-pgsql=shared,%{_prefix} \
--with-pdo-sqlite=shared \ --with-pdo-sqlite=shared \
%if %{with_freetds} %if %{with freetds}
--with-pdo-dblib=shared,%{_prefix} \ --with-pdo-dblib=shared,%{_prefix} \
%endif %endif
--with-sqlite3=shared \ --with-sqlite3=shared \
--without-readline \ --without-readline \
--with-libedit \ --with-libedit \
%if %{with_pspell} %if %{with pspell}
--with-pspell=shared \ --with-pspell=shared \
%endif %endif
--enable-phar=shared \ --enable-phar=shared \
%if %{with_tidy} %if %{with tidy}
--with-tidy=shared,%{_prefix} \ --with-tidy=shared,%{_prefix} \
%endif %endif
--enable-sysvmsg=shared --enable-sysvshm=shared --enable-sysvsem=shared \ --enable-sysvmsg=shared --enable-sysvshm=shared --enable-sysvsem=shared \
@ -1083,7 +1109,7 @@ build --includedir=%{_includedir}/php-zts \
--with-unixODBC=shared,%{_prefix} \ --with-unixODBC=shared,%{_prefix} \
--enable-fileinfo=shared \ --enable-fileinfo=shared \
--with-ffi=shared \ --with-ffi=shared \
%if %{with_sodium} %if %{with sodium}
--with-sodium=shared \ --with-sodium=shared \
%else %else
--without-sodium \ --without-sodium \
@ -1098,6 +1124,12 @@ popd
%check %check
: Ensure proper NTS/ZTS build
$RPM_BUILD_ROOT%{_bindir}/php -n -v | grep NTS
%if %{with zts}
$RPM_BUILD_ROOT%{_bindir}/zts-php -n -v | grep ZTS
%endif
%if %runselftest %if %runselftest
cd build-fpm cd build-fpm
@ -1123,7 +1155,7 @@ unset NO_INTERACTION REPORT_EXIT_STATUS MALLOC_CHECK_
%endif %endif
%install %install
%if %{with_zts} %if %{with zts}
# Install the extensions for the ZTS version # Install the extensions for the ZTS version
make -C build-ztscli install \ make -C build-ztscli install \
INSTALL_ROOT=$RPM_BUILD_ROOT INSTALL_ROOT=$RPM_BUILD_ROOT
@ -1151,7 +1183,7 @@ install -m 644 %{SOURCE2} $RPM_BUILD_ROOT%{_sysconfdir}/php.ini
# For third-party packaging: # For third-party packaging:
install -m 755 -d $RPM_BUILD_ROOT%{_datadir}/php/preload install -m 755 -d $RPM_BUILD_ROOT%{_datadir}/php/preload
%if %{with_modphp} %if %{with modphp}
# install the DSO # install the DSO
install -m 755 -d $RPM_BUILD_ROOT%{_httpd_moddir} install -m 755 -d $RPM_BUILD_ROOT%{_httpd_moddir}
install -m 755 build-apache/libs/libphp.so $RPM_BUILD_ROOT%{_httpd_moddir} install -m 755 build-apache/libs/libphp.so $RPM_BUILD_ROOT%{_httpd_moddir}
@ -1159,13 +1191,13 @@ install -m 755 build-apache/libs/libphp.so $RPM_BUILD_ROOT%{_httpd_moddir}
# Apache config fragment # Apache config fragment
# Dual config file with httpd >= 2.4 (fedora >= 18) # Dual config file with httpd >= 2.4 (fedora >= 18)
%if %{with_modphp} %if %{with modphp}
install -D -m 644 %{SOURCE9} $RPM_BUILD_ROOT%{_httpd_modconfdir}/20-php.conf install -D -m 644 %{SOURCE9} $RPM_BUILD_ROOT%{_httpd_modconfdir}/20-php.conf
%endif %endif
install -D -m 644 %{SOURCE1} $RPM_BUILD_ROOT%{_httpd_confdir}/php.conf install -D -m 644 %{SOURCE1} $RPM_BUILD_ROOT%{_httpd_confdir}/php.conf
install -m 755 -d $RPM_BUILD_ROOT%{_sysconfdir}/php.d install -m 755 -d $RPM_BUILD_ROOT%{_sysconfdir}/php.d
%if %{with_zts} %if %{with zts}
install -m 755 -d $RPM_BUILD_ROOT%{_sysconfdir}/php-zts.d install -m 755 -d $RPM_BUILD_ROOT%{_sysconfdir}/php-zts.d
%endif %endif
install -m 755 -d $RPM_BUILD_ROOT%{_sharedstatedir}/php install -m 755 -d $RPM_BUILD_ROOT%{_sharedstatedir}/php
@ -1190,8 +1222,8 @@ mv $RPM_BUILD_ROOT%{_sysconfdir}/php-fpm.d/www.conf.default .
# install systemd unit files and scripts for handling server startup # install systemd unit files and scripts for handling server startup
install -m 755 -d $RPM_BUILD_ROOT%{_sysconfdir}/systemd/system/php-fpm.service.d install -m 755 -d $RPM_BUILD_ROOT%{_sysconfdir}/systemd/system/php-fpm.service.d
install -Dm 644 %{SOURCE6} $RPM_BUILD_ROOT%{_unitdir}/php-fpm.service install -Dm 644 %{SOURCE6} $RPM_BUILD_ROOT%{_unitdir}/php-fpm.service
install -Dm 644 %{SOURCE12} $RPM_BUILD_ROOT%{_unitdir}/httpd.service.d/php-fpm.conf install -Dm 644 %{SOURCE12} $RPM_BUILD_ROOT%{_sysconfdir}/systemd/system/httpd.service.d/php-fpm.conf
install -Dm 644 %{SOURCE12} $RPM_BUILD_ROOT%{_unitdir}/nginx.service.d/php-fpm.conf install -Dm 644 %{SOURCE12} $RPM_BUILD_ROOT%{_sysconfdir}/systemd/system/nginx.service.d/php-fpm.conf
# LogRotate # LogRotate
install -m 755 -d $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d install -m 755 -d $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d
install -m 644 %{SOURCE7} $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/php-fpm install -m 644 %{SOURCE7} $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/php-fpm
@ -1210,7 +1242,7 @@ TESTCMD="$TESTCMD --define extension_dir=$RPM_BUILD_ROOT%{_libdir}/php/modules"
# Generate files lists and stub .ini files for each subpackage # Generate files lists and stub .ini files for each subpackage
for mod in pgsql odbc ldap snmp \ for mod in pgsql odbc ldap snmp \
%if %{with_imap} %if %{with imap}
imap \ imap \
%endif %endif
mysqlnd mysqli \ mysqlnd mysqli \
@ -1220,22 +1252,22 @@ for mod in pgsql odbc ldap snmp \
sqlite3 \ sqlite3 \
enchant phar fileinfo intl \ enchant phar fileinfo intl \
ffi \ ffi \
%if %{with_tidy} %if %{with tidy}
tidy \ tidy \
%endif %endif
%if %{with_pspell} %if %{with pspell}
pspell \ pspell \
%endif %endif
curl \ curl \
%if %{with_sodium} %if %{with sodium}
sodium \ sodium \
%endif %endif
posix shmop sysvshm sysvsem sysvmsg xml \ posix shmop sysvshm sysvsem sysvmsg xml \
pdo pdo_mysql pdo pdo_pgsql pdo_odbc pdo_sqlite \ pdo pdo_mysql pdo pdo_pgsql pdo_odbc pdo_sqlite \
%if %{with_firebird} %if %{with firebird}
pdo_firebird \ pdo_firebird \
%endif %endif
%if %{with_freetds} %if %{with freetds}
pdo_dblib \ pdo_dblib \
%endif %endif
xmlreader xmlwriter xmlreader xmlwriter
@ -1260,7 +1292,7 @@ do
# some extensions have their own config file # some extensions have their own config file
if [ -f ${ini} ]; then if [ -f ${ini} ]; then
cp -p ${ini} $RPM_BUILD_ROOT%{_sysconfdir}/php.d/${ini} cp -p ${ini} $RPM_BUILD_ROOT%{_sysconfdir}/php.d/${ini}
%if %{with_zts} %if %{with zts}
cp -p ${ini} $RPM_BUILD_ROOT%{_sysconfdir}/php-zts.d/${ini} cp -p ${ini} $RPM_BUILD_ROOT%{_sysconfdir}/php-zts.d/${ini}
%endif %endif
else else
@ -1268,7 +1300,7 @@ do
; Enable ${mod} extension module ; Enable ${mod} extension module
extension=${mod} extension=${mod}
EOF EOF
%if %{with_zts} %if %{with zts}
cat > $RPM_BUILD_ROOT%{_sysconfdir}/php-zts.d/${ini} <<EOF cat > $RPM_BUILD_ROOT%{_sysconfdir}/php-zts.d/${ini} <<EOF
; Enable ${mod} extension module ; Enable ${mod} extension module
extension=${mod} extension=${mod}
@ -1278,7 +1310,7 @@ EOF
cat > files.${mod} <<EOF cat > files.${mod} <<EOF
%{_libdir}/php/modules/${mod}.so %{_libdir}/php/modules/${mod}.so
%config(noreplace) %{_sysconfdir}/php.d/${ini} %config(noreplace) %{_sysconfdir}/php.d/${ini}
%if %{with_zts} %if %{with zts}
%{_libdir}/php-zts/modules/${mod}.so %{_libdir}/php-zts/modules/${mod}.so
%config(noreplace) %{_sysconfdir}/php-zts.d/${ini} %config(noreplace) %{_sysconfdir}/php-zts.d/${ini}
%endif %endif
@ -1314,7 +1346,7 @@ cat files.curl files.phar files.fileinfo \
# The default Zend OPcache blacklist file # The default Zend OPcache blacklist file
install -m 644 %{SOURCE51} $RPM_BUILD_ROOT%{_sysconfdir}/php.d/opcache-default.blacklist install -m 644 %{SOURCE51} $RPM_BUILD_ROOT%{_sysconfdir}/php.d/opcache-default.blacklist
%if %{with_zts} %if %{with zts}
install -m 644 %{SOURCE51} $RPM_BUILD_ROOT%{_sysconfdir}/php-zts.d/opcache-default.blacklist install -m 644 %{SOURCE51} $RPM_BUILD_ROOT%{_sysconfdir}/php-zts.d/opcache-default.blacklist
sed -e '/blacklist_filename/s/php.d/php-zts.d/' \ sed -e '/blacklist_filename/s/php.d/php-zts.d/' \
-i $RPM_BUILD_ROOT%{_sysconfdir}/php-zts.d/10-opcache.ini -i $RPM_BUILD_ROOT%{_sysconfdir}/php-zts.d/10-opcache.ini
@ -1325,7 +1357,7 @@ sed -e "s/@PHP_APIVER@/%{apiver}-%{__isa_bits}/" \
-e "s/@PHP_ZENDVER@/%{zendver}-%{__isa_bits}/" \ -e "s/@PHP_ZENDVER@/%{zendver}-%{__isa_bits}/" \
-e "s/@PHP_PDOVER@/%{pdover}-%{__isa_bits}/" \ -e "s/@PHP_PDOVER@/%{pdover}-%{__isa_bits}/" \
-e "s/@PHP_VERSION@/%{upver}/" \ -e "s/@PHP_VERSION@/%{upver}/" \
%if ! %{with_zts} %if ! %{with zts}
-e "/zts/d" \ -e "/zts/d" \
%endif %endif
< %{SOURCE3} > macros.php < %{SOURCE3} > macros.php
@ -1358,7 +1390,7 @@ systemctl try-restart php-fpm.service >/dev/null 2>&1 || :
%files %files
%if %{with_modphp} %if %{with modphp}
%{_httpd_moddir}/libphp.so %{_httpd_moddir}/libphp.so
%config(noreplace) %{_httpd_modconfdir}/20-php.conf %config(noreplace) %{_httpd_modconfdir}/20-php.conf
%attr(0770,root,apache) %dir %{_sharedstatedir}/php/session %attr(0770,root,apache) %dir %{_sharedstatedir}/php/session
@ -1369,7 +1401,7 @@ systemctl try-restart php-fpm.service >/dev/null 2>&1 || :
%files common -f files.common %files common -f files.common
%doc EXTENSIONS NEWS UPGRADING* README.REDIST.BINS *md docs %doc EXTENSIONS NEWS UPGRADING* README.REDIST.BINS *md docs
%license LICENSE TSRM_LICENSE ZEND_LICENSE %license LICENSE TSRM_LICENSE ZEND_LICENSE BOOST_LICENSE
%license libmagic_LICENSE %license libmagic_LICENSE
%license timelib_LICENSE %license timelib_LICENSE
%doc php.ini-* %doc php.ini-*
@ -1377,7 +1409,7 @@ systemctl try-restart php-fpm.service >/dev/null 2>&1 || :
%dir %{_sysconfdir}/php.d %dir %{_sysconfdir}/php.d
%dir %{_libdir}/php %dir %{_libdir}/php
%dir %{_libdir}/php/modules %dir %{_libdir}/php/modules
%if %{with_zts} %if %{with zts}
%dir %{_sysconfdir}/php-zts.d %dir %{_sysconfdir}/php-zts.d
%dir %{_libdir}/php-zts %dir %{_libdir}/php-zts
%dir %{_libdir}/php-zts/modules %dir %{_libdir}/php-zts/modules
@ -1391,7 +1423,7 @@ systemctl try-restart php-fpm.service >/dev/null 2>&1 || :
%files cli %files cli
%{_bindir}/php %{_bindir}/php
%if %{with_zts} %if %{with zts}
%{_bindir}/zts-php %{_bindir}/zts-php
%{_mandir}/man1/zts-php.1* %{_mandir}/man1/zts-php.1*
%endif %endif
@ -1410,7 +1442,7 @@ systemctl try-restart php-fpm.service >/dev/null 2>&1 || :
%doc sapi/phpdbg/CREDITS %doc sapi/phpdbg/CREDITS
%{_bindir}/phpdbg %{_bindir}/phpdbg
%{_mandir}/man1/phpdbg.1* %{_mandir}/man1/phpdbg.1*
%if %{with_zts} %if %{with zts}
%{_bindir}/zts-phpdbg %{_bindir}/zts-phpdbg
%{_mandir}/man1/zts-phpdbg.1* %{_mandir}/man1/zts-phpdbg.1*
%endif %endif
@ -1428,8 +1460,8 @@ systemctl try-restart php-fpm.service >/dev/null 2>&1 || :
%config(noreplace) %{_sysconfdir}/nginx/conf.d/php-fpm.conf %config(noreplace) %{_sysconfdir}/nginx/conf.d/php-fpm.conf
%config(noreplace) %{_sysconfdir}/nginx/default.d/php.conf %config(noreplace) %{_sysconfdir}/nginx/default.d/php.conf
%{_unitdir}/php-fpm.service %{_unitdir}/php-fpm.service
%{_unitdir}/httpd.service.d/php-fpm.conf %config(noreplace) %{_sysconfdir}/systemd/system/httpd.service.d/php-fpm.conf
%{_unitdir}/nginx.service.d/php-fpm.conf %config(noreplace) %{_sysconfdir}/systemd/system/nginx.service.d/php-fpm.conf
%{_sbindir}/php-fpm %{_sbindir}/php-fpm
%dir %{_sysconfdir}/systemd/system/php-fpm.service.d %dir %{_sysconfdir}/systemd/system/php-fpm.service.d
%dir %{_sysconfdir}/php-fpm.d %dir %{_sysconfdir}/php-fpm.d
@ -1444,7 +1476,7 @@ systemctl try-restart php-fpm.service >/dev/null 2>&1 || :
%{_bindir}/php-config %{_bindir}/php-config
%{_includedir}/php %{_includedir}/php
%{_libdir}/php/build %{_libdir}/php/build
%if %{with_zts} %if %{with zts}
%{_bindir}/zts-php-config %{_bindir}/zts-php-config
%{_bindir}/zts-phpize %{_bindir}/zts-phpize
%{_includedir}/php-zts %{_includedir}/php-zts
@ -1461,7 +1493,7 @@ systemctl try-restart php-fpm.service >/dev/null 2>&1 || :
%files pgsql -f files.pgsql %files pgsql -f files.pgsql
%files odbc -f files.odbc %files odbc -f files.odbc
%if %{with_imap} %if %{with imap}
%files imap -f files.imap %files imap -f files.imap
%endif %endif
%files ldap -f files.ldap %files ldap -f files.ldap
@ -1476,28 +1508,28 @@ systemctl try-restart php-fpm.service >/dev/null 2>&1 || :
%files gmp -f files.gmp %files gmp -f files.gmp
%files dba -f files.dba %files dba -f files.dba
%files pdo -f files.pdo %files pdo -f files.pdo
%if %{with_tidy} %if %{with tidy}
%files tidy -f files.tidy %files tidy -f files.tidy
%endif %endif
%if %{with_freetds} %if %{with freetds}
%files pdo-dblib -f files.pdo_dblib %files pdo-dblib -f files.pdo_dblib
%endif %endif
%if %{with_pspell} %if %{with pspell}
%files pspell -f files.pspell %files pspell -f files.pspell
%endif %endif
%files intl -f files.intl %files intl -f files.intl
%files process -f files.process %files process -f files.process
%if %{with_firebird} %if %{with firebird}
%files pdo-firebird -f files.pdo_firebird %files pdo-firebird -f files.pdo_firebird
%endif %endif
%files enchant -f files.enchant %files enchant -f files.enchant
%files mysqlnd -f files.mysqlnd %files mysqlnd -f files.mysqlnd
%files opcache -f files.opcache %files opcache -f files.opcache
%config(noreplace) %{_sysconfdir}/php.d/opcache-default.blacklist %config(noreplace) %{_sysconfdir}/php.d/opcache-default.blacklist
%if %{with_zts} %if %{with zts}
%config(noreplace) %{_sysconfdir}/php-zts.d/opcache-default.blacklist %config(noreplace) %{_sysconfdir}/php-zts.d/opcache-default.blacklist
%endif %endif
%if %{with_sodium} %if %{with sodium}
%files sodium -f files.sodium %files sodium -f files.sodium
%endif %endif
%files ffi -f files.ffi %files ffi -f files.ffi
@ -1505,6 +1537,14 @@ systemctl try-restart php-fpm.service >/dev/null 2>&1 || :
%changelog %changelog
* Mon Nov 27 2023 Remi Collet <rcollet@redhat.com> - 8.2.13-1
- rebase to 8.2.13 RHEL-14705
- add %%__phpize and %%__phpconfig macros
- move httpd/nginx wants directives to config files in /etc
- php-fpm.conf: move include directive after [global] section
following upstream example, allowing overriding
- use SPDX license IDs
* Fri Jan 13 2023 Remi Collet <rcollet@redhat.com> - 8.0.27-1 * Fri Jan 13 2023 Remi Collet <rcollet@redhat.com> - 8.0.27-1
- rebase to 8.0.27 - rebase to 8.0.27

View File

@ -1,2 +1,2 @@
SHA512 (php-8.0.27.tar.xz) = 443d4fe5d3165e2806e6ce03356f38b1d70fb4c86054f10b22e62191d5961bb51b10a31c49f3d74e6360836254db3107a8910589966481ebc7f5e06886b5e026 SHA512 (php-8.2.13.tar.xz) = 8031e33d148c5acbfbb3ed00d7a266813c8919db86ba260ba65e1837d6db8d0bd66d8ddef66884466dd3fe51ece7882b03f8d8db6ff4383f80a68b7beafc03af
SHA512 (php-8.0.27.tar.xz.asc) = f76d8ffc14490a73ff426b8225a017caacab0607dfc10c6227f3eaece2b6b5fa83443a45e814768c98dde461fa60097009f966f5b4bdb5adc54fda20a0a36400 SHA512 (php-8.2.13.tar.xz.asc) = 0e4e665ba134222e342f2c5d2456ebf6f2d06e82a513c5d9ab02f720581d0eb4f537757d4fc3c86d941d9d0140546c1f37334feff6b4e8d6fd37878346c9e66c