Control: tags 1006584 + patch Control: tags 1006584 + pending Dear maintainer,
I've prepared an NMU for transmission (versioned as 3.00-2.1) and uploaded it to DELAYED/2. Please feel free to tell me if I should delay it longer. Cheers -- Sebastian Ramacher
diff -Nru transmission-3.00/debian/changelog transmission-3.00/debian/changelog --- transmission-3.00/debian/changelog 2021-12-19 06:23:43.000000000 +0100 +++ transmission-3.00/debian/changelog 2022-05-21 09:22:10.000000000 +0200 @@ -1,3 +1,11 @@ +transmission (3.00-2.1) unstable; urgency=low + + [ Steve Langasek ] + * debian/patches/openssl3-compat.patch: Compatibility with OpenSSL 3. + (Closes: #1006584) + + -- Sebastian Ramacher <sramac...@debian.org> Sat, 21 May 2022 09:22:10 +0200 + transmission (3.00-2) unstable; urgency=medium [ Debian Janitor ] diff -Nru transmission-3.00/debian/patches/openssl3-compat.patch transmission-3.00/debian/patches/openssl3-compat.patch --- transmission-3.00/debian/patches/openssl3-compat.patch 1970-01-01 01:00:00.000000000 +0100 +++ transmission-3.00/debian/patches/openssl3-compat.patch 2022-05-21 09:21:15.000000000 +0200 @@ -0,0 +1,130 @@ +Description: Compatibility with OpenSSL 3 + We rely on RC4 because of the torrent protocol we're implementing, but this + is no longer available in the default provider. +Author: Steve Langasek <steve.langa...@ubuntu.com> +Bug-Ubuntu: https://bugs.launchpad.net/bugs/1946215 +Last-Update: 2021-12-13 +Forwarded: no + +Index: transmission-3.00/libtransmission/crypto-utils-openssl.c +=================================================================== +--- transmission-3.00.orig/libtransmission/crypto-utils-openssl.c ++++ transmission-3.00/libtransmission/crypto-utils-openssl.c +@@ -20,6 +20,9 @@ + #include <openssl/rand.h> + #include <openssl/ssl.h> + #include <openssl/x509.h> ++#if OPENSSL_VERSION_NUMBER >= 0x30000000L ++#include <openssl/provider.h> ++#endif + + #include "transmission.h" + #include "crypto-utils.h" +@@ -182,46 +185,86 @@ + + #endif + ++typedef struct tr_rc4_ctx { ++ EVP_CIPHER_CTX *cipher_ctx; ++#if OPENSSL_VERSION_NUMBER >= 0x30000000L ++ OSSL_LIB_CTX *lib_ctx; ++#endif ++} tr_rc4_ctx; ++ + tr_rc4_ctx_t tr_rc4_new(void) + { +- EVP_CIPHER_CTX* handle = EVP_CIPHER_CTX_new(); ++#if OPENSSL_VERSION_NUMBER >= 0x30000000L ++ OSSL_PROVIDER *legacy_provider = NULL; ++ OSSL_PROVIDER *default_provider = NULL; ++#endif ++ const EVP_CIPHER *cipher; + +- if (check_result(EVP_CipherInit_ex(handle, EVP_rc4(), NULL, NULL, NULL, -1))) ++ tr_rc4_ctx *handle = malloc(sizeof(tr_rc4_ctx)); ++ ++ handle->cipher_ctx = EVP_CIPHER_CTX_new(); ++ ++#if OPENSSL_VERSION_NUMBER >= 0x30000000L ++ handle->lib_ctx = OSSL_LIB_CTX_new(); ++ TR_ASSERT(handle->lib_ctx); ++ legacy_provider = OSSL_PROVIDER_load(handle->lib_ctx, "legacy"); ++ TR_ASSERT(legacy_provider); ++ default_provider = OSSL_PROVIDER_load(handle->lib_ctx, "default"); ++ TR_ASSERT(default_provider); ++ ++ cipher = EVP_CIPHER_fetch(handle->lib_ctx, "RC4", NULL); ++#else ++ cipher = EVP_rc4(); ++#endif ++ ++ if (check_result(EVP_CipherInit_ex(handle->cipher_ctx, cipher, NULL, NULL, ++ NULL, -1))) + { + return handle; + } + +- EVP_CIPHER_CTX_free(handle); ++ EVP_CIPHER_CTX_free(handle->cipher_ctx); ++#if OPENSSL_VERSION_NUMBER >= 0x30000000L ++ OSSL_LIB_CTX_free(handle->lib_ctx); ++#endif + return NULL; + } + +-void tr_rc4_free(tr_rc4_ctx_t handle) ++void tr_rc4_free(tr_rc4_ctx_t h) + { +- if (handle == NULL) ++ if (h == NULL) + { + return; + } + +- EVP_CIPHER_CTX_free(handle); ++ tr_rc4_ctx *handle = (tr_rc4_ctx *)h; ++ ++ EVP_CIPHER_CTX_free(handle->cipher_ctx); ++#if OPENSSL_VERSION_NUMBER >= 0x30000000L ++ OSSL_LIB_CTX_free(handle->lib_ctx); ++#endif ++ free(handle); + } + +-void tr_rc4_set_key(tr_rc4_ctx_t handle, uint8_t const* key, size_t key_length) ++void tr_rc4_set_key(tr_rc4_ctx_t h, uint8_t const* key, size_t key_length) + { +- TR_ASSERT(handle != NULL); ++ TR_ASSERT(h != NULL); + TR_ASSERT(key != NULL); + +- if (!check_result(EVP_CIPHER_CTX_set_key_length(handle, key_length))) ++ tr_rc4_ctx *handle = (tr_rc4_ctx *)h; ++ if (!check_result(EVP_CIPHER_CTX_set_key_length(handle->cipher_ctx, key_length))) + { + return; + } + +- check_result(EVP_CipherInit_ex(handle, NULL, NULL, key, NULL, -1)); ++ check_result(EVP_CipherInit_ex(handle->cipher_ctx, NULL, NULL, key, NULL, -1)); + } + +-void tr_rc4_process(tr_rc4_ctx_t handle, void const* input, void* output, size_t length) ++void tr_rc4_process(tr_rc4_ctx_t h, void const* input, void* output, size_t length) + { +- TR_ASSERT(handle != NULL); ++ TR_ASSERT(h != NULL); + ++ tr_rc4_ctx *handle = (tr_rc4_ctx *)h; + if (length == 0) + { + return; +@@ -232,7 +275,7 @@ + + int output_length; + +- check_result(EVP_CipherUpdate(handle, output, &output_length, input, length)); ++ check_result(EVP_CipherUpdate(handle->cipher_ctx, output, &output_length, input, length)); + } + + /*** diff -Nru transmission-3.00/debian/patches/series transmission-3.00/debian/patches/series --- transmission-3.00/debian/patches/series 2021-12-19 06:23:43.000000000 +0100 +++ transmission-3.00/debian/patches/series 2022-05-21 09:21:15.000000000 +0200 @@ -4,3 +4,4 @@ ayatana-indicators.patch patch-vendored-libdht.patch build_new_autoconf.patch +openssl3-compat.patch