[arch-commits] Commit in spice-glib/repos (12 files)

Jan de Groot jgc at archlinux.org
Thu Mar 16 22:28:13 UTC 2017


    Date: Thursday, March 16, 2017 @ 22:28:13
  Author: jgc
Revision: 216834

archrelease: copy trunk to staging-i686, staging-x86_64

Added:
  spice-glib/repos/staging-i686/
  spice-glib/repos/staging-i686/PKGBUILD
    (from rev 216833, spice-glib/trunk/PKGBUILD)
  spice-glib/repos/staging-i686/debian_843471-clipboard_Fix_crash_by_handling_error.patch
    (from rev 216833, spice-glib/trunk/debian_843471-clipboard_Fix_crash_by_handling_error.patch)
  spice-glib/repos/staging-i686/ssl-Rework-our-custom-BIO-type.patch
    (from rev 216833, spice-glib/trunk/ssl-Rework-our-custom-BIO-type.patch)
  spice-glib/repos/staging-i686/ssl-Stop-creating-our-own-X509_LOOKUP_METHOD.patch
    (from rev 216833, spice-glib/trunk/ssl-Stop-creating-our-own-X509_LOOKUP_METHOD.patch)
  spice-glib/repos/staging-i686/ssl-Use-accessors-rather-than-direct-struct-access.patch
    (from rev 216833, spice-glib/trunk/ssl-Use-accessors-rather-than-direct-struct-access.patch)
  spice-glib/repos/staging-x86_64/
  spice-glib/repos/staging-x86_64/PKGBUILD
    (from rev 216833, spice-glib/trunk/PKGBUILD)
  spice-glib/repos/staging-x86_64/debian_843471-clipboard_Fix_crash_by_handling_error.patch
    (from rev 216833, spice-glib/trunk/debian_843471-clipboard_Fix_crash_by_handling_error.patch)
  spice-glib/repos/staging-x86_64/ssl-Rework-our-custom-BIO-type.patch
    (from rev 216833, spice-glib/trunk/ssl-Rework-our-custom-BIO-type.patch)
  spice-glib/repos/staging-x86_64/ssl-Stop-creating-our-own-X509_LOOKUP_METHOD.patch
    (from rev 216833, spice-glib/trunk/ssl-Stop-creating-our-own-X509_LOOKUP_METHOD.patch)
  spice-glib/repos/staging-x86_64/ssl-Use-accessors-rather-than-direct-struct-access.patch
    (from rev 216833, spice-glib/trunk/ssl-Use-accessors-rather-than-direct-struct-access.patch)

--------------------------------------------------------------------------+
 staging-i686/PKGBUILD                                                    |   51 ++
 staging-i686/debian_843471-clipboard_Fix_crash_by_handling_error.patch   |   40 ++
 staging-i686/ssl-Rework-our-custom-BIO-type.patch                        |  121 ++++++
 staging-i686/ssl-Stop-creating-our-own-X509_LOOKUP_METHOD.patch          |   71 +++
 staging-i686/ssl-Use-accessors-rather-than-direct-struct-access.patch    |  193 ++++++++++
 staging-x86_64/PKGBUILD                                                  |   51 ++
 staging-x86_64/debian_843471-clipboard_Fix_crash_by_handling_error.patch |   40 ++
 staging-x86_64/ssl-Rework-our-custom-BIO-type.patch                      |  121 ++++++
 staging-x86_64/ssl-Stop-creating-our-own-X509_LOOKUP_METHOD.patch        |   71 +++
 staging-x86_64/ssl-Use-accessors-rather-than-direct-struct-access.patch  |  193 ++++++++++
 10 files changed, 952 insertions(+)

