Sync from SUSE:ALP:Source:Standard:1.0 php8 revision 028f5a9ce0a8265dbf169bb977be598b

This commit is contained in:
Adrian Schröter 2024-02-20 00:08:27 +01:00
commit 6ca31fe5cd
23 changed files with 8683 additions and 0 deletions

23
.gitattributes vendored Normal file
View File

@ -0,0 +1,23 @@
## Default LFS
*.7z filter=lfs diff=lfs merge=lfs -text
*.bsp filter=lfs diff=lfs merge=lfs -text
*.bz2 filter=lfs diff=lfs merge=lfs -text
*.gem filter=lfs diff=lfs merge=lfs -text
*.gz filter=lfs diff=lfs merge=lfs -text
*.jar filter=lfs diff=lfs merge=lfs -text
*.lz filter=lfs diff=lfs merge=lfs -text
*.lzma filter=lfs diff=lfs merge=lfs -text
*.obscpio filter=lfs diff=lfs merge=lfs -text
*.oxt filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.rpm filter=lfs diff=lfs merge=lfs -text
*.tbz filter=lfs diff=lfs merge=lfs -text
*.tbz2 filter=lfs diff=lfs merge=lfs -text
*.tgz filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
*.txz filter=lfs diff=lfs merge=lfs -text
*.whl filter=lfs diff=lfs merge=lfs -text
*.xz filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.zst filter=lfs diff=lfs merge=lfs -text

131
README.macros Normal file
View File

@ -0,0 +1,131 @@
README for php-macros
Author: Christian Wittmer <chris@computersalat.de>
Author: Johannes Weberhofer <jweberhofer@weberhofer.at>
%php_pear_gen_filelist generates an rpmlint happy filelist of your installed files
In most cases you only need to check the %doc part
sometimes there is a "Changes" or "ChangeLog",....
Requirements for %php_pear_gen_filelist
You have to define following parts inside your spec file
Example:
#
# spec file for package php7-pear-Auth_SASL
#
# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
%define php_name php7
%define pear_name Auth_SASL
Name: php7-pear-Auth_SASL
Version: 1.1.0
Release: 0
Summary: Abstraction of various SASL mechanism responses
License: BSD-3-Clause
Group: Productivity/Networking/Web/Servers
Url: http://pear.php.net/package/%{pear_name}
Source: http://pear.php.net/get/%{pear_name}-%{version}.tgz
BuildRequires: %{php_name}-devel
BuildRequires: %{php_name}-pear >= 1.10.1
Requires: %{php_name}-pear >= 1.10.1
Provides: php-pear-%{pear_name} = %{version}
Provides: php-pear(%{pear_name}) = %{version}
Obsoletes: php5-pear-Auth_SASL
BuildArch: noarch
%if 0%{?suse_version} < 1330
BuildRequires: %{php_name}-macros
BuildRequires: %{php_name}-pear-Archive_Tar
Requires: %{php_name}-pear-Archive_Tar
%endif
%description
Provides code to generate responses to common SASL mechanisms, including:
- Digest-MD5
- CramMD5
- Plain
- Anonymous
- Login (Pseudo mechanism)
%prep
%setup -q %setup -q -n %{pear_name}-%{version}
mv ../package.xml .
%build
%install
%{__pear} install --nodeps --offline --packagingroot %{buildroot} package.xml
install -D -m 0644 package.xml %{buildroot}%{pear_xmldir}/%{pear_name}.xml
rm -rf %{buildroot}/{doc,tmp}
rm -rf %{buildroot}/%{php_peardir}/.{filemap,lock,registry,channels,depdb,depdblock}
%php_pear_gen_filelist
%post
if [ "$1" = "1" ]; then
# on "rpm -ivh"
%{__pear} install --nodeps --soft --force --register-only %{pear_xmldir}/%{pear_name}.xml
fi
if [ "$1" = "2" ]; then
# on "rpm -Uvh"
%{__pear} upgrade --offline --register-only %{pear_xmldir}/%{pear_name}.xml
fi
%postun
if [ "$1" = "0" ]; then
# on "rpm -e"
%{__pear} uninstall --nodeps --ignore-errors --register-only pear.php.net/%{pear_name}
fi
%files -f %{name}.files
%changelog
#############################################################################
And here an Example of the generated filelist (does not match above package):
/usr/share/php5/PEAR/Date.php
%dir /usr/share/php5/PEAR/Date
/usr/share/php5/PEAR/Date/Calc.php
/usr/share/php5/PEAR/Date/Human.php
/usr/share/php5/PEAR/Date/Span.php
/usr/share/php5/PEAR/Date/TimeZone.php
%dir /usr/share/php5/PEAR/test
%dir /usr/share/php5/PEAR/test/Date
%dir /usr/share/php5/PEAR/test/Date/tests
/usr/share/php5/PEAR/test/Date/tests/test_date_methods_span.php
/usr/share/php5/PEAR/test/Date/tests/testunit_date_span.php
/usr/share/php5/PEAR/test/Date/tests/test_calc.php
/usr/share/php5/PEAR/test/Date/tests/calc.php
/usr/share/php5/PEAR/test/Date/tests/testunit_date.php
/usr/share/php5/PEAR/test/Date/tests/testunit.php
%dir /usr/share/php5/PEAR/test/Date/tests/bugs
/usr/share/php5/PEAR/test/Date/tests/bugs/bug-727-1.phpt
/usr/share/php5/PEAR/test/Date/tests/bugs/bug-727-2.phpt
/usr/share/php5/PEAR/test/Date/tests/bugs/bug-727-3.phpt
/usr/share/php5/PEAR/test/Date/tests/bugs/bug-727-4.phpt
/usr/share/php5/PEAR/test/Date/tests/bugs/bug-674.phpt
/usr/share/php5/PEAR/test/Date/tests/bugs/bug-9213.phpt
/usr/share/php5/PEAR/test/Date/tests/bugs/bug-9414.phpt
/usr/share/php5/PEAR/test/Date/tests/bugs/bug-8912.phpt
/usr/share/php5/PEAR/test/Date/tests/bugs/bug-967.phpt
/var/lib/pear/Date.xml

7
_multibuild Normal file
View File

@ -0,0 +1,7 @@
<multibuild>
<package>apache2</package>
<package>embed</package>
<package>fastcgi</package>
<package>fpm</package>
<package>test</package>
</multibuild>

55
build-test.sh Normal file
View File

