From: Michael Tremer Date: Tue, 28 Nov 2017 16:39:38 +0000 (+0000) Subject: transmission: Patch to build against OpenSSL 1.1 X-Git-Tag: v2.19-core120~80^2~11 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7e63e4f8069e396296360584db498753490097d6;p=people%2Fpmueller%2Fipfire-2.x.git transmission: Patch to build against OpenSSL 1.1 Signed-off-by: Michael Tremer --- diff --git a/lfs/transmission b/lfs/transmission index 79ebaa1f90..10ac44daae 100644 --- a/lfs/transmission +++ b/lfs/transmission @@ -32,7 +32,7 @@ DL_FROM = $(URL_IPFIRE) DIR_APP = $(DIR_SRC)/$(THISAPP) TARGET = $(DIR_INFO)/$(THISAPP) PROG = transmission -PAK_VER = 13 +PAK_VER = 14 DEPS = "" @@ -79,6 +79,7 @@ $(subst %,%_MD5,$(objects)) : $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @$(PREBUILD) @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE) + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/transmission-2.92-openssl-1.1.0.patch cd $(DIR_APP) && ./configure --prefix=/usr --disable-static cd $(DIR_APP) && make $(MAKETUNING) $(EXTRA_MAKE) cd $(DIR_APP) && make install diff --git a/src/patches/transmission-2.92-openssl-1.1.0.patch b/src/patches/transmission-2.92-openssl-1.1.0.patch new file mode 100644 index 0000000000..29484b8334 --- /dev/null +++ b/src/patches/transmission-2.92-openssl-1.1.0.patch @@ -0,0 +1,261 @@ +From f91cf5ad8c677b61ceb0bf5877b87f9e93256dd7 Mon Sep 17 00:00:00 2001 +From: Sebastian Andrzej Siewior +Date: Mon, 5 Sep 2016 21:49:07 +0000 +Subject: [PATCH] transmission: build against openssl 1.1.0 + +Signed-off-by: Sebastian Andrzej Siewior +--- + libtransmission/crypto-utils-openssl.c | 73 ++++++++++++++++++++++++++++++++-- + 1 file changed, 69 insertions(+), 4 deletions(-) + +diff --git a/libtransmission/crypto-utils-openssl.c b/libtransmission/crypto-utils-openssl.c +index c4539dc..972e24a 100644 +--- a/libtransmission/crypto-utils-openssl.c ++++ b/libtransmission/crypto-utils-openssl.c +@@ -229,6 +229,61 @@ tr_rc4_process (tr_rc4_ctx_t handle, + **** + ***/ + ++#if OPENSSL_VERSION_NUMBER < 0x10100000 ++static inline int ++DH_set0_pqg (DH * dh, ++ BIGNUM * p, ++ BIGNUM * q, ++ BIGNUM * g) ++{ ++ /* If the fields p and g in d are NULL, the corresponding input ++ * parameters MUST be non-NULL. q may remain NULL. ++ */ ++ if ((dh->p == NULL && p == NULL) ++ || (dh->g == NULL && g == NULL)) ++ return 0; ++ ++ if (p != NULL) { ++ BN_free (dh->p); ++ dh->p = p; ++ } ++ if (q != NULL) { ++ BN_free (dh->q); ++ dh->q = q; ++ } ++ if (g != NULL) { ++ BN_free (dh->g); ++ dh->g = g; ++ } ++ ++ if (q != NULL) { ++ dh->length = BN_num_bits (q); ++ } ++ ++ return 1; ++} ++ ++static inline int ++DH_set_length (DH * dh, ++ long length) ++{ ++ dh->length = length; ++ return 1; ++} ++ ++static inline void ++DH_get0_key(const DH * dh, ++ const BIGNUM ** pub_key, ++ const BIGNUM ** priv_key) ++{ ++ if (pub_key != NULL) ++ *pub_key = dh->pub_key; ++ if (priv_key != NULL) ++ *priv_key = dh->priv_key; ++} ++ ++#endif ++ + tr_dh_ctx_t + tr_dh_new (const uint8_t * prime_num, + size_t prime_num_length, +@@ -236,13 +291,19 @@ tr_dh_new (const uint8_t * prime_num, + size_t generator_num_length) + { + DH * handle = DH_new (); ++ BIGNUM * p, * g; + + assert (prime_num != NULL); + assert (generator_num != NULL); ++ p = BN_bin2bn (prime_num, prime_num_length, NULL); ++ g = BN_bin2bn (generator_num, generator_num_length, NULL); + +- if (!check_pointer (handle->p = BN_bin2bn (prime_num, prime_num_length, NULL)) || +- !check_pointer (handle->g = BN_bin2bn (generator_num, generator_num_length, NULL))) ++ if (!check_pointer (p) || ++ !check_pointer (g) || ++ !DH_set0_pqg (handle, p, NULL, g)) + { ++ BN_free (p); ++ BN_free (g); + DH_free (handle); + handle = NULL; + } +@@ -267,16 +328,20 @@ tr_dh_make_key (tr_dh_ctx_t raw_handle, + { + DH * handle = raw_handle; + int dh_size, my_public_key_length; ++ const BIGNUM * hand_pub_key; + + assert (handle != NULL); + assert (public_key != NULL); + +- handle->length = private_key_length * 8; ++ ++ DH_set_length(handle, private_key_length * 8); + + if (!check_result (DH_generate_key (handle))) + return false; + +- my_public_key_length = BN_bn2bin (handle->pub_key, public_key); ++ DH_get0_key (handle, &hand_pub_key, NULL); ++ ++ my_public_key_length = BN_bn2bin (hand_pub_key, public_key); + dh_size = DH_size (handle); + + tr_dh_align_key (public_key, my_public_key_length, dh_size); +From 8c8386a7f3f482a9c917f51d28e0042e55f56b3e Mon Sep 17 00:00:00 2001 +From: Mike Gelfand +Date: Wed, 7 Sep 2016 01:09:04 +0300 +Subject: [PATCH] Fix coding style and building with !TR_LIGHTWEIGHT + +--- + libtransmission/crypto-utils-openssl.c | 60 +++++++++++++++++++--------------- + 1 file changed, 33 insertions(+), 27 deletions(-) + +diff --git a/libtransmission/crypto-utils-openssl.c b/libtransmission/crypto-utils-openssl.c +index 972e24a..9fd2c58 100644 +--- a/libtransmission/crypto-utils-openssl.c ++++ b/libtransmission/crypto-utils-openssl.c +@@ -14,6 +14,7 @@ + #include + + #include ++#include + #include + #include + #include +@@ -48,7 +49,12 @@ log_openssl_error (const char * file, + static bool strings_loaded = false; + if (!strings_loaded) + { ++#if OPENSSL_VERSION_NUMBER < 0x10100000 + ERR_load_crypto_strings (); ++#else ++ OPENSSL_init_crypto (OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL); ++#endif ++ + strings_loaded = true; + } + #endif +@@ -230,6 +236,7 @@ tr_rc4_process (tr_rc4_ctx_t handle, + ***/ + + #if OPENSSL_VERSION_NUMBER < 0x10100000 ++ + static inline int + DH_set0_pqg (DH * dh, + BIGNUM * p, +@@ -237,28 +244,29 @@ DH_set0_pqg (DH * dh, + BIGNUM * g) + { + /* If the fields p and g in d are NULL, the corresponding input +- * parameters MUST be non-NULL. q may remain NULL. ++ * parameters MUST be non-NULL. q may remain NULL. + */ +- if ((dh->p == NULL && p == NULL) +- || (dh->g == NULL && g == NULL)) ++ if ((dh->p == NULL && p == NULL) || (dh->g == NULL && g == NULL)) + return 0; + +- if (p != NULL) { +- BN_free (dh->p); +- dh->p = p; +- } +- if (q != NULL) { +- BN_free (dh->q); +- dh->q = q; +- } +- if (g != NULL) { +- BN_free (dh->g); +- dh->g = g; +- } +- +- if (q != NULL) { ++ if (p != NULL) ++ { ++ BN_free (dh->p); ++ dh->p = p; ++ } ++ if (q != NULL) ++ { ++ BN_free (dh->q); ++ dh->q = q; ++ } ++ if (g != NULL) ++ { ++ BN_free (dh->g); ++ dh->g = g; ++ } ++ ++ if (q != NULL) + dh->length = BN_num_bits (q); +- } + + return 1; + } +@@ -267,8 +275,8 @@ static inline int + DH_set_length (DH * dh, + long length) + { +- dh->length = length; +- return 1; ++ dh->length = length; ++ return 1; + } + + static inline void +@@ -295,12 +303,11 @@ tr_dh_new (const uint8_t * prime_num, + + assert (prime_num != NULL); + assert (generator_num != NULL); ++ + p = BN_bin2bn (prime_num, prime_num_length, NULL); + g = BN_bin2bn (generator_num, generator_num_length, NULL); + +- if (!check_pointer (p) || +- !check_pointer (g) || +- !DH_set0_pqg (handle, p, NULL, g)) ++ if (!check_pointer (p) || !check_pointer (g) || !DH_set0_pqg (handle, p, NULL, g)) + { + BN_free (p); + BN_free (g); +@@ -328,20 +335,19 @@ tr_dh_make_key (tr_dh_ctx_t raw_handle, + { + DH * handle = raw_handle; + int dh_size, my_public_key_length; +- const BIGNUM * hand_pub_key; ++ const BIGNUM * my_public_key; + + assert (handle != NULL); + assert (public_key != NULL); + +- + DH_set_length(handle, private_key_length * 8); + + if (!check_result (DH_generate_key (handle))) + return false; + +- DH_get0_key (handle, &hand_pub_key, NULL); ++ DH_get0_key (handle, &my_public_key, NULL); + +- my_public_key_length = BN_bn2bin (hand_pub_key, public_key); ++ my_public_key_length = BN_bn2bin (my_public_key, public_key); + dh_size = DH_size (handle); + + tr_dh_align_key (public_key, my_public_key_length, dh_size);