Control: tags 828554 + pending

Dear maintainer,

I've prepared an NMU for spice-gtk (versioned as 0.33-3.1) and
uploaded it to DELAYED/5. Please feel free to tell me if I
should delay it longer.

Regards.

-- 
WBR, wRAR
diff -Nru spice-gtk-0.33/debian/changelog spice-gtk-0.33/debian/changelog
--- spice-gtk-0.33/debian/changelog	2016-10-25 07:00:32.000000000 +0500
+++ spice-gtk-0.33/debian/changelog	2016-12-10 20:06:07.000000000 +0500
@@ -1,3 +1,11 @@
+spice-gtk (0.33-3.1) unstable; urgency=medium
+
+  * Non-maintainer upload.
+  * Fix FTBFS with OpenSSL 1.1, patch by Sebastian Andrzej Siewior (Closes:
+    #828554).
+
+ -- Andrey Rahmatullin <w...@debian.org>  Sat, 10 Dec 2016 20:06:07 +0500
+
 spice-gtk (0.33-3) unstable; urgency=medium
 
   * debian/control:
diff -Nru spice-gtk-0.33/debian/patches/series spice-gtk-0.33/debian/patches/series
--- spice-gtk-0.33/debian/patches/series	2016-10-13 13:38:49.000000000 +0500
+++ spice-gtk-0.33/debian/patches/series	2016-12-10 20:06:07.000000000 +0500
@@ -1 +1,2 @@
 explicitly-enable-subdir-objects.patch
+spice-gtk-get-it-compiled-against-openssl-1.1.0.patch
diff -Nru spice-gtk-0.33/debian/patches/spice-gtk-get-it-compiled-against-openssl-1.1.0.patch spice-gtk-0.33/debian/patches/spice-gtk-get-it-compiled-against-openssl-1.1.0.patch
--- spice-gtk-0.33/debian/patches/spice-gtk-get-it-compiled-against-openssl-1.1.0.patch	1970-01-01 05:00:00.000000000 +0500
+++ spice-gtk-0.33/debian/patches/spice-gtk-get-it-compiled-against-openssl-1.1.0.patch	2016-12-10 20:06:07.000000000 +0500
@@ -0,0 +1,259 @@
+## Description: add some description
+## Origin/Author: add some origin or author
+## Bug: bug URL
+From 0bd3b308f964f52db02b20b5db3a6f9a45c35072 Mon Sep 17 00:00:00 2001
+From: Sebastian Andrzej Siewior <sebast...@breakpoint.cc>
+Date: Wed, 21 Sep 2016 19:54:04 +0000
+Subject: [PATCH] spice-gtk: get it compiled against openssl 1.1.0
+
+and also 1.0.2h
+
+Signed-off-by: Sebastian Andrzej Siewior <sebast...@breakpoint.cc>
+---
+ src/bio-gio.c       | 114 ++++++++++++++++++++++++++++++++++++++++------------
+ src/spice-channel.c |  24 ++++++-----
+ 2 files changed, 103 insertions(+), 35 deletions(-)
+
+diff --git a/src/bio-gio.c b/src/bio-gio.c
+index b310c97..aa8ddac 100644
+--- a/src/bio-gio.c
++++ b/src/bio-gio.c
+@@ -23,21 +23,74 @@
+ #include "spice-util.h"
+ #include "bio-gio.h"
+ 
+-typedef struct bio_gsocket_method {
+-    BIO_METHOD method;
+-    GIOStream *stream;
+-} bio_gsocket_method;
++#if OPENSSL_VERSION_NUMBER < 0x10100000
++static BIO_METHOD one_static_bio;
+ 
+-#define BIO_GET_GSOCKET(bio)  (((bio_gsocket_method*)bio->method)->gsocket)
+-#define BIO_GET_ISTREAM(bio)  (g_io_stream_get_input_stream(((bio_gsocket_method*)bio->method)->stream))
+-#define BIO_GET_OSTREAM(bio)  (g_io_stream_get_output_stream(((bio_gsocket_method*)bio->method)->stream))
++static int BIO_meth_set_read(BIO_METHOD *biom,
++                             int (*bread) (BIO *, char *, int))
++{
++    biom->bread = bread;
++    return 1;
++}
++
++static int BIO_meth_set_write(BIO_METHOD *biom,
++                              int (*bwrite) (BIO *, const char *, int))
++{
++    biom->bwrite = bwrite;
++    return 1;
++}
++
++static int BIO_meth_set_puts(BIO_METHOD *biom,
++                             int (*bputs) (BIO *, const char *))
++{
++    biom->bputs = bputs;
++    return 1;
++}
++
++static int BIO_meth_set_destroy(BIO_METHOD *biom, int (*destroy) (BIO *))
++{
++    biom->destroy = destroy;
++    return 1;
++}
++
++static int BIO_get_new_index()
++{
++    return 128;
++}
++
++static void BIO_set_data(BIO *a, void *ptr)
++{
++    a->ptr = ptr;
++}
++
++static void *BIO_get_data(BIO *a)
++{
++    return a->ptr;
++}
++
++static BIO_METHOD *BIO_meth_new(int type, const char *name)
++{
++    BIO_METHOD *biom = &one_static_bio;
++
++    biom->type = type;
++    biom->name = name;
++    return biom;
++}
++
++void BIO_meth_free(BIO_METHOD *biom)
++{
++}
++
++#endif
+ 
+ static int bio_gio_write(BIO *bio, const char *in, int inl)
+ {
++    GIOStream *stream;
+     gssize ret;
+     GError *error = NULL;
+ 
+-    ret = g_pollable_output_stream_write_nonblocking(G_POLLABLE_OUTPUT_STREAM(BIO_GET_OSTREAM(bio)),
++    stream = BIO_get_data(bio);
++    ret = g_pollable_output_stream_write_nonblocking(G_POLLABLE_OUTPUT_STREAM(stream),
+                                                      in, inl, NULL, &error);
+     BIO_clear_retry_flags(bio);
+ 
+@@ -53,10 +106,12 @@ static int bio_gio_write(BIO *bio, const char *in, int inl)
+ 
+ static int bio_gio_read(BIO *bio, char *out, int outl)
+ {
++    GIOStream *stream;
+     gssize ret;
+     GError *error = NULL;
+ 
+-    ret = g_pollable_input_stream_read_nonblocking(G_POLLABLE_INPUT_STREAM(BIO_GET_ISTREAM(bio)),
++    stream = BIO_get_data(bio);
++    ret = g_pollable_input_stream_read_nonblocking(G_POLLABLE_INPUT_STREAM(stream),
+                                                    out, outl, NULL, &error);
+     BIO_clear_retry_flags(bio);
+ 
+@@ -72,12 +127,14 @@ static int bio_gio_read(BIO *bio, char *out, int outl)
+ 
+ static int bio_gio_destroy(BIO *bio)
+ {
+-    if (bio == NULL || bio->method == NULL)
++    if (bio == NULL )
+         return 0;
+ 
+     SPICE_DEBUG("bio gsocket destroy");
+-    g_clear_pointer(&bio->method, g_free);
+ 
++    /* XXX DO WE NEED to free GIOStream *stream ? */
++
++    BIO_set_data(bio, NULL);
+     return 1;
+ }
+ 
+@@ -91,23 +148,30 @@ static int bio_gio_puts(BIO *bio, const char *str)
+     return ret;
+ }
+ 
++static BIO_METHOD *bio_gio_method;
++
+ G_GNUC_INTERNAL
+ BIO* bio_new_giostream(GIOStream *stream)
+ {
+-    // TODO: make an actual new BIO type, or just switch to GTls already...
+-    BIO *bio = BIO_new_socket(-1, BIO_NOCLOSE);
+-
+-    bio_gsocket_method *bio_method = g_new(bio_gsocket_method, 1);
+-    bio_method->method = *bio->method;
+-    bio_method->stream = stream;
+-
+-    bio->method->destroy(bio);
+-    bio->method = (BIO_METHOD*)bio_method;
+-
+-    bio->method->bwrite = bio_gio_write;
+-    bio->method->bread = bio_gio_read;
+-    bio->method->bputs = bio_gio_puts;
+-    bio->method->destroy = bio_gio_destroy;
++    BIO *bio;
++
++    if (!bio_gio_method) {
++        bio_gio_method = BIO_meth_new(BIO_get_new_index(), "gio stream");
++        if (!bio_gio_method)
++            return NULL;
++        if (!BIO_meth_set_write(bio_gio_method, bio_gio_write)
++            || !BIO_meth_set_read(bio_gio_method, bio_gio_read)
++            || !BIO_meth_set_puts(bio_gio_method, bio_gio_puts)
++            || !BIO_meth_set_destroy(bio_gio_method, bio_gio_destroy)) {
++            BIO_meth_free(bio_gio_method);
++            bio_gio_method = NULL;
++            return NULL;
++        }
++    }
+ 
++    bio = BIO_new(bio_gio_method);
++    if (!bio)
++        return NULL;
++    BIO_set_data(bio, stream);
+     return bio;
+ }
+diff --git a/src/spice-channel.c b/src/spice-channel.c
+index 0eb0e61..748cb67 100644
+--- a/src/spice-channel.c
++++ b/src/spice-channel.c
+@@ -55,6 +55,15 @@ static void spice_channel_reset_capabilities(SpiceChannel *channel);
+ static void spice_channel_send_migration_handshake(SpiceChannel *channel);
+ static gboolean channel_connect(SpiceChannel *channel, gboolean tls);
+ 
++#if OPENSSL_VERSION_NUMBER < 0x10100000
++static RSA *EVP_PKEY_get0_RSA(EVP_PKEY *pkey)
++{
++    if (pkey->type != EVP_PKEY_RSA) {
++        return NULL;
++    }
++    return pkey->pkey.rsa;
++}
++#endif
+ /**
+  * SECTION:spice-channel
+  * @short_description: the base channel class
+@@ -1138,7 +1147,7 @@ static SpiceChannelEvent spice_channel_send_spice_ticket(SpiceChannel *channel)
+     pubkey = d2i_PUBKEY_bio(bioKey, NULL);
+     g_return_val_if_fail(pubkey != NULL, ret);
+ 
+-    rsa = pubkey->pkey.rsa;
++    rsa = EVP_PKEY_get0_RSA(pubkey);
+     nRSASize = RSA_size(rsa);
+ 
+     encrypted = g_alloca(nRSASize);
+@@ -2329,17 +2338,12 @@ static gboolean spice_channel_delayed_unref(gpointer data)
+     return FALSE;
+ }
+ 
+-static X509_LOOKUP_METHOD spice_x509_mem_lookup = {
+-    "spice_x509_mem_lookup",
+-    0
+-};
+-
+ static int spice_channel_load_ca(SpiceChannel *channel)
+ {
+     SpiceChannelPrivate *c = channel->priv;
+     STACK_OF(X509_INFO) *inf;
+     X509_INFO *itmp;
+-    X509_LOOKUP *lookup;
++    X509_STORE *store;
+     BIO *in;
+     int i, count = 0;
+     guint8 *ca;
+@@ -2349,13 +2353,13 @@ static int spice_channel_load_ca(SpiceChannel *channel)
+ 
+     g_return_val_if_fail(c->ctx != NULL, 0);
+ 
+-    lookup = X509_STORE_add_lookup(c->ctx->cert_store, &spice_x509_mem_lookup);
+     ca_file = spice_session_get_ca_file(c->session);
+     spice_session_get_ca(c->session, &ca, &size);
+ 
+     CHANNEL_DEBUG(channel, "Load CA, file: %s, data: %p", ca_file, ca);
+ 
+     if (ca != NULL) {
++        store = SSL_CTX_get_cert_store(c->ctx);
+         in = BIO_new_mem_buf(ca, size);
+         inf = PEM_X509_INFO_read_bio(in, NULL, NULL, NULL);
+         BIO_free(in);
+@@ -2363,11 +2367,11 @@ static int spice_channel_load_ca(SpiceChannel *channel)
+         for (i = 0; i < sk_X509_INFO_num(inf); i++) {
+             itmp = sk_X509_INFO_value(inf, i);
+             if (itmp->x509) {
+-                X509_STORE_add_cert(lookup->store_ctx, itmp->x509);
++                X509_STORE_add_cert(store, itmp->x509);
+                 count++;
+             }
+             if (itmp->crl) {
+-                X509_STORE_add_crl(lookup->store_ctx, itmp->crl);
++                X509_STORE_add_crl(store, itmp->crl);
+                 count++;
+             }
+         }
+-- 
+2.9.3
+

Attachment: signature.asc
Description: PGP signature

Reply via email to