@ -0,0 +1,55 @@
#!/bin/bash
TEST_RESULT_FILE_BEFORE='test_results.before'
TEST_RESULT_FILE_AFTER='test_results.after'
function usage
{
echo "usage: $0 buildroot [osc ARGUMENTS]"
echo " 1. Run first time to create ${TEST_RESULT_FILE_BEFORE}."
echo " 2. Make source changes."
echo " 3. Run second time to create ${TEST_RESULT_FILE_AFTER}"
echo " and see changes in test results."
}
if [ -z $1 ]; then
echo 'ERROR: missing a parameter: buildroot'
usage
exit 1
fi
if [ "$1" == "-h" ]; then
usage
exit 0
fi
export OSC_BUILD_ROOT=$1
shift
apiurl=`cat .osc/_apiurl 2>/dev/null`
if [ ! -z "$apiurl" ]; then
apiurl="-A $apiurl"
fi
osc $apiurl build $@ --no-verify --with make_test -x valgrind *.spec
if [ $? -ne 0 ]; then
echo "ERROR: build failed. See $OSC_BUILD_ROOT/.build.log for details."
exit 1
fi
cat $OSC_BUILD_ROOT/.build.log \
| sed 's:^\[[ 0-9]\+s\] ::' \
| egrep 'TEST [0-9]+\/[0-9]+|SKIP.*reason' \
| sed 's:.*\r::' \
| sort \
> ${TEST_RESULT_FILE_AFTER}
if [ ! -e ${TEST_RESULT_FILE_BEFORE} ]; then
echo "Creating ${TEST_RESULT_FILE_BEFORE}"
echo "Run $0 again AFTER source changes, to create ${TEST_RESULT_FILE_AFTER}."
echo "Differences will be checked then."
mv ${TEST_RESULT_FILE_AFTER} ${TEST_RESULT_FILE_BEFORE}
else
echo --- DIFFERENCES -------------------------------------------
diff -up $TEST_RESULT_FILE_BEFORE ${TEST_RESULT_FILE_AFTER}
echo -----------------------------------------------------------
echo "Do not forgot to "
echo "rm ${TEST_RESULT_FILE_BEFORE} ${TEST_RESULT_FILE_AFTER}"
echo
fi

96
macros.php Normal file
View File

@ -0,0 +1,96 @@
# macros.php file
# macros for module building. handle with care.
#
# Interface versions exposed by PHP:
#
%php_core_api @PHP_APIVER@
%php_zend_api @PHP_ZENDVER@
# Useful php macros (from Christian Wittmer <chris@computersalat.de>)
#
%__php /usr/bin/php
%__phpize /usr/bin/phpize
%__php_config /usr/bin/php-config
%php_version %(%{__php_config} --version)
%php_cfgdir %(%{__php_config} --ini-dir)
%php_extdir %(%{__php_config} --extension-dir)
# pear related macros
%__pear /usr/bin/pear
%php_peardir %(%{__pear} config-get php_dir)
# %pear_xmldir should be replaced by %php_pearxmldir
%pear_xmldir /var/lib/pear
%php_pearxmldir /var/lib/pear
%pear_phpdir %(%{__pear} config-get php_dir 2> /dev/null || echo undefined)
%pear_docdir %(%{__pear} config-get doc_dir 2> /dev/null || echo undefined)
%pear_testdir %(%{__pear} config-get test_dir 2> /dev/null || echo undefined)
%pear_datadir %(%{__pear} config-get data_dir 2> /dev/null || echo undefined)
%pear_cfgdir %(%{__pear} config-get cfg_dir 2> /dev/null || echo undefined)
%pear_wwwdir %(%{__pear} config-get www_dir 2> /dev/null || echo undefined)
%pear_metadir %(%{__pear} config-get metadata_dir 2> /dev/null || echo undefined)
# pecl related macros
%__pecl /usr/bin/pecl
%pecl_phpdir %(%{__pecl} config-get php_dir 2> /dev/null || echo undefined)
%pecl_docdir %(%{__pecl} config-get doc_dir 2> /dev/null || echo undefined)
%pecl_testdir %(%{__pecl} config-get test_dir 2> /dev/null || echo undefined)
%pecl_datadir %(%{__pecl} config-get data_dir 2> /dev/null || echo undefined)
# macro: php_pear_gen_filelist
# do the rpmlint happy filelist generation
# with %dir in front of directories
%php_pear_gen_filelist(n)\
FILES=%{name}.files\
# fgen_dir func\
# IN: dir\
fgen_dir(){\
%{__cat} >> $FILES << EOF\
%dir ${1}\
EOF\
}\
# fgen_file func\
# IN: file\
fgen_file(){\
%{__cat} >> $FILES << EOF\
${1}\
EOF\
}\
# check for files in %{php_peardir}\
RES=`find ${RPM_BUILD_ROOT}%{php_peardir} -maxdepth 1 -type f`\
if [ -n "$RES" ]; then\
for file in $RES; do\
fgen_file "%{php_peardir}/$(basename ${file})"\
done\
fi\
\
# get all dirs into array\
base_dir="${RPM_BUILD_ROOT}%{php_peardir}/"\
for dir in `find ${base_dir} -type d | sort`; do\
if [ "$dir" = "${base_dir}" ]; then\
continue\
else\
el=`echo $dir | %{__awk} -F"${base_dir}" '{print $2}'`\
all_dir=(${all_dir[@]} $el)\
fi\
done\
\
# build filelist\
for i in ${all_dir[@]}; do\
if [ -d ${base_dir}/${i} ]; then\
RES=`find "${base_dir}/${i}" -maxdepth 1 -type f`\
if [ -n "$RES" ]; then\
fgen_dir "%{php_peardir}/${i}"\
for file in $RES; do\
fgen_file "%{php_peardir}/${i}/$(basename ${file})"\
done\
else\
fgen_dir "%{php_peardir}/${i}"\
fi\
fi\
done\
# add xml file\
fgen_file "%php_pearxmldir/%{pear_name}.xml"\
#

17
mod_php8.conf Normal file
View File

@ -0,0 +1,17 @@
<IfModule mod_php.c>
<FilesMatch "\.ph(p[34578]?|tml)$">
SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch "\.php[34578]?s$">
SetHandler application/x-httpd-php-source
</FilesMatch>
DirectoryIndex index.php4
DirectoryIndex index.php5
DirectoryIndex index.php7
DirectoryIndex index.php8
DirectoryIndex index.php
php_value session.save_handler "files"
php_value session.save_path "/var/lib/php8/sessions"
</IfModule>

BIN
php-8.2.16.tar.xz (Stored with Git LFS) Normal file

Binary file not shown.

17
php-8.2.16.tar.xz.asc Normal file
View File

