From b81a2bd3840e45684df6f7dd67b8b9230046b6d2 Mon Sep 17 00:00:00 2001 From: Rosen Penev Date: Sat, 20 Apr 2019 13:57:38 -0700 Subject: [PATCH] php7: Fix compilation without deprecated OpenSSL APIs Refreshed patches. Signed-off-by: Rosen Penev --- lang/php7/Makefile | 2 +- .../patches/0032-Use-system-timezone.patch | 2 +- ...ove-build-timestamps-from-generated-.patch | 2 +- .../0050-remove-build-timestamps.patch | 4 +- ...xt-opcache-fix-detection-of-shm-mmap.patch | 6 +- .../patches/1004-disable-phar-command.patch | 2 +- lang/php7/patches/1006-multiline-syslog.patch | 4 +- ...12-php_iconv_string-null-out-pointer.patch | 31 +--- .../patches/1020-openssl-deprecated.patch | 169 ++++++++++++++++++ 9 files changed, 184 insertions(+), 38 deletions(-) create mode 100644 lang/php7/patches/1020-openssl-deprecated.patch diff --git a/lang/php7/Makefile b/lang/php7/Makefile index f5ce4e49a..e2e125253 100644 --- a/lang/php7/Makefile +++ b/lang/php7/Makefile @@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=php PKG_VERSION:=7.2.17 -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_MAINTAINER:=Michael Heimpold diff --git a/lang/php7/patches/0032-Use-system-timezone.patch b/lang/php7/patches/0032-Use-system-timezone.patch index efa1fc7e0..0ab03fc7c 100644 --- a/lang/php7/patches/0032-Use-system-timezone.patch +++ b/lang/php7/patches/0032-Use-system-timezone.patch @@ -17,7 +17,7 @@ diff --git a/ext/date/php_date.c b/ext/date/php_date.c index cbe6e91..1999c83 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c -@@ -1003,6 +1003,23 @@ static char* guess_timezone(const timelib_tzdb *tzdb) +@@ -1016,6 +1016,23 @@ static char* guess_timezone(const timelib_tzdb *tzdb) DATEG(timezone_valid) = 1; return DATEG(default_timezone); } diff --git a/lang/php7/patches/0041-Add-patch-to-remove-build-timestamps-from-generated-.patch b/lang/php7/patches/0041-Add-patch-to-remove-build-timestamps-from-generated-.patch index e05c102b8..528e0f51a 100644 --- a/lang/php7/patches/0041-Add-patch-to-remove-build-timestamps-from-generated-.patch +++ b/lang/php7/patches/0041-Add-patch-to-remove-build-timestamps-from-generated-.patch @@ -47,7 +47,7 @@ Subject: Add patch to remove build timestamps from generated binaries. *aix*) --- a/sapi/cgi/cgi_main.c +++ b/sapi/cgi/cgi_main.c -@@ -2427,9 +2427,9 @@ consult the installation file that came +@@ -2442,9 +2442,9 @@ consult the installation file that came SG(request_info).no_headers = 1; } #if ZEND_DEBUG diff --git a/lang/php7/patches/0050-remove-build-timestamps.patch b/lang/php7/patches/0050-remove-build-timestamps.patch index 9c7552ddc..9632e5762 100644 --- a/lang/php7/patches/0050-remove-build-timestamps.patch +++ b/lang/php7/patches/0050-remove-build-timestamps.patch @@ -1,6 +1,6 @@ --- a/ext/opcache/ZendAccelerator.c +++ b/ext/opcache/ZendAccelerator.c -@@ -2456,11 +2456,6 @@ static void accel_gen_system_id(void) +@@ -2484,11 +2484,6 @@ static void accel_gen_system_id(void) PHP_MD5Update(&context, PHP_VERSION, sizeof(PHP_VERSION)-1); PHP_MD5Update(&context, ZEND_EXTENSION_BUILD_ID, sizeof(ZEND_EXTENSION_BUILD_ID)-1); PHP_MD5Update(&context, ZEND_BIN_ID, sizeof(ZEND_BIN_ID)-1); @@ -14,7 +14,7 @@ c = digest[i] >> 4; --- a/sapi/litespeed/lsapi_main.c +++ b/sapi/litespeed/lsapi_main.c -@@ -1034,9 +1034,9 @@ static int cli_main( int argc, char * ar +@@ -1057,9 +1057,9 @@ static int cli_main( int argc, char * ar case 'v': if (php_request_startup() != FAILURE) { #if ZEND_DEBUG diff --git a/lang/php7/patches/1001-ext-opcache-fix-detection-of-shm-mmap.patch b/lang/php7/patches/1001-ext-opcache-fix-detection-of-shm-mmap.patch index d2a1e91af..4e50d5ef6 100644 --- a/lang/php7/patches/1001-ext-opcache-fix-detection-of-shm-mmap.patch +++ b/lang/php7/patches/1001-ext-opcache-fix-detection-of-shm-mmap.patch @@ -22,9 +22,9 @@ diff --git a/ext/opcache/config.m4 b/ext/opcache/config.m4 index b7e4835..7b6c0aa 100644 --- a/ext/opcache/config.m4 +++ b/ext/opcache/config.m4 -@@ -11,127 +11,13 @@ if test "$PHP_OPCACHE" != "no"; then - AC_DEFINE(HAVE_MPROTECT, 1, [Define if you have mprotect() function]) - ]) +@@ -28,127 +28,13 @@ if test "$PHP_OPCACHE" != "no"; then + + AC_CHECK_HEADERS([unistd.h sys/uio.h]) - AC_MSG_CHECKING(for sysvipc shared memory support) - AC_TRY_RUN([ diff --git a/lang/php7/patches/1004-disable-phar-command.patch b/lang/php7/patches/1004-disable-phar-command.patch index e6162cdfb..02ab057aa 100644 --- a/lang/php7/patches/1004-disable-phar-command.patch +++ b/lang/php7/patches/1004-disable-phar-command.patch @@ -11,7 +11,7 @@ --- a/configure.ac 2016-09-20 22:26:38.000000000 +0200 +++ b/configure.ac 2016-09-20 22:42:30.380101556 +0200 -@@ -1448,13 +1448,13 @@ +@@ -1454,13 +1454,13 @@ INLINE_CFLAGS="$INLINE_CFLAGS $standard_libtool_flag" CXXFLAGS="$CXXFLAGS $standard_libtool_flag \$(PROF_FLAGS)" diff --git a/lang/php7/patches/1006-multiline-syslog.patch b/lang/php7/patches/1006-multiline-syslog.patch index 1346481f2..5b105069b 100644 --- a/lang/php7/patches/1006-multiline-syslog.patch +++ b/lang/php7/patches/1006-multiline-syslog.patch @@ -23,7 +23,7 @@ diff --git a/configure.ac b/configure.ac index cb95d86..a63354f 100644 --- a/configure.ac +++ b/configure.ac -@@ -1443,7 +1443,7 @@ PHP_ADD_SOURCES(main, main.c snprintf.c spprintf.c php_sprintf.c \ +@@ -1478,7 +1478,7 @@ PHP_ADD_SOURCES(main, main.c snprintf.c spprintf.c php_sprintf.c \ php_ini.c SAPI.c rfc1867.c php_content_types.c strlcpy.c \ strlcat.c explicit_bzero.c mergesort.c reentrancy.c php_variables.c php_ticks.c \ network.c php_open_temporary_file.c \ @@ -166,7 +166,7 @@ diff --git a/win32/build/config.w32 b/win32/build/config.w32 index 6cbb18b..71cf491 100644 --- a/win32/build/config.w32 +++ b/win32/build/config.w32 -@@ -244,7 +244,8 @@ ADD_FLAG("CFLAGS_BD_ZEND", "/D ZEND_ENABLE_STATIC_TSRMLS_CACHE=1"); +@@ -241,7 +241,8 @@ ADD_FLAG("CFLAGS_BD_ZEND", "/D ZEND_ENABLE_STATIC_TSRMLS_CACHE=1"); ADD_SOURCES("main", "main.c snprintf.c spprintf.c getopt.c fopen_wrappers.c \ php_scandir.c php_ini.c SAPI.c rfc1867.c php_content_types.c strlcpy.c \ strlcat.c mergesort.c reentrancy.c php_variables.c php_ticks.c network.c \ diff --git a/lang/php7/patches/1012-php_iconv_string-null-out-pointer.patch b/lang/php7/patches/1012-php_iconv_string-null-out-pointer.patch index 6dfbe51ef..e2db2d27f 100644 --- a/lang/php7/patches/1012-php_iconv_string-null-out-pointer.patch +++ b/lang/php7/patches/1012-php_iconv_string-null-out-pointer.patch @@ -1,26 +1,3 @@ -commit 31e53f07c26e5ac75ec2c2d99497439323dbdaf7 -Author: Philip Prindeville -Date: Wed Jan 24 18:47:19 2018 -0700 - - Be consistent in clearing out in php_iconv_string() - - Also, don't bother checking returned point in error case since it - will always be NULL (and not require free()ing, obviously). - -diff --git a/ext/iconv/iconv.c b/ext/iconv/iconv.c -index 35dafd4..4289242 100644 ---- a/ext/iconv/iconv.c -+++ b/ext/iconv/iconv.c -@@ -559,6 +559,8 @@ PHP_ICONV_API php_iconv_err_t php_iconv_string(const char *in_p, size_t in_len, - size_t result; - zend_string *ret, *out_buffer; - -+ *out = NULL; -+ - /* - This is not the right way to get output size... - This is not space efficient for large text. - commit 3763c8f1645983b5abc37c60597e1ecc1bf89019 Author: Philip Prindeville Date: Thu Jan 25 14:18:00 2018 -0700 @@ -31,7 +8,7 @@ diff --git a/ext/iconv/iconv.c b/ext/iconv/iconv.c index 4289242..807bb14 100644 --- a/ext/iconv/iconv.c +++ b/ext/iconv/iconv.c -@@ -697,6 +697,7 @@ PHP_ICONV_API php_iconv_err_t php_iconv_string(const char *in_p, size_t in_len, +@@ -699,6 +699,7 @@ PHP_ICONV_API php_iconv_err_t php_iconv_string(const char *in_p, size_t in_len, iconv_close(cd); if (result == (size_t)(-1)) { @@ -39,7 +16,7 @@ index 4289242..807bb14 100644 switch (errno) { case EINVAL: retval = PHP_ICONV_ERR_ILLEGAL_CHAR; -@@ -713,7 +714,6 @@ PHP_ICONV_API php_iconv_err_t php_iconv_string(const char *in_p, size_t in_len, +@@ -715,7 +716,6 @@ PHP_ICONV_API php_iconv_err_t php_iconv_string(const char *in_p, size_t in_len, default: /* other error */ @@ -47,7 +24,7 @@ index 4289242..807bb14 100644 return PHP_ICONV_ERR_UNKNOWN; } } -@@ -986,9 +986,6 @@ static php_iconv_err_t _php_iconv_strpos(size_t *pretval, +@@ -988,9 +988,6 @@ static php_iconv_err_t _php_iconv_strpos(size_t *pretval, err = php_iconv_string(ndl, ndl_nbytes, &ndl_buf, GENERIC_SUPERSET_NAME, enc); if (err != PHP_ICONV_ERR_SUCCESS) { @@ -57,7 +34,7 @@ index 4289242..807bb14 100644 return err; } -@@ -2465,9 +2462,6 @@ PHP_NAMED_FUNCTION(php_if_iconv) +@@ -2494,9 +2491,6 @@ PHP_NAMED_FUNCTION(php_if_iconv) if (err == PHP_ICONV_ERR_SUCCESS && out_buffer != NULL) { RETVAL_STR(out_buffer); } else { diff --git a/lang/php7/patches/1020-openssl-deprecated.patch b/lang/php7/patches/1020-openssl-deprecated.patch new file mode 100644 index 000000000..b61884a3a --- /dev/null +++ b/lang/php7/patches/1020-openssl-deprecated.patch @@ -0,0 +1,169 @@ +--- a/ext/ftp/php_ftp.c ++++ b/ext/ftp/php_ftp.c +@@ -320,12 +320,14 @@ static void ftp_destructor_ftpbuf(zend_resource *rsrc) + PHP_MINIT_FUNCTION(ftp) + { + #ifdef HAVE_FTP_SSL ++#if OPENSSL_VERSION_NUMBER < 0x10100000L + SSL_library_init(); + OpenSSL_add_all_ciphers(); + OpenSSL_add_all_digests(); + OpenSSL_add_all_algorithms(); + + SSL_load_error_strings(); ++#endif + #endif + + le_ftpbuf = zend_register_list_destructors_ex(ftp_destructor_ftpbuf, NULL, le_ftpbuf_name, module_number); +--- a/ext/openssl/openssl.c ++++ b/ext/openssl/openssl.c +@@ -683,6 +683,12 @@ static const unsigned char *ASN1_STRING_get0_data(const ASN1_STRING *asn1) + return M_ASN1_STRING_data(asn1); + } + ++#define OpenSSL_version OpenSSL_version ++#define OPENSSL_VERSION OPENSSL_VERSION ++#define X509_getm_notBefore X509_get_notBefore ++#define X509_getm_notAfter X509_get_notAfter ++#define EVP_CIPHER_CTX_reset EVP_CIPHER_CTX_cleanup ++ + #if PHP_OPENSSL_API_VERSION < 0x10002 + + static int X509_get_signature_nid(const X509 *x) +@@ -1587,7 +1593,7 @@ PHP_MINFO_FUNCTION(openssl) + { + php_info_print_table_start(); + php_info_print_table_row(2, "OpenSSL support", "enabled"); +- php_info_print_table_row(2, "OpenSSL Library Version", SSLeay_version(SSLEAY_VERSION)); ++ php_info_print_table_row(2, "OpenSSL Library Version", OpenSSL_version(OPENSSL_VERSION)); + php_info_print_table_row(2, "OpenSSL Header Version", OPENSSL_VERSION_TEXT); + php_info_print_table_row(2, "Openssl default config", default_ssl_conf_filename); + php_info_print_table_end(); +@@ -2361,11 +2367,11 @@ PHP_FUNCTION(openssl_x509_parse) + add_assoc_string(return_value, "serialNumberHex", hex_serial); + OPENSSL_free(hex_serial); + +- php_openssl_add_assoc_asn1_string(return_value, "validFrom", X509_get_notBefore(cert)); +- php_openssl_add_assoc_asn1_string(return_value, "validTo", X509_get_notAfter(cert)); ++ php_openssl_add_assoc_asn1_string(return_value, "validFrom", X509_getm_notBefore(cert)); ++ php_openssl_add_assoc_asn1_string(return_value, "validTo", X509_getm_notAfter(cert)); + +- add_assoc_long(return_value, "validFrom_time_t", php_openssl_asn1_time_to_time_t(X509_get_notBefore(cert))); +- add_assoc_long(return_value, "validTo_time_t", php_openssl_asn1_time_to_time_t(X509_get_notAfter(cert))); ++ add_assoc_long(return_value, "validFrom_time_t", php_openssl_asn1_time_to_time_t(X509_getm_notBefore(cert))); ++ add_assoc_long(return_value, "validTo_time_t", php_openssl_asn1_time_to_time_t(X509_getm_notAfter(cert))); + + tmpstr = (char *)X509_alias_get0(cert, NULL); + if (tmpstr) { +@@ -3455,8 +3461,8 @@ PHP_FUNCTION(openssl_csr_sign) + php_openssl_store_errors(); + goto cleanup; + } +- X509_gmtime_adj(X509_get_notBefore(new_cert), 0); +- X509_gmtime_adj(X509_get_notAfter(new_cert), 60*60*24*(long)num_days); ++ X509_gmtime_adj(X509_getm_notBefore(new_cert), 0); ++ X509_gmtime_adj(X509_getm_notAfter(new_cert), 60*60*24*(long)num_days); + i = X509_set_pubkey(new_cert, key); + if (!i) { + php_openssl_store_errors(); +@@ -6072,7 +6078,7 @@ PHP_FUNCTION(openssl_seal) + + /* allocate one byte extra to make room for \0 */ + buf = emalloc(data_len + EVP_CIPHER_CTX_block_size(ctx)); +- EVP_CIPHER_CTX_cleanup(ctx); ++ EVP_CIPHER_CTX_reset(ctx); + + if (EVP_SealInit(ctx, cipher, eks, eksl, &iv_buf[0], pkeys, nkeys) <= 0 || + !EVP_SealUpdate(ctx, buf, &len1, (unsigned char *)data, (int)data_len) || +@@ -6622,7 +6628,7 @@ PHP_FUNCTION(openssl_encrypt) + if (free_iv) { + efree(iv); + } +- EVP_CIPHER_CTX_cleanup(cipher_ctx); ++ EVP_CIPHER_CTX_reset(cipher_ctx); + EVP_CIPHER_CTX_free(cipher_ctx); + } + /* }}} */ +@@ -6709,7 +6715,7 @@ PHP_FUNCTION(openssl_decrypt) + if (base64_str) { + zend_string_release(base64_str); + } +- EVP_CIPHER_CTX_cleanup(cipher_ctx); ++ EVP_CIPHER_CTX_reset(cipher_ctx); + EVP_CIPHER_CTX_free(cipher_ctx); + } + /* }}} */ +--- a/ext/openssl/xp_ssl.c ++++ b/ext/openssl/xp_ssl.c +@@ -56,8 +56,21 @@ + #define HAVE_SSL3 1 + #endif + ++#if PHP_OPENSSL_API_VERSION >= 0x10100 ++#define HAVE_TLS 1 ++#endif ++ ++#ifndef OPENSSL_NO_TLS1_METHOD ++#define HAVE_TLS1 1 ++#endif ++ ++#ifndef OPENSSL_NO_TLS1_1_METHOD + #define HAVE_TLS11 1 ++#endif ++ ++#ifndef OPENSSL_NO_TLS1_2_METHOD + #define HAVE_TLS12 1 ++#endif + + #ifndef OPENSSL_NO_ECDH + #define HAVE_ECDH 1 +@@ -78,9 +91,10 @@ + #define STREAM_CRYPTO_IS_CLIENT (1<<0) + #define STREAM_CRYPTO_METHOD_SSLv2 (1<<1) + #define STREAM_CRYPTO_METHOD_SSLv3 (1<<2) +-#define STREAM_CRYPTO_METHOD_TLSv1_0 (1<<3) +-#define STREAM_CRYPTO_METHOD_TLSv1_1 (1<<4) +-#define STREAM_CRYPTO_METHOD_TLSv1_2 (1<<5) ++#define STREAM_CRYPTO_METHOD_TLS (1<<3) ++#define STREAM_CRYPTO_METHOD_TLSv1_0 (1<<4) ++#define STREAM_CRYPTO_METHOD_TLSv1_1 (1<<5) ++#define STREAM_CRYPTO_METHOD_TLSv1_2 (1<<6) + + /* Simplify ssl context option retrieval */ + #define GET_VER_OPT(name) \ +@@ -960,9 +974,23 @@ static const SSL_METHOD *php_openssl_select_crypto_method(zend_long method_value + php_error_docref(NULL, E_WARNING, + "SSLv3 unavailable in the OpenSSL library against which PHP is linked"); + return NULL; ++#endif ++ } else if (method_value == STREAM_CRYPTO_METHOD_TLS) { ++#ifdef HAVE_TLS ++ return is_client ? TLS_client_method() : TLS_server_method(); ++#else ++ php_error_docref(NULL, E_WARNING, ++ "TLS unavailable in the OpenSSL library against which PHP is linked"); ++ return NULL; + #endif + } else if (method_value == STREAM_CRYPTO_METHOD_TLSv1_0) { ++#ifdef HAVE_TLS1 + return is_client ? TLSv1_client_method() : TLSv1_server_method(); ++#else ++ php_error_docref(NULL, E_WARNING, ++ "TLSv1 unavailable in the OpenSSL library against which PHP is linked"); ++ return NULL; ++#endif + } else if (method_value == STREAM_CRYPTO_METHOD_TLSv1_1) { + #ifdef HAVE_TLS11 + return is_client ? TLSv1_1_client_method() : TLSv1_1_server_method(); +@@ -1014,9 +1042,11 @@ static int php_openssl_get_crypto_method_ctx_flags(int method_flags) /* {{{ */ + ssl_ctx_options |= SSL_OP_NO_SSLv3; + } + #endif ++#ifdef HAVE_TLS1 + if (!(method_flags & STREAM_CRYPTO_METHOD_TLSv1_0)) { + ssl_ctx_options |= SSL_OP_NO_TLSv1; + } ++#endif + #ifdef HAVE_TLS11 + if (!(method_flags & STREAM_CRYPTO_METHOD_TLSv1_1)) { + ssl_ctx_options |= SSL_OP_NO_TLSv1_1;