Copied: spice-glib/repos/staging-i686/PKGBUILD (from rev 216833, spice-glib/trunk/PKGBUILD)
===================================================================
--- staging-i686/PKGBUILD	                        (rev 0)
+++ staging-i686/PKGBUILD	2017-03-16 22:28:13 UTC (rev 216834)
@@ -0,0 +1,51 @@
+# $Id: PKGBUILD 164477 2016-03-03 13:24:42Z foutrelis $
+# Maintainer: Sergej Pupykin <pupykin.s+arch at gmail.com>
+# Contributor: Stefano Facchini <stefano.facchini at gmail.com>
+# Contributor: Jonathan Lestrelin <zanko at daemontux.org>
+# Contributor: Lucio Zara <pennega at gmail.com>
+
+pkgname=spice-glib
+pkgver=0.33
+pkgrel=4
+pkgdesc="Gtk client and libraries for SPICE remote desktop servers (gtk3 version)"
+arch=('i686' 'x86_64')
+url="https://www.spice-space.org"
+license=('LGPL2.1')
+depends=('celt0.5.1' 'dbus-glib' 'libcacard' 'libpulse' 'usbredir' 'libsoup'
+	 'cairo' 'libjpeg')
+makedepends=('gobject-introspection' 'intltool' 'python2-pyparsing' 'spice-protocol' 'usbutils'
+	     'vala' 'sdl' 'python2-six' 'pixman' 'polkit')
+options=('!emptydirs')
+source=("https://www.spice-space.org/download/gtk/spice-gtk-$pkgver.tar.bz2"
+        debian_843471-clipboard_Fix_crash_by_handling_error.patch
+        ssl-Stop-creating-our-own-X509_LOOKUP_METHOD.patch
+        ssl-Rework-our-custom-BIO-type.patch
+        ssl-Use-accessors-rather-than-direct-struct-access.patch)
+sha256sums=('7daf33b786ab8ebc9fe6e7b11745100ee1ab66e61a5811d1d5aabe4d66eaaf39'
+            '31cacbfce3de9c7599f3cca5b45ed76cf5e3997072aae64b4107676b0b9a2f7b'
+            '0e0d553992ea08a29b14439061c6e831ce4ba4bd7bb5e53d7e7e1306aa6ba0fa'
+            '91bbb28dc5a8968c0eea57919d9a4a86384a62909014b53b05b5e721afa8142d'
+            '0e65852f94849c3efe0c21c01f4be7b804641d7d178b12a22eb62f08db70371e')
+
+prepare() {
+  cd "$srcdir/spice-gtk-$pkgver"
+  patch -Np1 -i ../debian_843471-clipboard_Fix_crash_by_handling_error.patch
+  patch -Np1 -i ../ssl-Stop-creating-our-own-X509_LOOKUP_METHOD.patch
+  patch -Np1 -i ../ssl-Rework-our-custom-BIO-type.patch
+  patch -Np1 -i ../ssl-Use-accessors-rather-than-direct-struct-access.patch
+}
+
+build() {
+  cd "$srcdir/spice-gtk-$pkgver"
+  PYTHON=python2 ./configure --prefix=/usr \
+    --disable-static --enable-vala --with-gtk=no \
+    --with-audio=pulse \
+    --with-coroutine=gthread --sbindir=/usr/bin \
+    --enable-smartcard
+  make
+}
+
+package() {
+  cd "$srcdir/spice-gtk-$pkgver"
+  make DESTDIR="$pkgdir/" install
+}