@ -0,0 +1,17 @@
-----BEGIN PGP SIGNATURE-----
iQJFBAABCgAvFiEEEZjAEXWTSXpexcGZKGrx+Yl0adwFAmXLibURHHBpZXJyaWNr
QHBocC5uZXQACgkQKGrx+Yl0adyPvg/+Kfs0y4SRHGcdppHynDIZQhPPqSsUHbTl
Z8DVv1e9KCIkFlMboc47s6C2VcPj7eMdnPUr9MYG1JMlW7Q8LzQMBNY9CG4PiWRw
dlXnYxzi3s7xAkyZZYSmrd08B84SWpz/h4UhuC45vNoKDL4Gda203GX6Eprv2txf
Z1EONizVvVaiLJxEj5r9xRWsoJ8NFNDU2wBfdHYxVEk/G82g4mP7uyjnXGxjHqQN
2qPwdVO/5MB9d6gQBrOYoO+S/sx5fK8UC2bElMREbyAouygx3yHBockguTs4Uzwt
h+71t+ehJNxiDROpZH6ufoGeZIkkaZRcWzfMCBvrwYckRuBY+6MHryupqFYmfPni
P4HxK/noLWtQwvv5lMiHURWoYhc2pGDoHt59D9oZTtTP9D1u2PjGO0e4cyJgdE7N
2gA+pRQxdDQceJDHPSDyMEIpkfb4w7u8d/l8L22Inizva9YpuFWKyXeb7u0mQFJg
32cB/mR1ffxYWH0hCMM2aWvr1op3CrEupGdG/FdTnBB6dD4LCUsXkuROP1yW7Uoi
VjAn/wg/H+CfIUjuKZNxGnRjvjrPsGxfx/2EGU/hRabEe+/cRQXtHtkaBzHbcmZv
K6SHC27bBirvxEHTVRGGLcYJX4TU8z4S29EjjA5pyv2NqxWamce0HPNEahWLJ1xv
bjxMi6LLmV8=
=25i9
-----END PGP SIGNATURE-----

13
php-ar-flags.patch Normal file
View File

@ -0,0 +1,13 @@
Index: php-8.2.15/configure.ac
===================================================================
--- php-8.2.15.orig/configure.ac
+++ php-8.2.15/configure.ac
@@ -1618,7 +1618,7 @@ PHP_CONFIGURE_PART(Configuring libtool)
dnl Silence warning: `ar: 'u' modifier ignored since 'D' is the default`
dnl See https://github.com/php/php-src/pull/3017
-AC_SUBST(AR_FLAGS, [cr])
+AC_SUBST(AR_FLAGS, [Dcr])
dnl Only allow AC_PROG_CXX and AC_PROG_CXXCPP if they are explicitly called (by
dnl PHP_REQUIRE_CXX). Otherwise AC_PROG_LIBTOOL fails if there is no working C++

View File

