From ee6ceaf397f5e3a9f0270b687ca31e96234a019e Mon Sep 17 00:00:00 2001 From: Adrian Perez de Castro Date: Mon, 27 Jun 2022 13:30:26 +0300 Subject: [PATCH] package/freerdp: fix build with libressl Import a patch for fixing the build with libressl 2.7.0 or newer, which has also been submitted upstream. Fixes: http://autobuild.buildroot.net/results/a924b2a8c690e5afd1b5078236baef3f425aeb96/ Signed-off-by: Adrian Perez de Castro Signed-off-by: Thomas Petazzoni --- ...uilding-with-LibreSSL-2.7.0-or-newer.patch | 126 ++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 package/freerdp/0004-Fix-building-with-LibreSSL-2.7.0-or-newer.patch diff --git a/package/freerdp/0004-Fix-building-with-LibreSSL-2.7.0-or-newer.patch b/package/freerdp/0004-Fix-building-with-LibreSSL-2.7.0-or-newer.patch new file mode 100644 index 0000000000..3edf1ff3b3 --- /dev/null +++ b/package/freerdp/0004-Fix-building-with-LibreSSL-2.7.0-or-newer.patch @@ -0,0 +1,126 @@ +From 55a5a0a14ecef81c8ece1fea4a5a6004aebfeaff Mon Sep 17 00:00:00 2001 +From: Adrian Perez de Castro +Date: Mon, 27 Jun 2022 11:45:44 +0200 +Subject: [PATCH] Fix building with LibreSSL 2.7.0 or newer + +With LibreSSL 2.7.0 (or newer versions) some more structs have made +opaque, which requires a few changes: + +- BIO_meth_new() and related functions are now defined by LibreSSL, the + versions from opensslcompat.{h,c} does not need to be used anymore. +- HMAC_CTX is now opaque, HMAC_CTX_new(), EVP_MD_CTX_new, and related + functions should be used instead in winpr's hash.c. + +Signed-off-by: Adrian Perez de Castro +[Upstream status: https://github.com/FreeRDP/FreeRDP/commit/436f212be3950917e4bb209aa5064e423f0dd882] +--- + libfreerdp/crypto/opensslcompat.c | 3 ++- + libfreerdp/crypto/opensslcompat.h | 3 ++- + winpr/libwinpr/crypto/hash.c | 21 ++++++++++++++------- + 3 files changed, 18 insertions(+), 9 deletions(-) + +diff --git a/libfreerdp/crypto/opensslcompat.c b/libfreerdp/crypto/opensslcompat.c +index 701902dc2..314d6b51f 100644 +--- a/libfreerdp/crypto/opensslcompat.c ++++ b/libfreerdp/crypto/opensslcompat.c +@@ -19,7 +19,8 @@ + + #include "opensslcompat.h" + +-#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) ++#if OPENSSL_VERSION_NUMBER < 0x10100000L || \ ++ (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x2070000fL) + + BIO_METHOD* BIO_meth_new(int type, const char* name) + { +diff --git a/libfreerdp/crypto/opensslcompat.h b/libfreerdp/crypto/opensslcompat.h +index 169e8e4c2..3ad5b6bd4 100644 +--- a/libfreerdp/crypto/opensslcompat.h ++++ b/libfreerdp/crypto/opensslcompat.h +@@ -30,7 +30,8 @@ + + #include + +-#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) ++#if OPENSSL_VERSION_NUMBER < 0x10100000L || \ ++ (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x2070000fL) + + #include + #include +diff --git a/winpr/libwinpr/crypto/hash.c b/winpr/libwinpr/crypto/hash.c +index 8265b2e90..5e94039e7 100644 +--- a/winpr/libwinpr/crypto/hash.c ++++ b/winpr/libwinpr/crypto/hash.c +@@ -151,7 +151,8 @@ WINPR_HMAC_CTX* winpr_HMAC_New(void) + WINPR_HMAC_CTX* ctx = NULL; + #if defined(WITH_OPENSSL) + HMAC_CTX* hmac = NULL; +-#if (OPENSSL_VERSION_NUMBER < 0x10100000L) || defined(LIBRESSL_VERSION_NUMBER) ++#if (OPENSSL_VERSION_NUMBER < 0x10100000L) || \ ++ (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x2070000fL) + + if (!(hmac = (HMAC_CTX*)calloc(1, sizeof(HMAC_CTX)))) + return NULL; +@@ -185,7 +186,8 @@ BOOL winpr_HMAC_Init(WINPR_HMAC_CTX* ctx, WINPR_MD_TYPE md, const BYTE* key, siz + if (!evp || !hmac) + return FALSE; + +-#if (OPENSSL_VERSION_NUMBER < 0x10000000L) || defined(LIBRESSL_VERSION_NUMBER) ++#if (OPENSSL_VERSION_NUMBER < 0x10000000L) || \ ++ (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x2070000fL) + HMAC_Init_ex(hmac, key, keylen, evp, NULL); /* no return value on OpenSSL 0.9.x */ + return TRUE; + #else +@@ -221,7 +223,8 @@ BOOL winpr_HMAC_Update(WINPR_HMAC_CTX* ctx, const BYTE* input, size_t ilen) + { + #if defined(WITH_OPENSSL) + HMAC_CTX* hmac = (HMAC_CTX*)ctx; +-#if (OPENSSL_VERSION_NUMBER < 0x10000000L) || defined(LIBRESSL_VERSION_NUMBER) ++#if (OPENSSL_VERSION_NUMBER < 0x10000000L) || \ ++ (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x2070000fL) + HMAC_Update(hmac, input, ilen); /* no return value on OpenSSL 0.9.x */ + return TRUE; + #else +@@ -253,7 +256,8 @@ BOOL winpr_HMAC_Final(WINPR_HMAC_CTX* ctx, BYTE* output, size_t olen) + + #if defined(WITH_OPENSSL) + hmac = (HMAC_CTX*)ctx; +-#if (OPENSSL_VERSION_NUMBER < 0x10000000L) || defined(LIBRESSL_VERSION_NUMBER) ++#if (OPENSSL_VERSION_NUMBER < 0x10000000L) || \ ++ (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x2070000fL) + HMAC_Final(hmac, output, NULL); /* no return value on OpenSSL 0.9.x */ + return TRUE; + #else +@@ -279,7 +283,8 @@ void winpr_HMAC_Free(WINPR_HMAC_CTX* ctx) + + if (hmac) + { +-#if (OPENSSL_VERSION_NUMBER < 0x10100000L) || defined(LIBRESSL_VERSION_NUMBER) ++#if (OPENSSL_VERSION_NUMBER < 0x10100000L) || \ ++ (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x2070000fL) + HMAC_CTX_cleanup(hmac); + free(hmac); + #else +@@ -332,7 +337,8 @@ WINPR_DIGEST_CTX* winpr_Digest_New(void) + WINPR_DIGEST_CTX* ctx = NULL; + #if defined(WITH_OPENSSL) + EVP_MD_CTX* mdctx; +-#if (OPENSSL_VERSION_NUMBER < 0x10100000L) || defined(LIBRESSL_VERSION_NUMBER) ++#if (OPENSSL_VERSION_NUMBER < 0x10100000L) || \ ++ (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x2070000fL) + mdctx = EVP_MD_CTX_create(); + #else + mdctx = EVP_MD_CTX_new(); +@@ -464,7 +470,8 @@ void winpr_Digest_Free(WINPR_DIGEST_CTX* ctx) + + if (mdctx) + { +-#if (OPENSSL_VERSION_NUMBER < 0x10100000L) || defined(LIBRESSL_VERSION_NUMBER) ++#if (OPENSSL_VERSION_NUMBER < 0x10100000L) || \ ++ (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x2070000fL) + EVP_MD_CTX_destroy(mdctx); + #else + EVP_MD_CTX_free(mdctx); +-- +2.36.1 +