Copied: spice-glib/repos/staging-i686/debian_843471-clipboard_Fix_crash_by_handling_error.patch (from rev 216833, spice-glib/trunk/debian_843471-clipboard_Fix_crash_by_handling_error.patch)
===================================================================
--- staging-i686/debian_843471-clipboard_Fix_crash_by_handling_error.patch	                        (rev 0)
+++ staging-i686/debian_843471-clipboard_Fix_crash_by_handling_error.patch	2017-03-16 22:28:13 UTC (rev 216834)
@@ -0,0 +1,40 @@
+commit 03c016bea939ee4a26e90d80fa1012a993a8ea47
+Author: Victor Toso <me at victortoso.com>
+Origin: upstream, https://cgit.freedesktop.org/spice/spice-gtk/commit/?id=03c016bea939ee4a26e90d80fa1012a993a8ea47
+Bug-Debian: https://bugs.debian.org/843471
+Date:   Fri Oct 14 18:12:01 2016 +0200
+
+    clipboard: Fix crash by handling error
+    
+    As manual states below, text could be NULL for different reasons and
+    we should handle that. I've included a debug message to help
+    identifying possible regressions from wayland's clipboard.
+    
+    This crash is a regression from 7b0de6217670e0f668aff2949f
+    
+     "The text parameter to callback will contain the resulting text if
+     the request succeeded, or NULL if it failed. This could happen for
+     various reasons, in particular if the clipboard was empty or if the
+     contents of the clipboard could not be converted into text form."
+    
+    Resolves: rhbz#1384676
+    
+    Signed-off-by: Victor Toso <victortoso at redhat.com>
+    Acked-by: Pavel Grunt <pgrunt at redhat.com>
+
+diff --git a/src/spice-gtk-session.c b/src/spice-gtk-session.c
+index 3ff4e9a..3e0ec74 100644
+--- a/src/spice-gtk-session.c
++++ b/src/spice-gtk-session.c
+@@ -945,6 +945,11 @@ static void clipboard_received_text_cb(GtkClipboard *clipboard,
+     if (self == NULL)
+         return;
+ 
++    if (text == NULL) {
++        SPICE_DEBUG("Failed to retrieve clipboard text");
++        return;
++    }
++
+     g_return_if_fail(SPICE_IS_GTK_SESSION(self));
+ 
+     selection = get_selection_from_clipboard(self->priv, clipboard);

Copied: spice-glib/repos/staging-i686/ssl-Rework-our-custom-BIO-type.patch (from rev 216833, spice-glib/trunk/ssl-Rework-our-custom-BIO-type.patch)
===================================================================
--- staging-i686/ssl-Rework-our-custom-BIO-type.patch	                        (rev 0)
+++ staging-i686/ssl-Rework-our-custom-BIO-type.patch	2017-03-16 22:28:13 UTC (rev 216834)
@@ -0,0 +1,121 @@
+From: Sebastian Andrzej Siewior <sebastian at breakpoint.cc>
+Date: Wed, 26 Oct 2016 17:31:27 +0200
+Origin: upstream, https://cgit.freedesktop.org/spice/spice-gtk/commit/?id=498f5369203d73026e9fb3929fd19a358d76a152
+Bug-Debian: https://bugs.debian.org/851127
+Subject: ssl: Rework our custom BIO type
+
+This commit changes to an actual new BIO method rather than reusing an
+existing BIO method, and overriding only the fields that we need.
+The approach before this commit would be causing issues with OpenSSL
+1.1.0 as some of the fields we access have become opaque.
+---
+ src/bio-gio.c | 57 ++++++++++++++++++++++++++++-----------------------------
+ 1 file changed, 28 insertions(+), 29 deletions(-)
+
+diff --git a/src/bio-gio.c b/src/bio-gio.c
+index b310c97..0f8b415 100644
+--- a/src/bio-gio.c
++++ b/src/bio-gio.c
+@@ -23,21 +23,22 @@
+ #include "spice-util.h"
+ #include "bio-gio.h"
+ 
+-typedef struct bio_gsocket_method {
+-    BIO_METHOD method;
+-    GIOStream *stream;
+-} bio_gsocket_method;
+-
+-#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 long bio_gio_ctrl(G_GNUC_UNUSED BIO *b,
++                         int cmd,
++                         G_GNUC_UNUSED long num,
++                         G_GNUC_UNUSED void *ptr)
++{
++    return (cmd == BIO_CTRL_FLUSH);
++}
+ 
+ static int bio_gio_write(BIO *bio, const char *in, int inl)
+ {
++    GOutputStream *stream;
+     gssize ret;
+     GError *error = NULL;
+ 
+-    ret = g_pollable_output_stream_write_nonblocking(G_POLLABLE_OUTPUT_STREAM(BIO_GET_OSTREAM(bio)),
++    stream = g_io_stream_get_output_stream(bio->ptr);
++    ret = g_pollable_output_stream_write_nonblocking(G_POLLABLE_OUTPUT_STREAM(stream),
+                                                      in, inl, NULL, &error);
+     BIO_clear_retry_flags(bio);
+ 
+@@ -53,10 +54,12 @@ static int bio_gio_write(BIO *bio, const char *in, int inl)
+ 
+ static int bio_gio_read(BIO *bio, char *out, int outl)
+ {
++    GInputStream *stream;
+     gssize ret;
+     GError *error = NULL;
+ 
+-    ret = g_pollable_input_stream_read_nonblocking(G_POLLABLE_INPUT_STREAM(BIO_GET_ISTREAM(bio)),
++    stream = g_io_stream_get_input_stream(bio->ptr);
++    ret = g_pollable_input_stream_read_nonblocking(G_POLLABLE_INPUT_STREAM(stream),
+                                                    out, outl, NULL, &error);
+     BIO_clear_retry_flags(bio);
+ 
+@@ -70,17 +73,6 @@ static int bio_gio_read(BIO *bio, char *out, int outl)
+     return ret;
+ }
+ 
+-static int bio_gio_destroy(BIO *bio)
+-{
+-    if (bio == NULL || bio->method == NULL)
+-        return 0;
+-
+-    SPICE_DEBUG("bio gsocket destroy");
+-    g_clear_pointer(&bio->method, g_free);
+-
+-    return 1;
+-}
+-
+ static int bio_gio_puts(BIO *bio, const char *str)
+ {
+     int n, ret;
+@@ -91,23 +83,30 @@ static int bio_gio_puts(BIO *bio, const char *str)
+     return ret;
+ }
+ 
++#define BIO_TYPE_START 128
++
+ 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 *bio;
++    static BIO_METHOD bio_gio_method;
+ 
+-    bio_gsocket_method *bio_method = g_new(bio_gsocket_method, 1);
+-    bio_method->method = *bio->method;
+-    bio_method->stream = stream;
++    if (bio_gio_method.name == NULL) {
++        bio_gio_method.type = BIO_TYPE_START | BIO_TYPE_SOURCE_SINK;
++        bio_gio_method.name = "gio stream";
++    }
+ 
+-    bio->method->destroy(bio);
+-    bio->method = (BIO_METHOD*)bio_method;
++    bio = BIO_new(&bio_gio_method);
++    if (!bio)
++        return NULL;
+ 
+     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->method->ctrl = bio_gio_ctrl;
++
++    bio->init = 1;
++    bio->ptr = stream;
+ 
+     return bio;
+ }

Copied: spice-glib/repos/staging-i686/ssl-Stop-creating-our-own-X509_LOOKUP_METHOD.patch (from rev 216833, spice-glib/trunk/ssl-Stop-creating-our-own-X509_LOOKUP_METHOD.patch)
===================================================================
--- staging-i686/ssl-Stop-creating-our-own-X509_LOOKUP_METHOD.patch	                        (rev 0)
+++ staging-i686/ssl-Stop-creating-our-own-X509_LOOKUP_METHOD.patch	2017-03-16 22:28:13 UTC (rev 216834)
@@ -0,0 +1,71 @@
+From: Sebastian Andrzej Siewior <sebastian at breakpoint.cc>
+Date: Wed, 26 Oct 2016 12:55:03 +0200
+Origin: upstream, https://cgit.freedesktop.org/spice/spice-gtk/commit/?id=3ec02a76ea5e0bea4aa3d3cc81846a9063c26d7a
+Bug-Debian: https://bugs.debian.org/851127
+Subject: ssl: Stop creating our own X509_LOOKUP_METHOD
+
+OpenSSL 1.1.0 does not seem to provide API to do that anymore.
+
+There is no need to create a custom lookup to begin with. This method
+here has no callbacks implemented and is doing nothing. The way I
+understand it, it is used to retrieve a `lookup' object which provides a
+certificate store.  The SSL ctx provides also such a store.
+
+Acked-by: Christophe Fergeau <cfergeau at redhat.com>
+Acked-by: Pavel Grunt <pgrunt at redhat.com>
+---
+ src/spice-channel.c | 13 ++++---------
+ 1 file changed, 4 insertions(+), 9 deletions(-)
+
+diff --git a/src/spice-channel.c b/src/spice-channel.c
+index 95662f3..6a911a6 100644
+--- a/src/spice-channel.c
++++ b/src/spice-channel.c
+@@ -2352,17 +2352,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;
+@@ -2372,13 +2367,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);
+@@ -2386,11 +2381,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++;
+             }
+         }

Copied: spice-glib/repos/staging-i686/ssl-Use-accessors-rather-than-direct-struct-access.patch (from rev 216833, spice-glib/trunk/ssl-Use-accessors-rather-than-direct-struct-access.patch)
===================================================================
--- staging-i686/ssl-Use-accessors-rather-than-direct-struct-access.patch	                        (rev 0)
+++ staging-i686/ssl-Use-accessors-rather-than-direct-struct-access.patch	2017-03-16 22:28:13 UTC (rev 216834)
@@ -0,0 +1,193 @@
+From: Sebastian Andrzej Siewior <sebastian at breakpoint.cc>
+Date: Wed, 30 Nov 2016 16:34:59 +0100
+Origin: upstream, https://cgit.freedesktop.org/spice/spice-gtk/commit/?id=97bd84313597d7c37c637c29e75f8862fcab1940
+Bug-Debian: https://bugs.debian.org/851127
+Subject: ssl: Use accessors rather than direct struct access
+
+In OpenSSL 1.1.0, the struct fields are private so we can no longer
+directly access them.
+
+The accessors are not available in previous OpenSSL releases, so we need
+to add compat helpers.
+---
+ src/bio-gio.c       | 106 ++++++++++++++++++++++++++++++++++++++++++++--------
+ src/spice-channel.c |  11 +++++-
+ 2 files changed, 100 insertions(+), 17 deletions(-)
+
+diff --git a/src/bio-gio.c b/src/bio-gio.c
+index 0f8b415..9358fae 100644
+--- a/src/bio-gio.c
++++ b/src/bio-gio.c
+@@ -23,6 +23,75 @@
+ #include "spice-util.h"
+ #include "bio-gio.h"
+ 
++#if OPENSSL_VERSION_NUMBER < 0x10100000
++static BIO_METHOD one_static_bio;
++
++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_ctrl(BIO_METHOD *biom,
++                             long (*ctrl) (BIO *, int, long, void *))
++{
++    biom->ctrl = ctrl;
++    return 1;
++}
++
++#define BIO_TYPE_START 128
++
++static int BIO_get_new_index(void)
++{
++    static int bio_index = BIO_TYPE_START;
++    return bio_index++;
++}
++
++static void BIO_set_init(BIO *a, int init)
++{
++	a->init = init;
++}
++
++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;
++}
++
++static void BIO_meth_free(BIO_METHOD *biom)
++{
++}
++
++#endif
++
+ static long bio_gio_ctrl(G_GNUC_UNUSED BIO *b,
+                          int cmd,
+                          G_GNUC_UNUSED long num,
+@@ -37,7 +106,7 @@ static int bio_gio_write(BIO *bio, const char *in, int inl)
+     gssize ret;
+     GError *error = NULL;
+ 
+-    stream = g_io_stream_get_output_stream(bio->ptr);
++    stream = g_io_stream_get_output_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);
+@@ -58,7 +127,7 @@ static int bio_gio_read(BIO *bio, char *out, int outl)
+     gssize ret;
+     GError *error = NULL;
+ 
+-    stream = g_io_stream_get_input_stream(bio->ptr);
++    stream = g_io_stream_get_input_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);
+@@ -83,30 +152,35 @@ static int bio_gio_puts(BIO *bio, const char *str)
+     return ret;
+ }
+ 
+-#define BIO_TYPE_START 128
++static BIO_METHOD *bio_gio_method;
+ 
+ G_GNUC_INTERNAL
+ BIO* bio_new_giostream(GIOStream *stream)
+ {
+     BIO *bio;
+-    static BIO_METHOD bio_gio_method;
+ 
+-    if (bio_gio_method.name == NULL) {
+-        bio_gio_method.type = BIO_TYPE_START | BIO_TYPE_SOURCE_SINK;
+-        bio_gio_method.name = "gio stream";
++    if (!bio_gio_method) {
++        bio_gio_method = BIO_meth_new(BIO_get_new_index() |
++                                      BIO_TYPE_SOURCE_SINK,
++                                      "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_ctrl(bio_gio_method, bio_gio_ctrl)) {
++            BIO_meth_free(bio_gio_method);
++            bio_gio_method = NULL;
++            return NULL;
++        }
+     }
+ 
+-    bio = BIO_new(&bio_gio_method);
++    bio = BIO_new(bio_gio_method);
+     if (!bio)
+         return NULL;
+ 
+-    bio->method->bwrite = bio_gio_write;
+-    bio->method->bread = bio_gio_read;
+-    bio->method->bputs = bio_gio_puts;
+-    bio->method->ctrl = bio_gio_ctrl;
+-
+-    bio->init = 1;
+-    bio->ptr = stream;
+-
++    BIO_set_init(bio, 1);
++    BIO_set_data(bio, stream);
+     return bio;
+ }
+diff --git a/src/spice-channel.c b/src/spice-channel.c
+index 6a911a6..6556db3 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
+@@ -1161,7 +1170,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);

Copied: spice-glib/repos/staging-x86_64/PKGBUILD (from rev 216833, spice-glib/trunk/PKGBUILD)
===================================================================
--- staging-x86_64/PKGBUILD	                        (rev 0)
+++ staging-x86_64/PKGBUILD	2017-03-16 22:28:13 UTC (rev 216834)
@@ -0,0 +1,51 @@
+# $Id: PKGBUILD 164477 2016-03-03 13:24:42Z foutrelis $
+# Maintainer: Sergej Pupykin <pupykin.s+arch at gmail.com>
+# Contributor: Stefano Facchini <stefano.facchini at gmail.com>
+# Contributor: Jonathan Lestrelin <zanko at daemontux.org>
+# Contributor: Lucio Zara <pennega at gmail.com>
+
+pkgname=spice-glib
+pkgver=0.33
+pkgrel=4
+pkgdesc="Gtk client and libraries for SPICE remote desktop servers (gtk3 version)"
+arch=('i686' 'x86_64')
+url="https://www.spice-space.org"
+license=('LGPL2.1')
+depends=('celt0.5.1' 'dbus-glib' 'libcacard' 'libpulse' 'usbredir' 'libsoup'
+	 'cairo' 'libjpeg')
+makedepends=('gobject-introspection' 'intltool' 'python2-pyparsing' 'spice-protocol' 'usbutils'
+	     'vala' 'sdl' 'python2-six' 'pixman' 'polkit')
+options=('!emptydirs')
+source=("https://www.spice-space.org/download/gtk/spice-gtk-$pkgver.tar.bz2"
+        debian_843471-clipboard_Fix_crash_by_handling_error.patch
+        ssl-Stop-creating-our-own-X509_LOOKUP_METHOD.patch
+        ssl-Rework-our-custom-BIO-type.patch
+        ssl-Use-accessors-rather-than-direct-struct-access.patch)
+sha256sums=('7daf33b786ab8ebc9fe6e7b11745100ee1ab66e61a5811d1d5aabe4d66eaaf39'
+            '31cacbfce3de9c7599f3cca5b45ed76cf5e3997072aae64b4107676b0b9a2f7b'
+            '0e0d553992ea08a29b14439061c6e831ce4ba4bd7bb5e53d7e7e1306aa6ba0fa'
+            '91bbb28dc5a8968c0eea57919d9a4a86384a62909014b53b05b5e721afa8142d'
+            '0e65852f94849c3efe0c21c01f4be7b804641d7d178b12a22eb62f08db70371e')
+
+prepare() {
+  cd "$srcdir/spice-gtk-$pkgver"
+  patch -Np1 -i ../debian_843471-clipboard_Fix_crash_by_handling_error.patch
+  patch -Np1 -i ../ssl-Stop-creating-our-own-X509_LOOKUP_METHOD.patch
+  patch -Np1 -i ../ssl-Rework-our-custom-BIO-type.patch
+  patch -Np1 -i ../ssl-Use-accessors-rather-than-direct-struct-access.patch
+}
+
+build() {
+  cd "$srcdir/spice-gtk-$pkgver"
+  PYTHON=python2 ./configure --prefix=/usr \
+    --disable-static --enable-vala --with-gtk=no \
+    --with-audio=pulse \
+    --with-coroutine=gthread --sbindir=/usr/bin \
+    --enable-smartcard
+  make
+}
+
+package() {
+  cd "$srcdir/spice-gtk-$pkgver"
+  make DESTDIR="$pkgdir/" install
+}

Copied: spice-glib/repos/staging-x86_64/debian_843471-clipboard_Fix_crash_by_handling_error.patch (from rev 216833, spice-glib/trunk/debian_843471-clipboard_Fix_crash_by_handling_error.patch)
===================================================================
--- staging-x86_64/debian_843471-clipboard_Fix_crash_by_handling_error.patch	                        (rev 0)
+++ staging-x86_64/debian_843471-clipboard_Fix_crash_by_handling_error.patch	2017-03-16 22:28:13 UTC (rev 216834)
@@ -0,0 +1,40 @@
+commit 03c016bea939ee4a26e90d80fa1012a993a8ea47
+Author: Victor Toso <me at victortoso.com>
+Origin: upstream, https://cgit.freedesktop.org/spice/spice-gtk/commit/?id=03c016bea939ee4a26e90d80fa1012a993a8ea47
+Bug-Debian: https://bugs.debian.org/843471
+Date:   Fri Oct 14 18:12:01 2016 +0200
+
+    clipboard: Fix crash by handling error
+    
+    As manual states below, text could be NULL for different reasons and
+    we should handle that. I've included a debug message to help
+    identifying possible regressions from wayland's clipboard.
+    
+    This crash is a regression from 7b0de6217670e0f668aff2949f
+    
+     "The text parameter to callback will contain the resulting text if
+     the request succeeded, or NULL if it failed. This could happen for
+     various reasons, in particular if the clipboard was empty or if the
+     contents of the clipboard could not be converted into text form."
+    
+    Resolves: rhbz#1384676
+    
+    Signed-off-by: Victor Toso <victortoso at redhat.com>
+    Acked-by: Pavel Grunt <pgrunt at redhat.com>
+
+diff --git a/src/spice-gtk-session.c b/src/spice-gtk-session.c
+index 3ff4e9a..3e0ec74 100644
+--- a/src/spice-gtk-session.c
++++ b/src/spice-gtk-session.c
+@@ -945,6 +945,11 @@ static void clipboard_received_text_cb(GtkClipboard *clipboard,
+     if (self == NULL)
+         return;
+ 
++    if (text == NULL) {
++        SPICE_DEBUG("Failed to retrieve clipboard text");
++        return;
++    }
++
+     g_return_if_fail(SPICE_IS_GTK_SESSION(self));
+ 
+     selection = get_selection_from_clipboard(self->priv, clipboard);

Copied: spice-glib/repos/staging-x86_64/ssl-Rework-our-custom-BIO-type.patch (from rev 216833, spice-glib/trunk/ssl-Rework-our-custom-BIO-type.patch)
===================================================================
--- staging-x86_64/ssl-Rework-our-custom-BIO-type.patch	                        (rev 0)
+++ staging-x86_64/ssl-Rework-our-custom-BIO-type.patch	2017-03-16 22:28:13 UTC (rev 216834)
@@ -0,0 +1,121 @@
+From: Sebastian Andrzej Siewior <sebastian at breakpoint.cc>
+Date: Wed, 26 Oct 2016 17:31:27 +0200
+Origin: upstream, https://cgit.freedesktop.org/spice/spice-gtk/commit/?id=498f5369203d73026e9fb3929fd19a358d76a152
+Bug-Debian: https://bugs.debian.org/851127
+Subject: ssl: Rework our custom BIO type
+
+This commit changes to an actual new BIO method rather than reusing an
+existing BIO method, and overriding only the fields that we need.
+The approach before this commit would be causing issues with OpenSSL
+1.1.0 as some of the fields we access have become opaque.
+---
+ src/bio-gio.c | 57 ++++++++++++++++++++++++++++-----------------------------
+ 1 file changed, 28 insertions(+), 29 deletions(-)
+
+diff --git a/src/bio-gio.c b/src/bio-gio.c
+index b310c97..0f8b415 100644
+--- a/src/bio-gio.c
++++ b/src/bio-gio.c
+@@ -23,21 +23,22 @@
+ #include "spice-util.h"
+ #include "bio-gio.h"
+ 
+-typedef struct bio_gsocket_method {
+-    BIO_METHOD method;
+-    GIOStream *stream;
+-} bio_gsocket_method;
+-
+-#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 long bio_gio_ctrl(G_GNUC_UNUSED BIO *b,
++                         int cmd,
++                         G_GNUC_UNUSED long num,
++                         G_GNUC_UNUSED void *ptr)
++{
++    return (cmd == BIO_CTRL_FLUSH);
++}
+ 
+ static int bio_gio_write(BIO *bio, const char *in, int inl)
+ {
++    GOutputStream *stream;
+     gssize ret;
+     GError *error = NULL;
+ 
+-    ret = g_pollable_output_stream_write_nonblocking(G_POLLABLE_OUTPUT_STREAM(BIO_GET_OSTREAM(bio)),
++    stream = g_io_stream_get_output_stream(bio->ptr);
++    ret = g_pollable_output_stream_write_nonblocking(G_POLLABLE_OUTPUT_STREAM(stream),
+                                                      in, inl, NULL, &error);
+     BIO_clear_retry_flags(bio);
+ 
+@@ -53,10 +54,12 @@ static int bio_gio_write(BIO *bio, const char *in, int inl)
+ 
+ static int bio_gio_read(BIO *bio, char *out, int outl)
+ {
++    GInputStream *stream;
+     gssize ret;
+     GError *error = NULL;
+ 
+-    ret = g_pollable_input_stream_read_nonblocking(G_POLLABLE_INPUT_STREAM(BIO_GET_ISTREAM(bio)),
++    stream = g_io_stream_get_input_stream(bio->ptr);
++    ret = g_pollable_input_stream_read_nonblocking(G_POLLABLE_INPUT_STREAM(stream),
+                                                    out, outl, NULL, &error);
+     BIO_clear_retry_flags(bio);
+ 
+@@ -70,17 +73,6 @@ static int bio_gio_read(BIO *bio, char *out, int outl)
+     return ret;
+ }
+ 
+-static int bio_gio_destroy(BIO *bio)
+-{
+-    if (bio == NULL || bio->method == NULL)
+-        return 0;
+-
+-    SPICE_DEBUG("bio gsocket destroy");
+-    g_clear_pointer(&bio->method, g_free);
+-
+-    return 1;
+-}
+-
+ static int bio_gio_puts(BIO *bio, const char *str)
+ {
+     int n, ret;
+@@ -91,23 +83,30 @@ static int bio_gio_puts(BIO *bio, const char *str)
+     return ret;
+ }
+ 
++#define BIO_TYPE_START 128
++
+ 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 *bio;
++    static BIO_METHOD bio_gio_method;
+ 
+-    bio_gsocket_method *bio_method = g_new(bio_gsocket_method, 1);
+-    bio_method->method = *bio->method;
+-    bio_method->stream = stream;
++    if (bio_gio_method.name == NULL) {
++        bio_gio_method.type = BIO_TYPE_START | BIO_TYPE_SOURCE_SINK;
++        bio_gio_method.name = "gio stream";
++    }
+ 
+-    bio->method->destroy(bio);
+-    bio->method = (BIO_METHOD*)bio_method;
++    bio = BIO_new(&bio_gio_method);
++    if (!bio)
++        return NULL;
+ 
+     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->method->ctrl = bio_gio_ctrl;
++
++    bio->init = 1;
++    bio->ptr = stream;
+ 
+     return bio;
+ }

Copied: spice-glib/repos/staging-x86_64/ssl-Stop-creating-our-own-X509_LOOKUP_METHOD.patch (from rev 216833, spice-glib/trunk/ssl-Stop-creating-our-own-X509_LOOKUP_METHOD.patch)
===================================================================
--- staging-x86_64/ssl-Stop-creating-our-own-X509_LOOKUP_METHOD.patch	                        (rev 0)
+++ staging-x86_64/ssl-Stop-creating-our-own-X509_LOOKUP_METHOD.patch	2017-03-16 22:28:13 UTC (rev 216834)
@@ -0,0 +1,71 @@
+From: Sebastian Andrzej Siewior <sebastian at breakpoint.cc>
+Date: Wed, 26 Oct 2016 12:55:03 +0200
+Origin: upstream, https://cgit.freedesktop.org/spice/spice-gtk/commit/?id=3ec02a76ea5e0bea4aa3d3cc81846a9063c26d7a
+Bug-Debian: https://bugs.debian.org/851127
+Subject: ssl: Stop creating our own X509_LOOKUP_METHOD
+
+OpenSSL 1.1.0 does not seem to provide API to do that anymore.
+
+There is no need to create a custom lookup to begin with. This method
+here has no callbacks implemented and is doing nothing. The way I
+understand it, it is used to retrieve a `lookup' object which provides a
+certificate store.  The SSL ctx provides also such a store.
+
+Acked-by: Christophe Fergeau <cfergeau at redhat.com>
+Acked-by: Pavel Grunt <pgrunt at redhat.com>
+---
+ src/spice-channel.c | 13 ++++---------
+ 1 file changed, 4 insertions(+), 9 deletions(-)
+
+diff --git a/src/spice-channel.c b/src/spice-channel.c
+index 95662f3..6a911a6 100644
+--- a/src/spice-channel.c
++++ b/src/spice-channel.c
+@@ -2352,17 +2352,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;
+@@ -2372,13 +2367,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);
+@@ -2386,11 +2381,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++;
+             }
+         }