@ -0,0 +1,109 @@
From 485e2a4e43458a417603d4ed219af3e79854ef46 Mon Sep 17 00:00:00 2001
From: Arjen de Korte <build+github@de-korte.org>
Date: Sat, 2 Jan 2021 17:57:18 +0100
Subject: [PATCH 1/1] phar: honor SOURCE_DATE_EPOCH for timestamps
In order to build reproducible phars, honor SOURCE_DATE_EPOCH
if set
Signed-off-by: Arjen de Korte <build+github@de-korte.org>
---
ext/phar/phar.c | 2 +-
ext/phar/phar_internal.h | 15 +++++++++++++++
ext/phar/stream.c | 2 +-
ext/phar/tar.c | 2 +-
ext/phar/util.c | 2 +-
ext/phar/zip.c | 2 +-
6 files changed, 18 insertions(+), 5 deletions(-)
Index: php-8.2.16/ext/phar/phar.c
===================================================================
--- php-8.2.16.orig/ext/phar/phar.c
+++ php-8.2.16/ext/phar/phar.c
@@ -2999,7 +2999,7 @@ int phar_flush(phar_archive_data *phar,
4: metadata-len
+: metadata
*/
- mytime = time(NULL);
+ mytime = source_date_epoch_time(NULL);
phar_set_32(entry_buffer, entry->uncompressed_filesize);
phar_set_32(entry_buffer+4, mytime);
phar_set_32(entry_buffer+8, entry->compressed_filesize);
Index: php-8.2.16/ext/phar/phar_internal.h
===================================================================
--- php-8.2.16.orig/ext/phar/phar_internal.h
+++ php-8.2.16/ext/phar/phar_internal.h
@@ -427,6 +427,21 @@ static inline enum phar_fp_type phar_get
return PHAR_G(cached_fp)[entry->phar->phar_pos].manifest[entry->manifest_pos].fp_type;
}
+static inline time_t source_date_epoch_time(time_t *tloc)
+{
+ const char *sde;
+ time_t ts;
+
+ tsrm_env_lock();
+ sde = getenv("SOURCE_DATE_EPOCH");
+ ts = (sde) ? strtoul(sde, NULL, 10) : time(0);
+ tsrm_env_unlock();
+ if (tloc) {
+ *tloc = ts;
+ }
+ return ts;
+}
+
static inline zend_off_t phar_get_fp_offset(phar_entry_info *entry)
{
if (!entry->is_persistent) {
Index: php-8.2.16/ext/phar/stream.c
===================================================================
--- php-8.2.16.orig/ext/phar/stream.c
+++ php-8.2.16/ext/phar/stream.c
@@ -474,7 +474,7 @@ static int phar_stream_flush(php_stream
phar_entry_data *data = (phar_entry_data *) stream->abstract;
if (data->internal_file->is_modified) {
- data->internal_file->timestamp = time(0);
+ data->internal_file->timestamp = source_date_epoch_time(0);
ret = phar_flush(data->phar, 0, 0, 0, &error);
if (error) {
php_stream_wrapper_log_error(stream->wrapper, REPORT_ERRORS, "%s", error);
Index: php-8.2.16/ext/phar/tar.c
===================================================================
--- php-8.2.16.orig/ext/phar/tar.c
+++ php-8.2.16/ext/phar/tar.c
@@ -972,7 +972,7 @@ int phar_tar_flush(phar_archive_data *ph
char halt_stub[] = "__HALT_COMPILER();";
entry.flags = PHAR_ENT_PERM_DEF_FILE;
- entry.timestamp = time(NULL);
+ entry.timestamp = source_date_epoch_time(NULL);
entry.is_modified = 1;
entry.is_crc_checked = 1;
entry.is_tar = 1;
Index: php-8.2.16/ext/phar/util.c
===================================================================
--- php-8.2.16.orig/ext/phar/util.c
+++ php-8.2.16/ext/phar/util.c
@@ -574,7 +574,7 @@ phar_entry_data *phar_get_or_create_entr
phar_add_virtual_dirs(phar, path, path_len);
etemp.is_modified = 1;
- etemp.timestamp = time(0);
+ etemp.timestamp = source_date_epoch_time(0);
etemp.is_crc_checked = 1;
etemp.phar = phar;
etemp.filename = estrndup(path, path_len);
Index: php-8.2.16/ext/phar/zip.c
===================================================================
--- php-8.2.16.orig/ext/phar/zip.c
+++ php-8.2.16/ext/phar/zip.c
@@ -1237,7 +1237,7 @@ int phar_zip_flush(phar_archive_data *ph
pass.error = &temperr;
entry.flags = PHAR_ENT_PERM_DEF_FILE;
- entry.timestamp = time(NULL);
+ entry.timestamp = source_date_epoch_time(NULL);
entry.is_modified = 1;
entry.is_zip = 1;
entry.phar = phar;

View File

@ -0,0 +1,24 @@
Index: php-8.2.7/ext/date/config0.m4
===================================================================
--- php-8.2.7.orig/ext/date/config0.m4
+++ php-8.2.7/ext/date/config0.m4
@@ -23,6 +23,8 @@ timelib_sources="lib/astro.c lib/dow.c l
PHP_NEW_EXTENSION(date, php_date.c $timelib_sources, no,, $PHP_DATE_CFLAGS)
+PHP_ADD_MAKEFILE_FRAGMENT()
+
PHP_ADD_BUILD_DIR([$ext_builddir/lib], 1)
PHP_ADD_INCLUDE([$ext_builddir/lib])
PHP_ADD_INCLUDE([$ext_srcdir/lib])
Index: php-8.2.7/ext/date/Makefile.frag
===================================================================
--- /dev/null
+++ php-8.2.7/ext/date/Makefile.frag
@@ -0,0 +1,6 @@
+$(srcdir)/lib/parse_date.c: $(srcdir)/lib/parse_date.re
+ @(cd $(top_srcdir); $(RE2C) $(RE2C_FLAGS) -b --no-generation-date -o ext/date/lib/parse_date.c ext/date/lib/parse_date.re)
+
+$(srcdir)/lib/parse_iso_intervals.c: $(srcdir)/lib/parse_iso_intervals.re
+ @(cd $(top_srcdir); $(RE2C) $(RE2C_FLAGS) -b --no-generation-date -o ext/date/lib/parse_iso_intervals.c ext/date/lib/parse_iso_intervals.re)
+

2
php-fpm.tmpfiles.d Normal file
View File

@ -0,0 +1,2 @@
# Type Path Mode UID GID Age Argument
d /run/php-fpm 0711 root root - -

44
php-ini.patch Normal file
View File

@ -0,0 +1,44 @@
Index: php-8.2.7/php.ini-production
===================================================================
--- php-8.2.7.orig/php.ini-production
+++ php-8.2.7/php.ini-production
@@ -742,7 +742,7 @@ default_charset = "UTF-8"
;;;;;;;;;;;;;;;;;;;;;;;;;
; UNIX: "/path1:/path2"
-;include_path = ".:/php/includes"
+include_path = ".:/usr/share/php8:/usr/share/php/PEAR"
;
; Windows: "\path1;\path2"
;include_path = ".;c:\php\includes"
@@ -976,7 +976,7 @@ cli_server.color = On
[Date]
; Defines the default timezone used by the date functions
; https://php.net/date.timezone
-;date.timezone =
+date.timezone = 'UTC'
; https://php.net/date.default-latitude
;date.default_latitude = 31.7667
@@ -1169,7 +1169,7 @@ mysqli.max_persistent = -1
; Allow or prevent persistent links.
; https://php.net/mysqli.allow-persistent
-mysqli.allow_persistent = On
+mysqli.allow_persistent = Off
; Maximum number of links. -1 means no limit.
; https://php.net/mysqli.max-links
Index: php-8.2.7/sapi/fpm/www.conf.in
===================================================================
--- php-8.2.7.orig/sapi/fpm/www.conf.in
+++ php-8.2.7/sapi/fpm/www.conf.in
@@ -27,6 +27,8 @@
; If the group is not set, the user's group is used.
user = @php_fpm_user@
group = @php_fpm_group@
+; session folder has to be writable by user:group
+php_value[session.save_path] = /var/lib/php8/sessions
; The address on which to accept FastCGI requests.
; Valid syntaxes are:

17
php-php-config.patch Normal file
View File

@ -0,0 +1,17 @@
---
scripts/php-config.in | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Index: php-8.0.0/scripts/php-config.in
===================================================================
--- php-8.0.0.orig/scripts/php-config.in 2020-11-24 18:04:03.000000000 +0100
+++ php-8.0.0/scripts/php-config.in 2021-01-07 10:13:28.462563114 +0100
@@ -6,7 +6,7 @@ datarootdir="@datarootdir@"
exec_prefix="@exec_prefix@"
version="@PHP_VERSION@"
vernum="@PHP_VERSION_ID@"
-include_dir="@includedir@/php"
+include_dir="@includedir@/php8"
includes="-I$include_dir -I$include_dir/main -I$include_dir/TSRM -I$include_dir/Zend -I$include_dir/ext -I$include_dir/ext/date/lib"
ldflags="@PHP_LDFLAGS@"
libs="@EXTRA_LIBS@"

35
php-phpize.patch Normal file
View File

@ -0,0 +1,35 @@
---
scripts/Makefile.frag | 4 ++--
scripts/phpize.in | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
Index: php-8.0.0/scripts/Makefile.frag
===================================================================
--- php-8.0.0.orig/scripts/Makefile.frag 2020-11-24 18:04:03.000000000 +0100
+++ php-8.0.0/scripts/Makefile.frag 2021-01-07 10:13:16.914490379 +0100
@@ -2,8 +2,8 @@
# Build environment install
#
-phpincludedir = $(includedir)/php
-phpbuilddir = $(libdir)/build
+phpincludedir = $(includedir)/php8
+phpbuilddir = $(datadir)/build
BUILD_FILES = \
scripts/phpize.m4 \
Index: php-8.0.0/scripts/phpize.in
===================================================================
--- php-8.0.0.orig/scripts/phpize.in 2020-11-24 18:04:03.000000000 +0100
+++ php-8.0.0/scripts/phpize.in 2021-01-07 10:13:16.914490379 +0100
@@ -4,8 +4,8 @@
prefix='@prefix@'
datarootdir='@datarootdir@'
exec_prefix="`eval echo @exec_prefix@`"
-phpdir="`eval echo @libdir@`/build"
-includedir="`eval echo @includedir@`/php"
+phpdir="`eval echo @datadir@`/build"
+includedir="`eval echo @includedir@`/php8"
builddir="`pwd`"
SED="@SED@"

View File

@ -0,0 +1,13 @@
Index: php-8.2.8/ext/phar/Makefile.frag
===================================================================
--- php-8.2.8.orig/ext/phar/Makefile.frag
+++ php-8.2.8/ext/phar/Makefile.frag
@@ -46,7 +46,7 @@ $(builddir)/phar.phar: $(builddir)/phar.
if [ "$(TEST_PHP_EXECUTABLE_RES)" != 1 ]; then \
rm -f $(builddir)/phar.phar; \
rm -f $(srcdir)/phar.phar; \
- $(PHP_PHARCMD_EXECUTABLE) $(PHP_PHARCMD_SETTINGS) $(builddir)/phar.php pack -f $(builddir)/phar.phar -a pharcommand -c auto -x \\.svn -p 0 -s $(srcdir)/phar/phar.php -h sha1 -b "$(PHP_PHARCMD_BANG)" $(srcdir)/phar/; \
+ $(PHP_PHARCMD_EXECUTABLE) $(PHP_PHARCMD_SETTINGS) $(builddir)/phar.php pack -f $(builddir)/phar.phar -a pharcommand -c auto -x \\.svn -p 0 -s $(srcdir)/phar/phar.php -h sha1 -b "$(PHP_PHARCMD_BANG)" -l 9 $(srcdir)/phar/*.inc; \
chmod +x $(builddir)/phar.phar; \
else \
echo "Skipping phar.phar generating during cross compilation"; \

16
php-systemd-unit.patch Normal file
View File

@ -0,0 +1,16 @@
Index: php-7.4.0RC6/sapi/fpm/php-fpm.service.in
===================================================================
--- php-7.4.0RC6.orig/sapi/fpm/php-fpm.service.in 2019-11-19 11:33:35.195960137 +0100
+++ php-7.4.0RC6/sapi/fpm/php-fpm.service.in 2019-11-19 11:35:45.588688471 +0100
@@ -5,10 +5,10 @@
[Unit]
Description=The PHP FastCGI Process Manager
After=network.target
+Before=apache2.service nginx.service lighttpd.service
[Service]
Type=@php_fpm_systemd@
-PIDFile=@EXPANDED_LOCALSTATEDIR@/run/php-fpm.pid
ExecStart=@EXPANDED_SBINDIR@/php-fpm --nodaemonize --fpm-config @EXPANDED_SYSCONFDIR@/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID

721
php-systzdata-v23.patch Normal file
View File

@ -0,0 +1,721 @@
# License: MIT
# http://opensource.org/licenses/MIT
Add support for use of the system timezone database, rather
than embedding a copy. Discussed upstream but was not desired.
History:
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)
r19: adapt for timelib 2020.02 (in 8.0.0beta2)
r18: adapt for autotool change in 7.3.3RC1
r17: adapt for timelib 2018.01 (in 7.3.2RC1)
r16: adapt for timelib 2017.06 (in 7.2.3RC1)
r15: adapt for timelib 2017.05beta7 (in 7.2.0RC1)
r14: improve check for valid tz file
r13: adapt for upstream changes to use PHP allocator
r12: adapt for upstream changes for new zic
r11: use canonical names to avoid more case sensitivity issues
round lat/long from zone.tab towards zero per builtin db
r10: make timezone case insensitive
r9: fix another compile error without --with-system-tzdata configured (Michael Heimpold)
r8: fix compile error without --with-system-tzdata configured
r7: improve check for valid timezone id to exclude directories
r6: fix fd leak in r5, fix country code/BC flag use in
timezone_identifiers_list() using system db,
fix use of PECL timezonedb to override system db,
r5: reverts addition of "System/Localtime" fake tzname.
updated for 5.3.0, parses zone.tab to pick up mapping between
timezone name, country code and long/lat coords
r4: added "System/Localtime" tzname which uses /etc/localtime
r3: fix a crash if /usr/share/zoneinfo doesn't exist (Raphael Geissert)
r2: add filesystem trawl to set up name alias index
r1: initial revision
Index: php-8.2.7/ext/date/config0.m4
===================================================================
--- php-8.2.7.orig/ext/date/config0.m4
+++ php-8.2.7/ext/date/config0.m4
@@ -4,6 +4,19 @@ AC_CHECK_HEADERS([io.h])
dnl Check for strtoll, atoll
AC_CHECK_FUNCS(strtoll atoll)
+PHP_ARG_WITH(system-tzdata, for use of system timezone data,
+[ --with-system-tzdata[=DIR] to specify use of system timezone data],
+no, no)
+
+if test "$PHP_SYSTEM_TZDATA" != "no"; then
+ AC_DEFINE(HAVE_SYSTEM_TZDATA, 1, [Define if system timezone data is used])
+
+ if test "$PHP_SYSTEM_TZDATA" != "yes"; then
+ AC_DEFINE_UNQUOTED(HAVE_SYSTEM_TZDATA_PREFIX, "$PHP_SYSTEM_TZDATA",
+ [Define for location of system timezone data])
+ fi
+fi
+
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 lib/parse_posix.c
lib/timelib.c lib/tm2unixtime.c lib/unixtime2tm.c lib/parse_iso_intervals.c lib/interval.c"
Index: php-8.2.7/ext/date/lib/parse_tz.c
===================================================================
--- php-8.2.7.orig/ext/date/lib/parse_tz.c
+++ php-8.2.7/ext/date/lib/parse_tz.c
@@ -26,9 +26,22 @@
#include "timelib.h"
#include "timelib_private.h"
+#ifdef HAVE_SYSTEM_TZDATA
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <limits.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+#include "php_scandir.h"
+
+#else
#define TIMELIB_SUPPORTS_V2DATA
#define TIMELIB_SUPPORT_SLIM_FILE
#include "timezonedb.h"
+#endif
+
+#include <ctype.h>
#if (defined(__APPLE__) || defined(__APPLE_CC__)) && (defined(__BIG_ENDIAN__) || defined(__LITTLE_ENDIAN__))
# if defined(__LITTLE_ENDIAN__)
@@ -95,6 +108,11 @@ static int read_php_preamble(const unsig
{
uint32_t version;
+ if (memcmp(*tzf, "TZif", 4) == 0) {
+ *tzf += 20;
+ return 0;
+ }
+
/* read ID */
version = (*tzf)[3] - '0';
*tzf += 4;
@@ -577,7 +595,467 @@ void timelib_dump_tzinfo(timelib_tzinfo
}
}
-static int seek_to_tz_position(const unsigned char **tzf, const char *timezone, const timelib_tzdb *tzdb)
+#ifdef HAVE_SYSTEM_TZDATA
+
+#ifdef HAVE_SYSTEM_TZDATA_PREFIX
+#define ZONEINFO_PREFIX HAVE_SYSTEM_TZDATA_PREFIX
+#else
+#define ZONEINFO_PREFIX "/usr/share/zoneinfo"
+#endif
+
+/* System timezone database pointer. */
+static const timelib_tzdb *timezonedb_system;
+
+/* Hash table entry for the cache of the zone.tab mapping table. */
+struct location_info {
+ char code[2];
+ double latitude, longitude;
+ char name[64];
+ char *comment;
+ struct location_info *next;
+};
+
+/* Cache of zone.tab. */
+static struct location_info **system_location_table;
+
+/* Size of the zone.tab hash table; a random-ish prime big enough to
+ * prevent too many collisions. */
+#define LOCINFO_HASH_SIZE (1021)
+
+/* Compute a case insensitive hash of str */
+static uint32_t tz_hash(const char *str)
+{
+ const unsigned char *p = (const unsigned char *)str;
+ uint32_t hash = 5381;
+ int c;
+
+ while ((c = tolower(*p++)) != '\0') {
+ hash = (hash << 5) ^ hash ^ c;
+ }
+
+ return hash % LOCINFO_HASH_SIZE;
+}
+
+/* Parse an ISO-6709 date as used in zone.tab. Returns end of the
+ * parsed string on success, or NULL on parse error. On success,
+ * writes the parsed number to *result. */
+static char *parse_iso6709(char *p, double *result)
+{
+ double v, sign;
+ char *pend;
+ size_t len;
+
+ if (*p == '+')
+ sign = 1.0;
+ else if (*p == '-')
+ sign = -1.0;
+ else
+ return NULL;
+
+ p++;
+ for (pend = p; *pend >= '0' && *pend <= '9'; pend++)
+ ;;
+
+ /* Annoying encoding used by zone.tab has no decimal point, so use
+ * the length to determine the format:
+ *
+ * 4 = DDMM
+ * 5 = DDDMM
+ * 6 = DDMMSS
+ * 7 = DDDMMSS
+ */
+ len = pend - p;
+ if (len < 4 || len > 7) {
+ return NULL;
+ }
+
+ /* p => [D]DD */
+ v = (p[0] - '0') * 10.0 + (p[1] - '0');
+ p += 2;
+ if (len == 5 || len == 7)
+ v = v * 10.0 + (*p++ - '0');
+ /* p => MM[SS] */
+ v += (10.0 * (p[0] - '0')
+ + p[1] - '0') / 60.0;
+ p += 2;
+ /* p => [SS] */
+ if (len > 5) {
+ v += (10.0 * (p[0] - '0')
+ + p[1] - '0') / 3600.0;
+ p += 2;
+ }
+
+ /* Round to five decimal place, not because it's a good idea,
+ * but, because the builtin data uses rounded data, so, match
+ * that. */
+ *result = trunc(v * sign * 100000.0) / 100000.0;
+
+ return p;
+}
+
+/* This function parses the zone.tab file to build up the mapping of
+ * timezone to country code and geographic location, and returns a
+ * hash table. The hash table is indexed by the function:
+ *
+ * tz_hash(timezone-name)
+ */
+static struct location_info **create_location_table(void)
+{
+ struct location_info **li, *i;
+ char zone_tab[PATH_MAX];
+ char line[512];
+ FILE *fp;
+
+ strncpy(zone_tab, ZONEINFO_PREFIX "/zone.tab", sizeof zone_tab);
+
+ fp = fopen(zone_tab, "r");
+ if (!fp) {
+ return NULL;
+ }
+
+ li = calloc(LOCINFO_HASH_SIZE, sizeof *li);
+
+ while (fgets(line, sizeof line, fp)) {
+ char *p = line, *code, *name, *comment;
+ uint32_t hash;
+ double latitude, longitude;
+
+ while (isspace(*p))
+ p++;
+
+ if (*p == '#' || *p == '\0' || *p == '\n')
+ continue;
+
+ if (!isalpha(p[0]) || !isalpha(p[1]) || p[2] != '\t')
+ continue;
+
+ /* code => AA */
+ code = p;
+ p[2] = 0;
+ p += 3;
+
+ /* coords => [+-][D]DDMM[SS][+-][D]DDMM[SS] */
+ p = parse_iso6709(p, &latitude);
+ if (!p) {
+ continue;
+ }
+ p = parse_iso6709(p, &longitude);
+ if (!p) {
+ continue;
+ }
+
+ if (!p || *p != '\t') {
+ continue;
+ }
+
+ /* name = string */
+ name = ++p;
+ while (*p != '\t' && *p && *p != '\n')
+ p++;
+
+ *p++ = '\0';
+
+ /* comment = string */
+ comment = p;
+ while (*p != '\t' && *p && *p != '\n')
+ p++;
+
+ if (*p == '\n' || *p == '\t')
+ *p = '\0';
+
+ hash = tz_hash(name);
+ i = malloc(sizeof *i);
+ memcpy(i->code, code, 2);
+ strncpy(i->name, name, sizeof i->name);
+ i->comment = strdup(comment);
+ i->longitude = longitude;
+ i->latitude = latitude;
+ i->next = li[hash];
+ li[hash] = i;
+ /* printf("%s [%u, %f, %f]\n", name, hash, latitude, longitude); */
+ }
+
+ fclose(fp);
+
+ return li;
+}
+
+/* Return location info from hash table, using given timezone name.
+ * Returns NULL if the name could not be found. */
+const struct location_info *find_zone_info(struct location_info **li,
+ const char *name)
+{
+ uint32_t hash = tz_hash(name);
+ const struct location_info *l;
+
+ if (!li) {
+ return NULL;
+ }
+
+ for (l = li[hash]; l; l = l->next) {
+ if (timelib_strcasecmp(l->name, name) == 0)
+ return l;
+ }
+
+ return NULL;
+}
+
+/* Filter out some non-tzdata files and the posix/right databases, if
+ * present. */
+static int index_filter(const struct dirent *ent)
+{
+ return strcmp(ent->d_name, ".") != 0
+ && strcmp(ent->d_name, "..") != 0
+ && strcmp(ent->d_name, "posix") != 0
+ && strcmp(ent->d_name, "posixrules") != 0
+ && strcmp(ent->d_name, "right") != 0
+ && strstr(ent->d_name, ".list") == NULL
+ && strstr(ent->d_name, ".tab") == NULL;
+}
+
+static int sysdbcmp(const void *first, const void *second)
+{
+ const timelib_tzdb_index_entry *alpha = first, *beta = second;
+
+ return timelib_strcasecmp(alpha->id, beta->id);
+}
+
+/* Retrieve tzdata version. */
+static void retrieve_zone_version(timelib_tzdb *db)
+{
+ static char buf[30];
+ char path[PATH_MAX];
+ FILE *fp;
+
+ strncpy(path, ZONEINFO_PREFIX "/tzdata.zi", sizeof(path));
+
+ fp = fopen(path, "r");
+ if (fp) {
+ if (fgets(buf, sizeof(buf), fp)) {
+ if (!memcmp(buf, "# version ", 10) &&
+ isdigit(buf[10]) &&
+ isdigit(buf[11]) &&
+ isdigit(buf[12]) &&
+ isdigit(buf[13]) &&
+ islower(buf[14])) {
+ if (buf[14] >= 't') { /* 2022t = 2022.20 */
+ buf[17] = 0;
+ buf[16] = buf[14] - 't' + '0';
+ buf[15] = '2';
+ } else if (buf[14] >= 'j') { /* 2022j = 2022.10 */
+ buf[17] = 0;
+ buf[16] = buf[14] - 'j' + '0';
+ buf[15] = '1';
+ } else { /* 2022a = 2022.1 */
+ buf[16] = 0;
+ buf[15] = buf[14] - 'a' + '1';
+ }
+ buf[14] = '.';
+ db->version = buf+10;
+ }
+ }
+ fclose(fp);
+ }
+}
+
+
+/* Create the zone identifier index by trawling the filesystem. */
+static void create_zone_index(timelib_tzdb *db)
+{
+ size_t dirstack_size, dirstack_top;
+ size_t index_size, index_next;
+ timelib_tzdb_index_entry *db_index;
+ char **dirstack;
+
+ /* LIFO stack to hold directory entries to scan; each slot is a
+ * directory name relative to the zoneinfo prefix. */
+ dirstack_size = 32;
+ dirstack = malloc(dirstack_size * sizeof *dirstack);
+ dirstack_top = 1;
+ dirstack[0] = strdup("");
+
+ /* Index array. */
+ index_size = 64;
+ db_index = malloc(index_size * sizeof *db_index);
+ index_next = 0;
+
+ do {
+ struct dirent **ents;
+ char name[PATH_MAX], *top;
+ int count;
+
+ /* Pop the top stack entry, and iterate through its contents. */
+ top = dirstack[--dirstack_top];
+ snprintf(name, sizeof name, ZONEINFO_PREFIX "/%s", top);
+
+ count = php_scandir(name, &ents, index_filter, php_alphasort);
+
+ while (count > 0) {
+ struct stat st;
+ const char *leaf = ents[count - 1]->d_name;
+
+ snprintf(name, sizeof name, ZONEINFO_PREFIX "/%s/%s",
+ top, leaf);
+
+ if (strlen(name) && stat(name, &st) == 0) {
+ /* Name, relative to the zoneinfo prefix. */
+ const char *root = top;
+
+ if (root[0] == '/') root++;
+
+ snprintf(name, sizeof name, "%s%s%s", root,
+ *root ? "/": "", leaf);
+
+ if (S_ISDIR(st.st_mode)) {
+ if (dirstack_top == dirstack_size) {
+ dirstack_size *= 2;
+ dirstack = realloc(dirstack,
+ dirstack_size * sizeof *dirstack);
+ }
+ dirstack[dirstack_top++] = strdup(name);
+ }
+ else {
+ if (index_next == index_size) {
+ index_size *= 2;
+ db_index = realloc(db_index,
+ index_size * sizeof *db_index);
+ }
+
+ db_index[index_next++].id = strdup(name);
+ }
+ }
+
+ free(ents[--count]);
+ }
+
+ if (count != -1) free(ents);
+ free(top);
+ } while (dirstack_top);
+
+ qsort(db_index, index_next, sizeof *db_index, sysdbcmp);
+
+ db->index = db_index;
+ db->index_size = index_next;
+
+ free(dirstack);
+}
+
+#define FAKE_HEADER "1234\0??\1??"
+#define FAKE_UTC_POS (7 - 4)
+
+/* Create a fake data segment for database 'sysdb'. */
+static void fake_data_segment(timelib_tzdb *sysdb,
+ struct location_info **info)
+{
+ size_t n;
+ char *data, *p;
+
+ data = malloc(3 * sysdb->index_size + sizeof(FAKE_HEADER) - 1);
+
+ p = mempcpy(data, FAKE_HEADER, sizeof(FAKE_HEADER) - 1);
+
+ for (n = 0; n < sysdb->index_size; n++) {
+ const struct location_info *li;
+ timelib_tzdb_index_entry *ent;
+
+ ent = (timelib_tzdb_index_entry *)&sysdb->index[n];
+
+ /* Lookup the timezone name in the hash table. */
+ if (strcmp(ent->id, "UTC") == 0) {
+ ent->pos = FAKE_UTC_POS;
+ continue;
+ }
+
+ li = find_zone_info(info, ent->id);
+ if (li) {
+ /* If found, append the BC byte and the
+ * country code; set the position for this
+ * section of timezone data. */
+ ent->pos = (p - data) - 4;
+ *p++ = '\1';
+ *p++ = li->code[0];
+ *p++ = li->code[1];
+ }
+ else {
+ /* If not found, the timezone data can
+ * point at the header. */
+ ent->pos = 0;
+ }
+ }
+
+ sysdb->data = (unsigned char *)data;
+}
+
+/* Returns true if the passed-in stat structure describes a
+ * probably-valid timezone file. */
+static int is_valid_tzfile(const struct stat *st, int fd)
+{
+ if (fd) {
+ char buf[20];
+ if (read(fd, buf, 20)!=20) {
+ return 0;
+ }
+ lseek(fd, SEEK_SET, 0);
+ if (memcmp(buf, "TZif", 4)) {
+ return 0;
+ }
+ }
+ return S_ISREG(st->st_mode) && st->st_size > 20;
+}
+
+/* To allow timezone names to be used case-insensitively, find the
+ * canonical name for this timezone, if possible. */
+static const char *canonical_tzname(const char *timezone)
+{
+ if (timezonedb_system) {
+ timelib_tzdb_index_entry *ent, lookup;
+
+ lookup.id = (char *)timezone;
+
+ ent = bsearch(&lookup, timezonedb_system->index,
+ timezonedb_system->index_size, sizeof lookup,
+ sysdbcmp);
+ if (ent) {
+ return ent->id;
+ }
+ }
+
+ return timezone;
+}
+
+/* Return the mmap()ed tzfile if found, else NULL. On success, the
+ * length of the mapped data is placed in *length. */
+static char *map_tzfile(const char *timezone, size_t *length)
+{
+ char fname[PATH_MAX];
+ struct stat st;
+ char *p;
+ int fd;
+
+ if (timezone[0] == '\0' || strstr(timezone, "..") != NULL) {
+ return NULL;
+ }
+
+ snprintf(fname, sizeof fname, ZONEINFO_PREFIX "/%s", canonical_tzname(timezone));
+
+ fd = open(fname, O_RDONLY);
+ if (fd == -1) {
+ return NULL;
+ } else if (fstat(fd, &st) != 0 || !is_valid_tzfile(&st, fd)) {
+ close(fd);
+ return NULL;
+ }
+
+ *length = st.st_size;
+ p = mmap(NULL, st.st_size, PROT_READ, MAP_SHARED, fd, 0);
+ close(fd);
+
+ return p != MAP_FAILED ? p : NULL;
+}
+
+#endif
+
+static int inmem_seek_to_tz_position(const unsigned char **tzf, const char *timezone, const timelib_tzdb *tzdb)
{
int left = 0, right = tzdb->index_size - 1;
@@ -603,9 +1081,49 @@ static int seek_to_tz_position(const uns
return 0;
}
+static int seek_to_tz_position(const unsigned char **tzf, const char *timezone,
+ char **map, size_t *maplen,
+ const timelib_tzdb *tzdb)
+{
+#ifdef HAVE_SYSTEM_TZDATA
+ if (tzdb == timezonedb_system) {
+ char *orig;
+
+ orig = map_tzfile(timezone, maplen);
+ if (orig == NULL) {
+ return 0;
+ }
+
+ (*tzf) = (unsigned char *)orig;
+ *map = orig;
+ return 1;
+ }
+ else
+#endif
+ {
+ return inmem_seek_to_tz_position(tzf, timezone, tzdb);
+ }
+}
+
const timelib_tzdb *timelib_builtin_db(void)
{
+#ifdef HAVE_SYSTEM_TZDATA
+ if (timezonedb_system == NULL) {
+ timelib_tzdb *tmp = malloc(sizeof *tmp);
+
+ tmp->version = "0.system";
+ tmp->data = NULL;
+ create_zone_index(tmp);
+ retrieve_zone_version(tmp);
+ system_location_table = create_location_table();
+ fake_data_segment(tmp, system_location_table);
+ timezonedb_system = tmp;
+ }
+
+ return timezonedb_system;
+#else
return &timezonedb_builtin;
+#endif
}
const timelib_tzdb_index_entry *timelib_timezone_identifiers_list(const timelib_tzdb *tzdb, int *count)
@@ -617,7 +1135,30 @@ const timelib_tzdb_index_entry *timelib_
int timelib_timezone_id_is_valid(const char *timezone, const timelib_tzdb *tzdb)
{
const unsigned char *tzf;
- return (seek_to_tz_position(&tzf, timezone, tzdb));
+
+#ifdef HAVE_SYSTEM_TZDATA
+ if (tzdb == timezonedb_system) {
+ char fname[PATH_MAX];
+ struct stat st;
+
+ if (timezone[0] == '\0' || strstr(timezone, "..") != NULL) {
+ return 0;
+ }
+
+ if (system_location_table) {
+ if (find_zone_info(system_location_table, timezone) != NULL) {
+ /* found in cache */
+ return 1;
+ }
+ }
+
+ snprintf(fname, sizeof fname, ZONEINFO_PREFIX "/%s", canonical_tzname(timezone));
+
+ return stat(fname, &st) == 0 && is_valid_tzfile(&st, 0);
+ }
+#endif
+
+ return (inmem_seek_to_tz_position(&tzf, timezone, tzdb));
}
static int skip_64bit_preamble(const unsigned char **tzf, timelib_tzinfo *tz)
@@ -662,6 +1203,8 @@ static timelib_tzinfo* timelib_tzinfo_ct
timelib_tzinfo *timelib_parse_tzfile(const char *timezone, const timelib_tzdb *tzdb, int *error_code)
{
const unsigned char *tzf;
+ char *memmap = NULL;
+ size_t maplen;
timelib_tzinfo *tmp;
int version;
int transitions_result, types_result;
@@ -669,7 +1212,7 @@ timelib_tzinfo *timelib_parse_tzfile(con
*error_code = TIMELIB_ERROR_NO_ERROR;
- if (seek_to_tz_position(&tzf, timezone, tzdb)) {
+ if (seek_to_tz_position(&tzf, timezone, &memmap, &maplen, tzdb)) {
tmp = timelib_tzinfo_ctor(timezone);
version = read_preamble(&tzf, tmp, &type);
@@ -712,11 +1255,36 @@ timelib_tzinfo *timelib_parse_tzfile(con
return NULL;
}
+#ifdef HAVE_SYSTEM_TZDATA
+ if (memmap) {
+ const struct location_info *li;
+
+ /* TZif-style - grok the location info from the system database,
+ * if possible. */
+
+ if ((li = find_zone_info(system_location_table, timezone)) != NULL) {
+ tmp->location.comments = timelib_strdup(li->comment);
+ strncpy(tmp->location.country_code, li->code, 2);
+ tmp->location.longitude = li->longitude;
+ tmp->location.latitude = li->latitude;
+ tmp->bc = 1;
+ }
+ else {
+ set_default_location_and_comments(&tzf, tmp);
+ }
+
+ /* Now done with the mmap segment - discard it. */
+ munmap(memmap, maplen);
+ } else {
+#endif
if (type == TIMELIB_TZINFO_PHP) {
read_location(&tzf, tmp);
} else {
set_default_location_and_comments(&tzf, tmp);
}
+#ifdef HAVE_SYSTEM_TZDATA
+ }
+#endif
} else {
*error_code = TIMELIB_ERROR_NO_SUCH_TIMEZONE;
tmp = NULL;
Index: php-8.2.7/ext/date/php_date.c
===================================================================
--- php-8.2.7.orig/ext/date/php_date.c
+++ php-8.2.7/ext/date/php_date.c
@@ -472,7 +472,11 @@ PHP_MINFO_FUNCTION(date)
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, "\"Olson\" Timezone Database Version", tzdb->version);
+#ifdef HAVE_SYSTEM_TZDATA
+ php_info_print_table_row(2, "Timezone Database", "system");
+#else
php_info_print_table_row(2, "Timezone Database", php_date_global_timezone_db_enabled ? "external" : "internal");
+#endif
php_info_print_table_row(2, "Default timezone", guess_timezone(tzdb));
php_info_print_table_end();

15
php8-fpm.conf Normal file
View File

@ -0,0 +1,15 @@
<IfModule mod_proxy_fcgi.c>
<FilesMatch "\.ph(p[34578]?|tml)$">
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
<FilesMatch "\.php[34578]?s$">
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
DirectoryIndex index.php4
DirectoryIndex index.php5
DirectoryIndex index.php7
DirectoryIndex index.php8
DirectoryIndex index.php
</IfModule>

5342
php8.changes Normal file

File diff suppressed because it is too large Load Diff

249
php8.keyring Normal file
View File

@ -0,0 +1,249 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
wpxdIIyaoaS8NSuPIrV1g4SUXYs=
=fB6k
-----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
iU/+
=pJ+M
-----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
bItY
=z8k6
-----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
U3I=
=wkmV
-----END PGP PUBLIC KEY BLOCK-----

11
php8.rpmlintrc Normal file
View File

@ -0,0 +1,11 @@
# Non-versioned shared library, php-embed requires
# exact version of main package, parallel installation
# not wanted
addFilter("php.-embed.* shlib-policy-name-error")
# PHP7 is (almost) obsolete, replaced by PHP8
addFilter("obsolete-not-provided php7-*")
# Silence expected error in configuration script
addFilter("rpath-in-buildconfig /usr/bin/php-config")
# False positives for scripts which check used shell
addFilter("potential-bashisms /usr/share/php8/build/config.guess")
addFilter("potential-bashisms /usr/share/php8/build/shtool")

1723
php8.spec Normal file

File diff suppressed because it is too large Load Diff