crypto-util: support OpenSSL 4

OpenSSL 4 broke ABI, so we need to look for both SONAMEs.
Try libcrypto.so.3 first, and fallback to libcrypto.so.4,
so that the older and more stable version is used if both
are installed, giving distros time to fix regressions.
This commit is contained in:
Luca Boccassi
2026-06-19 13:58:52 +01:00
parent 98943422b5
commit ccdd42351f
2 changed files with 15 additions and 3 deletions
+14 -2
View File
@@ -335,12 +335,15 @@ DEFINE_TRIVIAL_CLEANUP_FUNC_FULL_RENAME(UI_METHOD*, sym_UI_destroy_method, UI_de
int dlopen_libcrypto(int log_level) {
#if HAVE_OPENSSL
static void *libcrypto_dl = NULL;
int r;
LIBCRYPTO_NOTE(SD_ELF_NOTE_DLOPEN_PRIORITY_SUGGESTED);
return dlopen_many_sym_or_warn(
// FIXME: switch order to prefer libcrypto.so.4 in a future version once it has stabilized
FOREACH_STRING(soname, "libcrypto.so.3", "libcrypto.so.4") {
r = dlopen_many_sym_or_warn(
&libcrypto_dl,
"libcrypto.so.3",
soname,
log_level,
DLSYM_ARG(ASN1_ANY_it),
DLSYM_ARG(ASN1_BIT_STRING_it),
@@ -617,6 +620,15 @@ int dlopen_libcrypto(int log_level) {
DLSYM_ARG(X509_VERIFY_PARAM_set_hostflags),
DLSYM_ARG(X509_VERIFY_PARAM_set1_host),
DLSYM_ARG(X509_VERIFY_PARAM_set1_ip));
if (r >= 0)
break;
}
if (r < 0) {
log_full_errno(log_level, r, "Neither libcrypto.so.4 nor libcrypto.so.3 could be loaded");
return -EOPNOTSUPP; /* turn into recognizable error */
}
return r;
#else
return log_full_errno(log_level, SYNTHETIC_ERRNO(EOPNOTSUPP),
"libcrypto support is not compiled in.");
+1 -1
View File
@@ -37,7 +37,7 @@ int dlopen_libcrypto(int log_level);
SD_ELF_NOTE_DLOPEN("libcrypto", \
"Support for cryptographic operations", \
priority, \
"libcrypto.so.3")
"libcrypto.so.3", "libcrypto.so.4")
#define DLOPEN_LIBCRYPTO(log_level, priority) \
({ \