From c4c8aa5ba0ec6bf4c6d74c4807b66edfbd91be7c Mon Sep 17 00:00:00 2001
|
|
From: Rosen Penev <rosenp@gmail.com>
|
|
Date: Mon, 11 Jan 2021 01:51:58 -0800
|
|
Subject: [PATCH] fix compilation without deprecated OpenSSL APIs
|
|
|
|
(De)initialization is deprecated under OpenSSL 1.0 and above.
|
|
|
|
[TT: Some simplifications, and additional edits.]
|
|
|
|
Signed-off-by: Rosen Penev <rosenp@gmail.com>
|
|
---
|
|
libfetch/common.c | 12 ++++--------
|
|
src/apk.c | 26 +-------------------------
|
|
src/apk_openssl.h | 27 +++++++++++++++++++++++++++
|
|
3 files changed, 32 insertions(+), 33 deletions(-)
|
|
|
|
--- a/libfetch/common.c
|
|
+++ b/libfetch/common.c
|
|
@@ -499,15 +499,11 @@ static int fetch_ssl_setup_client_certif
|
|
int
|
|
fetch_ssl(conn_t *conn, const struct url *URL, int verbose)
|
|
{
|
|
- /* Init the SSL library and context */
|
|
- if (!SSL_library_init()){
|
|
- fprintf(stderr, "SSL library init failed\n");
|
|
- return (-1);
|
|
- }
|
|
-
|
|
- SSL_load_error_strings();
|
|
-
|
|
+#if OPENSSL_VERSION_NUMBER < 0x10100000L
|
|
conn->ssl_meth = SSLv23_client_method();
|
|
+#else
|
|
+ conn->ssl_meth = TLS_client_method();
|
|
+#endif
|
|
conn->ssl_ctx = SSL_CTX_new(conn->ssl_meth);
|
|
SSL_CTX_set_mode(conn->ssl_ctx, SSL_MODE_AUTO_RETRY);
|
|
|
|
--- a/src/apk.c
|
|
+++ b/src/apk.c
|
|
@@ -20,11 +20,6 @@
|
|
#include <unistd.h>
|
|
#include <sys/stat.h>
|
|
|
|
-#include <openssl/crypto.h>
|
|
-#ifndef OPENSSL_NO_ENGINE
|
|
-#include <openssl/engine.h>
|
|
-#endif
|
|
-
|
|
#include <fetch.h>
|
|
|
|
#include "apk_defines.h"
|
|
@@ -385,25 +380,6 @@ static int parse_options(int argc, char
|
|
return 0;
|
|
}
|
|
|
|
-static void fini_openssl(void)
|
|
-{
|
|
- EVP_cleanup();
|
|
-#ifndef OPENSSL_NO_ENGINE
|
|
- ENGINE_cleanup();
|
|
-#endif
|
|
- CRYPTO_cleanup_all_ex_data();
|
|
-}
|
|
-
|
|
-static void init_openssl(void)
|
|
-{
|
|
- atexit(fini_openssl);
|
|
- OpenSSL_add_all_algorithms();
|
|
-#ifndef OPENSSL_NO_ENGINE
|
|
- ENGINE_load_builtin_engines();
|
|
- ENGINE_register_all_complete();
|
|
-#endif
|
|
-}
|
|
-
|
|
static void on_sigwinch(int s)
|
|
{
|
|
apk_reset_screen_width();
|
|
@@ -484,7 +460,7 @@ int main(int argc, char **argv)
|
|
apk_force |= applet->forced_force;
|
|
}
|
|
|
|
- init_openssl();
|
|
+ apk_openssl_init();
|
|
setup_automatic_flags();
|
|
fetchConnectionCacheInit(32, 4);
|
|
|
|
--- a/src/apk_openssl.h
|
|
+++ b/src/apk_openssl.h
|
|
@@ -11,7 +11,11 @@
|
|
#define APK_SSL_COMPAT_H
|
|
|
|
#include <openssl/opensslv.h>
|
|
+#include <openssl/crypto.h>
|
|
#include <openssl/evp.h>
|
|
+#ifndef OPENSSL_NO_ENGINE
|
|
+#include <openssl/engine.h>
|
|
+#endif
|
|
|
|
#if OPENSSL_VERSION_NUMBER < 0x1010000fL || (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x2070000fL)
|
|
|
|
@@ -25,6 +29,29 @@ static inline void EVP_MD_CTX_free(EVP_M
|
|
return EVP_MD_CTX_destroy(mdctx);
|
|
}
|
|
|
|
+static inline void apk_openssl_cleanup(void)
|
|
+{
|
|
+ EVP_cleanup();
|
|
+#ifndef OPENSSL_NO_ENGINE
|
|
+ ENGINE_cleanup();
|
|
+#endif
|
|
+ CRYPTO_cleanup_all_ex_data();
|
|
+}
|
|
+
|
|
+static inline void apk_openssl_init(void)
|
|
+{
|
|
+ atexit(apk_openssl_cleanup);
|
|
+ OpenSSL_add_all_algorithms();
|
|
+#ifndef OPENSSL_NO_ENGINE
|
|
+ ENGINE_load_builtin_engines();
|
|
+ ENGINE_register_all_complete();
|
|
+#endif
|
|
+}
|
|
+
|
|
+#else
|
|
+
|
|
+static inline void apk_openssl_init(void) {}
|
|
+
|
|
#endif
|
|
|
|
#endif
|