Copied: spice-glib/repos/staging-x86_64/ssl-Use-accessors-rather-than-direct-struct-access.patch (from rev 216833, spice-glib/trunk/ssl-Use-accessors-rather-than-direct-struct-access.patch)
===================================================================
--- staging-x86_64/ssl-Use-accessors-rather-than-direct-struct-access.patch	                        (rev 0)
+++ staging-x86_64/ssl-Use-accessors-rather-than-direct-struct-access.patch	2017-03-16 22:28:13 UTC (rev 216834)
@@ -0,0 +1,193 @@
+From: Sebastian Andrzej Siewior <sebastian at breakpoint.cc>
+Date: Wed, 30 Nov 2016 16:34:59 +0100
+Origin: upstream, https://cgit.freedesktop.org/spice/spice-gtk/commit/?id=97bd84313597d7c37c637c29e75f8862fcab1940
+Bug-Debian: https://bugs.debian.org/851127
+Subject: ssl: Use accessors rather than direct struct access
+
+In OpenSSL 1.1.0, the struct fields are private so we can no longer
+directly access them.
+
+The accessors are not available in previous OpenSSL releases, so we need
+to add compat helpers.
+---
+ src/bio-gio.c       | 106 ++++++++++++++++++++++++++++++++++++++++++++--------
+ src/spice-channel.c |  11 +++++-
+ 2 files changed, 100 insertions(+), 17 deletions(-)
+
+diff --git a/src/bio-gio.c b/src/bio-gio.c
+index 0f8b415..9358fae 100644
+--- a/src/bio-gio.c
++++ b/src/bio-gio.c
+@@ -23,6 +23,75 @@
+ #include "spice-util.h"
+ #include "bio-gio.h"
+ 
++#if OPENSSL_VERSION_NUMBER < 0x10100000
++static BIO_METHOD one_static_bio;
++
++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_ctrl(BIO_METHOD *biom,
++                             long (*ctrl) (BIO *, int, long, void *))
++{
++    biom->ctrl = ctrl;
++    return 1;
++}
++
++#define BIO_TYPE_START 128
++
++static int BIO_get_new_index(void)
++{
++    static int bio_index = BIO_TYPE_START;
++    return bio_index++;
++}
++
++static void BIO_set_init(BIO *a, int init)
++{
++	a->init = init;
++}
++
++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;
++}
++
++static void BIO_meth_free(BIO_METHOD *biom)
++{
++}
++
++#endif
++
+ static long bio_gio_ctrl(G_GNUC_UNUSED BIO *b,
+                          int cmd,
+                          G_GNUC_UNUSED long num,
+@@ -37,7 +106,7 @@ static int bio_gio_write(BIO *bio, const char *in, int inl)
+     gssize ret;
+     GError *error = NULL;
+ 
+-    stream = g_io_stream_get_output_stream(bio->ptr);
++    stream = g_io_stream_get_output_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);
+@@ -58,7 +127,7 @@ static int bio_gio_read(BIO *bio, char *out, int outl)
+     gssize ret;
+     GError *error = NULL;
+ 
+-    stream = g_io_stream_get_input_stream(bio->ptr);
++    stream = g_io_stream_get_input_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);
+@@ -83,30 +152,35 @@ static int bio_gio_puts(BIO *bio, const char *str)
+     return ret;
+ }
+ 
+-#define BIO_TYPE_START 128
++static BIO_METHOD *bio_gio_method;
+ 
+ G_GNUC_INTERNAL
+ BIO* bio_new_giostream(GIOStream *stream)
+ {
+     BIO *bio;
+-    static BIO_METHOD bio_gio_method;
+ 
+-    if (bio_gio_method.name == NULL) {
+-        bio_gio_method.type = BIO_TYPE_START | BIO_TYPE_SOURCE_SINK;
+-        bio_gio_method.name = "gio stream";
++    if (!bio_gio_method) {
++        bio_gio_method = BIO_meth_new(BIO_get_new_index() |
++                                      BIO_TYPE_SOURCE_SINK,
++                                      "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_ctrl(bio_gio_method, bio_gio_ctrl)) {
++            BIO_meth_free(bio_gio_method);
++            bio_gio_method = NULL;
++            return NULL;
++        }
+     }
+ 
+-    bio = BIO_new(&bio_gio_method);
++    bio = BIO_new(bio_gio_method);
+     if (!bio)
+         return NULL;
+ 
+-    bio->method->bwrite = bio_gio_write;
+-    bio->method->bread = bio_gio_read;
+-    bio->method->bputs = bio_gio_puts;
+-    bio->method->ctrl = bio_gio_ctrl;
+-
+-    bio->init = 1;
+-    bio->ptr = stream;
+-
++    BIO_set_init(bio, 1);
++    BIO_set_data(bio, stream);
+     return bio;
+ }
+diff --git a/src/spice-channel.c b/src/spice-channel.c
+index 6a911a6..6556db3 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
+@@ -1161,7 +1170,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);



More information about the arch-commits mailing list