diff -up xmms2-0.8DrO_o/src/plugins/airplay/raop_client.c.openssl11 xmms2-0.8DrO_o/src/plugins/airplay/raop_client.c --- xmms2-0.8DrO_o/src/plugins/airplay/raop_client.c.openssl11 2016-10-18 12:11:20.170416850 -0400 +++ xmms2-0.8DrO_o/src/plugins/airplay/raop_client.c 2016-10-18 12:18:19.315015550 -0400 @@ -31,6 +31,15 @@ #define RAOP_RTSP_CONNECTED 0x40 #define RAOP_RTSP_DONE 0x80 +/* Openssl 1.1.0 broke compatibility. We could depend on openssl 1.1.0, but + * it may take some time before distributions are able to upgrade to the new + * openssl version. To insulate ourselves from such transition problems, let's + * add a compatibility macro. + */ +#if OPENSSL_VERSION_NUMBER < 0x10100000L +#define RSA_set0_key(r, n_, e_, d) (r->n = n_, r->e = e_, 1) +#endif + typedef enum audio_jack_status { AUDIO_JACK_CONNECTED, AUDIO_JACK_DISCONNECTED @@ -110,6 +119,8 @@ static gint raop_rsa_encrypt (guchar *text, gint len, guchar *res) { RSA *rsa; + BIGNUM *n_bn; + BIGNUM *e_bn; size_t size; static const guchar mod[] = { 0xe7,0xd7,0x44,0xf2,0xa2,0xe2,0x78,0x8b,0x6c,0x1f,0x55,0xa0, @@ -137,8 +148,10 @@ raop_rsa_encrypt (guchar *text, gint len static const guchar exp[] = {0x01, 0x00, 0x01}; rsa = RSA_new (); - rsa->n = BN_bin2bn (mod, 256, NULL); - rsa->e = BN_bin2bn (exp, 3, NULL); + n_bn = BN_bin2bn (mod, 256, NULL); + e_bn = BN_bin2bn (exp, 3, NULL); + /* TODO: Catch error here? */ + RSA_set0_key(rsa, n_bn, e_bn, NULL); size = RSA_public_encrypt (len, text, res, rsa, RSA_PKCS1_OAEP_PADDING);