diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7bcad81 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/spice-gtk-0.33.tar.bz2 diff --git a/.spice-gtk.metadata b/.spice-gtk.metadata new file mode 100644 index 0000000..2710f85 --- /dev/null +++ b/.spice-gtk.metadata @@ -0,0 +1 @@ +99c26baa5e18c73f68fb11fbbe7fd0d3c171eedc SOURCES/spice-gtk-0.33.tar.bz2 diff --git a/README.md b/README.md deleted file mode 100644 index 0e7897f..0000000 --- a/README.md +++ /dev/null @@ -1,5 +0,0 @@ -The master branch has no content - -Look at the c7 branch if you are working with CentOS-7, or the c4/c5/c6 branch for CentOS-4, 5 or 6 - -If you find this file in a distro specific branch, it means that no content has been checked in yet diff --git a/SOURCES/0001-clipboard-Fix-crash-by-handling-error.patch b/SOURCES/0001-clipboard-Fix-crash-by-handling-error.patch new file mode 100644 index 0000000..f5cac1b --- /dev/null +++ b/SOURCES/0001-clipboard-Fix-crash-by-handling-error.patch @@ -0,0 +1,41 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Victor Toso +Date: Fri, 14 Oct 2016 18:12:01 +0200 +Subject: [PATCH] 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 +Acked-by: Pavel Grunt +(cherry picked from commit 03c016bea939ee4a26e90d80fa1012a993a8ea47) +--- + src/spice-gtk-session.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/src/spice-gtk-session.c b/src/spice-gtk-session.c +index f04d5e8..2da9bc0 100644 +--- a/src/spice-gtk-session.c ++++ b/src/spice-gtk-session.c +@@ -918,6 +918,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); diff --git a/SOURCES/0002-channel-usbredir-Fix-crash-on-channel-up.patch b/SOURCES/0002-channel-usbredir-Fix-crash-on-channel-up.patch new file mode 100644 index 0000000..48890b0 --- /dev/null +++ b/SOURCES/0002-channel-usbredir-Fix-crash-on-channel-up.patch @@ -0,0 +1,60 @@ +From 6e7401410f3fa8e817c6367a9fc120675c8c8d20 Mon Sep 17 00:00:00 2001 +From: Victor Toso +Date: Tue, 29 Nov 2016 22:34:04 +0100 +Subject: [PATCH] channel-usbredir: Fix crash on channel-up + +SpiceSession does not initialize its SpiceUsbDeviceManager object on +startup that could lead to a race condition where channel-usbredir is +requested to flush data while it is uninitialized. + +In a few places, spice_usb_device_manager_get() is called as in +usb-device-widget.c and spice-gtk-session.c but not used in +spicy-stats, making the tool to crash on startup if it encounters an +usbredir channel. + + #0 in usbredirhost_write_guest_data (host=0x0) at usbredir/usbredirhost/usbredirhost.c:876 + #1 in spice_usbredir_channel_up (c=0x643830) at channel-usbredir.c:821 + #2 in spice_channel_up (channel=0x643830) at spice-channel.c:1238 + #3 in spice_channel_recv_auth (channel=0x643830) at spice-channel.c:1225 + #4 in spice_channel_coroutine (data=0x643830) at spice-channel.c:2580 + #5 in coroutine_trampoline (cc=0x642ec0) at coroutine_ucontext.c:63 + #6 in continuation_trampoline (i0=6565568, i1=0) at continuation.c:55 + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1399838 + +Signed-off-by: Victor Toso +Reported-by: Michael Cullen +Acked-by: Christophe Fergeau +(cherry picked from commit 291f3e4419e6fb4077ae43a5e09eb1c37b9dd729) +--- + src/spice-session.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/src/spice-session.c b/src/spice-session.c +index 860461f..a1786af 100644 +--- a/src/spice-session.c ++++ b/src/spice-session.c +@@ -282,6 +282,7 @@ static void spice_session_init(SpiceSession *session) + { + SpiceSessionPrivate *s; + gchar *channels; ++ GError *err = NULL; + + SPICE_DEBUG("New session (compiled from package " PACKAGE_STRING ")"); + s = session->priv = SPICE_SESSION_GET_PRIVATE(session); +@@ -294,6 +295,12 @@ static void spice_session_init(SpiceSession *session) + s->images = cache_image_new((GDestroyNotify)pixman_image_unref); + s->glz_window = glz_decoder_window_new(); + update_proxy(session, NULL); ++ ++ s->usb_manager = spice_usb_device_manager_get(session, &err); ++ if (err != NULL) { ++ SPICE_DEBUG("Could not initialize SpiceUsbDeviceManager - %s", err->message); ++ g_clear_error(&err); ++ } + } + + static void +-- +2.11.0 + diff --git a/SOURCES/0003-gtk-session-Use-GWeakRef.patch b/SOURCES/0003-gtk-session-Use-GWeakRef.patch new file mode 100644 index 0000000..d7ab1de --- /dev/null +++ b/SOURCES/0003-gtk-session-Use-GWeakRef.patch @@ -0,0 +1,152 @@ +From e1f40a2431f58e95437b2b326cf3a288fc11c76b Mon Sep 17 00:00:00 2001 +From: Victor Toso +Date: Fri, 10 Feb 2017 15:28:13 +0100 +Subject: [PATCH spice-gtk 1/2] gtk-session: Use GWeakRef +To: spice-devel@lists.freedesktop.org + +The custom WeakRef structure was introduced in 9baba9fd89 (2012) to +fix rhbz#743773. Since glib 2.32, GWeakRef was introduced and it +behaves similarly to our WeakRef. + +Moving to GWeakRef to remove some code which exists in glib. + +Note that I'm keeping two utility functions: +- get_weak_ref(gpointer object): which returns a newly allocated + GWeakRef, initialized with @object; +- free_weak_ref(gpointer pdata): which frees the GWeakRef and returns + the original object or NULL. It also takes care of an extra + reference to the object. + +Signed-off-by: Victor Toso +Acked-by: Christophe Fergeau +(cherry picked from commit 12f5d3391d6093b53c5b3f0f18182a859576a4b7) +--- + src/spice-gtk-session.c | 52 +++++++++++++++++++------------------------------ + 1 file changed, 20 insertions(+), 32 deletions(-) + +diff --git a/src/spice-gtk-session.c b/src/spice-gtk-session.c +index 3e0ec74..6424596 100644 +--- a/src/spice-gtk-session.c ++++ b/src/spice-gtk-session.c +@@ -572,31 +572,26 @@ static const struct { + } + }; + +-typedef struct _WeakRef { +- GObject *object; +-} WeakRef; +- +-static void weak_notify_cb(WeakRef *weakref, GObject *object) +-{ +- weakref->object = NULL; +-} +- +-static WeakRef* weak_ref(GObject *object) ++static GWeakRef* get_weak_ref(gpointer object) + { +- WeakRef *weakref = g_new(WeakRef, 1); +- +- g_object_weak_ref(object, (GWeakNotify)weak_notify_cb, weakref); +- weakref->object = object; +- ++ GWeakRef *weakref = g_new(GWeakRef, 1); ++ g_weak_ref_init(weakref, object); + return weakref; + } + +-static void weak_unref(WeakRef* weakref) ++static gpointer free_weak_ref(gpointer data) + { +- if (weakref->object) +- g_object_weak_unref(weakref->object, (GWeakNotify)weak_notify_cb, weakref); ++ GWeakRef *weakref = data; ++ gpointer object = g_weak_ref_get(weakref); + ++ g_weak_ref_clear(weakref); + g_free(weakref); ++ if (object != NULL) { ++ /* The main reference still exists as object is not NULL, so we can ++ * remove the strong reference given by g_weak_ref_get */ ++ g_object_unref(object); ++ } ++ return object; + } + + static void clipboard_get_targets(GtkClipboard *clipboard, +@@ -604,9 +599,7 @@ static void clipboard_get_targets(GtkClipboard *clipboard, + gint n_atoms, + gpointer user_data) + { +- WeakRef *weakref = user_data; +- SpiceGtkSession *self = (SpiceGtkSession*)weakref->object; +- weak_unref(weakref); ++ SpiceGtkSession *self = free_weak_ref(user_data); + + if (self == NULL) + return; +@@ -703,7 +696,7 @@ static void clipboard_owner_change(GtkClipboard *clipboard, + s->clip_hasdata[selection] = TRUE; + if (s->auto_clipboard_enable && !read_only(self)) + gtk_clipboard_request_targets(clipboard, clipboard_get_targets, +- weak_ref(G_OBJECT(self))); ++ get_weak_ref(self)); + break; + default: + s->clip_hasdata[selection] = FALSE; +@@ -934,14 +927,11 @@ static void clipboard_received_text_cb(GtkClipboard *clipboard, + const gchar *text, + gpointer user_data) + { +- WeakRef *weakref = user_data; +- SpiceGtkSession *self = (SpiceGtkSession*)weakref->object; ++ SpiceGtkSession *self = free_weak_ref(user_data); + char *conv = NULL; + int len = 0; + int selection; + +- weak_unref(weakref); +- + if (self == NULL) + return; + +@@ -977,9 +967,7 @@ static void clipboard_received_cb(GtkClipboard *clipboard, + GtkSelectionData *selection_data, + gpointer user_data) + { +- WeakRef *weakref = user_data; +- SpiceGtkSession *self = (SpiceGtkSession*)weakref->object; +- weak_unref(weakref); ++ SpiceGtkSession *self = free_weak_ref(user_data); + + if (self == NULL) + return; +@@ -1050,7 +1038,7 @@ static gboolean clipboard_request(SpiceMainChannel *main, guint selection, + + if (type == VD_AGENT_CLIPBOARD_UTF8_TEXT) { + gtk_clipboard_request_text(cb, clipboard_received_text_cb, +- weak_ref(G_OBJECT(self))); ++ get_weak_ref(self)); + } else { + for (m = 0; m < SPICE_N_ELEMENTS(atom2agent); m++) { + if (atom2agent[m].vdagent == type) +@@ -1061,7 +1049,7 @@ static gboolean clipboard_request(SpiceMainChannel *main, guint selection, + + atom = gdk_atom_intern_static_string(atom2agent[m].xatom); + gtk_clipboard_request_contents(cb, atom, clipboard_received_cb, +- weak_ref(G_OBJECT(self))); ++ get_weak_ref(self)); + } + + return TRUE; +@@ -1234,7 +1222,7 @@ void spice_gtk_session_copy_to_guest(SpiceGtkSession *self) + + if (s->clip_hasdata[selection] && !s->clip_grabbed[selection]) { + gtk_clipboard_request_targets(s->clipboard, clipboard_get_targets, +- weak_ref(G_OBJECT(self))); ++ get_weak_ref(self)); + } + } + +-- +2.12.0 + diff --git a/SOURCES/0004-gtk-session-always-reply-to-agent-s-clipboard-reques.patch b/SOURCES/0004-gtk-session-always-reply-to-agent-s-clipboard-reques.patch new file mode 100644 index 0000000..82a3465 --- /dev/null +++ b/SOURCES/0004-gtk-session-always-reply-to-agent-s-clipboard-reques.patch @@ -0,0 +1,94 @@ +From 1d349aa519571199d10d38b0a0e2f91b051ab3c8 Mon Sep 17 00:00:00 2001 +From: Victor Toso +Date: Fri, 24 Feb 2017 14:12:45 +0100 +Subject: [PATCH spice-gtk 2/2] gtk-session: always reply to agent's clipboard + request +To: spice-devel@lists.freedesktop.org + +This fixes a regression from 7b0de6217670e0f668aff2949f + +We need to reply back to the agent all clipboard requests even in case +of failure otherwise it will have a pending request. The following +error message can be seen afterwards, in the linux agent, when client +sends down some clipboard data: + + > clipboard: selection requests pending on clipboard ownership + > change, clearing + +An easy way to reproduce this is: +1-) In client, copy image from lo-draw (selection or ctrl+c) +2-) In guest, paste it to GEdit (mouse3 our ctrl+v) +3-) Move to the client +4-) Move back to the guest +5-) see error on vdagent logs + +The reason for failure is that client's clipboard contains different +data type (image) then what was requested from guest's editor (text) + +While at it, include extra debug message as it might be hard to +identify why clipboard did not work. + +Resolves: rhbz#1409854 +Signed-off-by: Victor Toso +Acked-by: Pavel Grunt +(cherry picked from commit 172c521271a3dc6d9ed0c297406c2fa29266682d) +--- + src/spice-gtk-session.c | 21 +++++++++++++-------- + 1 file changed, 13 insertions(+), 8 deletions(-) + +diff --git a/src/spice-gtk-session.c b/src/spice-gtk-session.c +index 6424596..c0a46e8 100644 +--- a/src/spice-gtk-session.c ++++ b/src/spice-gtk-session.c +@@ -931,35 +931,40 @@ static void clipboard_received_text_cb(GtkClipboard *clipboard, + char *conv = NULL; + int len = 0; + int selection; ++ const guchar *data = NULL; + + if (self == NULL) + return; + ++ selection = get_selection_from_clipboard(self->priv, clipboard); ++ g_return_if_fail(selection != -1); ++ + if (text == NULL) { + SPICE_DEBUG("Failed to retrieve clipboard text"); +- return; ++ goto notify_agent; + } + + g_return_if_fail(SPICE_IS_GTK_SESSION(self)); + +- selection = get_selection_from_clipboard(self->priv, clipboard); +- g_return_if_fail(selection != -1); +- + len = strlen(text); + if (!check_clipboard_size_limits(self, len)) { +- return; ++ SPICE_DEBUG("Failed size limits of clipboard text (%d bytes)", len); ++ goto notify_agent; + } + + /* gtk+ internal utf8 newline is always LF, even on windows */ + conv = fixup_clipboard_text(self, text, &len); + if (!check_clipboard_size_limits(self, len)) { +- g_free(conv); +- return; ++ SPICE_DEBUG("Failed size limits of clipboard text (%d bytes)", len); ++ goto notify_agent; + } + ++ data = (const guchar *) (conv != NULL ? conv : text); ++notify_agent: + spice_main_clipboard_selection_notify(self->priv->main, selection, + VD_AGENT_CLIPBOARD_UTF8_TEXT, +- (guchar *)(conv ?: text), len); ++ data, ++ (data != NULL) ? len : 0); + g_free(conv); + } + +-- +2.12.0 + diff --git a/SOURCES/0005-usb-Allow-to-compile-if-LZ4-is-disabled.patch b/SOURCES/0005-usb-Allow-to-compile-if-LZ4-is-disabled.patch new file mode 100644 index 0000000..5afbe41 --- /dev/null +++ b/SOURCES/0005-usb-Allow-to-compile-if-LZ4-is-disabled.patch @@ -0,0 +1,38 @@ +From a6e7077e0dbc57ae174b2fc6ab0f4082561f0a45 Mon Sep 17 00:00:00 2001 +From: Frediano Ziglio +Date: Mon, 14 Nov 2016 11:19:47 +0000 +Subject: [PATCH spice-gtk] usb: Allow to compile if LZ4 is disabled +To: spice-devel@lists.freedesktop.org + +spice_usbredir_channel_get_spice_usb_device is used only if LZ4 +is enabled so avoid to define if not used as this cause a +compile error. + +Signed-off-by: Frediano Ziglio +Acked-by: Victor Toso +(cherry picked from commit e0a6ca62acb2d2e46304a9ce6b1dcb41e0534587) +--- + src/channel-usbredir.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/channel-usbredir.c b/src/channel-usbredir.c +index 94a5050..add7d5e 100644 +--- a/src/channel-usbredir.c ++++ b/src/channel-usbredir.c +@@ -544,11 +544,13 @@ void spice_usbredir_channel_disconnect_device_async(SpiceUsbredirChannel *channe + g_object_unref(task); + } + ++#ifdef USE_LZ4 + static SpiceUsbDevice * + spice_usbredir_channel_get_spice_usb_device(SpiceUsbredirChannel *channel) + { + return channel->priv->spice_device; + } ++#endif + + G_GNUC_INTERNAL + libusb_device *spice_usbredir_channel_get_device(SpiceUsbredirChannel *channel) +-- +2.12.0 + diff --git a/SOURCES/0006-widget-Always-call-gtk_widget_show_all.patch b/SOURCES/0006-widget-Always-call-gtk_widget_show_all.patch new file mode 100644 index 0000000..328311d --- /dev/null +++ b/SOURCES/0006-widget-Always-call-gtk_widget_show_all.patch @@ -0,0 +1,44 @@ +From a641a92e935a26bdaf104e76a324d533171aa7b4 Mon Sep 17 00:00:00 2001 +From: Pavel Grunt +Date: Mon, 27 Mar 2017 13:36:57 +0200 +Subject: [PATCH spice-gtk 6/8] widget: Always call gtk_widget_show_all +To: spice-devel@lists.freedesktop.org + +Since spice-gtk 0.32 SpiceDisplay widget internally has changed +from the GtkDrawingArea to a GtkContainer. + +Per gtk_widget_show documentation: + "Remember that you have to show the containers containing a widget, + in addition to the widget itself, before it will appear onscreen." + +Let's always call gtk_widget_show_all, not just for gtk+ >= 3.16 +otherwise you may get a blackscreen with spice-gtk compiled against +an old gtk+ version. + +Fixes: +https://bugs.freedesktop.org/show_bug.cgi?id=100251 + +Acked-by: Christophe Fergeau +(cherry picked from commit 721dbe9926c0e35e462595346829d55d7820ea05) +--- + src/spice-widget.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/spice-widget.c b/src/spice-widget.c +index 06e332f..cc0a705 100644 +--- a/src/spice-widget.c ++++ b/src/spice-widget.c +@@ -645,9 +645,9 @@ static void spice_display_init(SpiceDisplay *display) + "signal::realize", gl_area_realize, display, + NULL); + gtk_stack_add_named(d->stack, area, "gl-area"); +- gtk_widget_show_all(widget); + #endif + #endif ++ gtk_widget_show_all(widget); + + g_signal_connect(display, "grab-broken-event", G_CALLBACK(grab_broken), NULL); + g_signal_connect(display, "grab-notify", G_CALLBACK(grab_notify), NULL); +-- +2.12.1 + diff --git a/SOURCES/0007-authentication-Handle-failed-SASL-authentication-sep.patch b/SOURCES/0007-authentication-Handle-failed-SASL-authentication-sep.patch new file mode 100644 index 0000000..0f45105 --- /dev/null +++ b/SOURCES/0007-authentication-Handle-failed-SASL-authentication-sep.patch @@ -0,0 +1,94 @@ +From e32502ef5a9f6bae10924426e0e2e88dbac6dca5 Mon Sep 17 00:00:00 2001 +From: snir sheriber +Date: Sun, 26 Feb 2017 12:09:17 +0200 +Subject: [PATCH spice-gtk 7/8] authentication: Handle failed SASL + authentication separately +To: spice-devel@lists.freedesktop.org + +Move SASL authentication failures handling to a separate +function. + +Multiple error messages asking for username\password were +removed because they are not necessarily the reason for the +failure (avoiding similar issue as in rhbz#1365736). +Letting the user know about required username\password +should be achieved by setting specific Gerror's error code +and enabling\disabling the username\password fields +accordingly by the application. + +(cherry picked from commit 2dc8f0bad6558a944405404a266954fd29fd0fa2) +--- + src/spice-channel.c | 44 +++++++++++++++++++++++++++----------------- + 1 file changed, 27 insertions(+), 17 deletions(-) + +diff --git a/src/spice-channel.c b/src/spice-channel.c +index 95662f3..020606b 100644 +--- a/src/spice-channel.c ++++ b/src/spice-channel.c +@@ -1104,28 +1104,38 @@ static int spice_channel_read(SpiceChannel *channel, void *data, size_t length) + return length; + } + ++#if HAVE_SASL + /* coroutine context */ +-static void spice_channel_failed_authentication(SpiceChannel *channel, +- gboolean invalidPassword) ++static void spice_channel_failed_sasl_authentication(SpiceChannel *channel) + { + SpiceChannelPrivate *c = channel->priv; ++ gint err_code; /* The application should activate the authentication window fields accordingly */ + + if (c->auth_needs_username && c->auth_needs_password) +- g_set_error_literal(&c->error, +- SPICE_CLIENT_ERROR, +- SPICE_CLIENT_ERROR_AUTH_NEEDS_PASSWORD_AND_USERNAME, +- _("Authentication failed: password and username are required")); ++ err_code = SPICE_CLIENT_ERROR_AUTH_NEEDS_PASSWORD_AND_USERNAME; + else if (c->auth_needs_username) +- g_set_error_literal(&c->error, +- SPICE_CLIENT_ERROR, +- SPICE_CLIENT_ERROR_AUTH_NEEDS_USERNAME, +- _("Authentication failed: username is required")); +- else if (c->auth_needs_password) +- g_set_error_literal(&c->error, +- SPICE_CLIENT_ERROR, +- SPICE_CLIENT_ERROR_AUTH_NEEDS_PASSWORD, +- _("Authentication failed: password is required")); +- else if (invalidPassword) ++ err_code = SPICE_CLIENT_ERROR_AUTH_NEEDS_USERNAME; ++ else ++ err_code = SPICE_CLIENT_ERROR_AUTH_NEEDS_PASSWORD; ++ ++ g_set_error_literal(&c->error, ++ SPICE_CLIENT_ERROR, ++ err_code, ++ _("Authentication failed")); ++ ++ c->event = SPICE_CHANNEL_ERROR_AUTH; ++ ++ c->has_error = TRUE; /* force disconnect */ ++} ++#endif ++ ++/* coroutine context */ ++static void spice_channel_failed_authentication(SpiceChannel *channel, ++ gboolean invalidPassword) ++{ ++ SpiceChannelPrivate *c = channel->priv; ++ ++ if (invalidPassword) + g_set_error_literal(&c->error, + SPICE_CLIENT_ERROR, + SPICE_CLIENT_ERROR_AUTH_NEEDS_PASSWORD, +@@ -1799,7 +1809,7 @@ error: + if (saslconn) + sasl_dispose(&saslconn); + +- spice_channel_failed_authentication(channel, FALSE); ++ spice_channel_failed_sasl_authentication(channel); + ret = FALSE; + + cleanup: +-- +2.12.1 + diff --git a/SOURCES/0008-authentication-Handle-failed-spice-authentication.patch b/SOURCES/0008-authentication-Handle-failed-spice-authentication.patch new file mode 100644 index 0000000..3a79a73 --- /dev/null +++ b/SOURCES/0008-authentication-Handle-failed-spice-authentication.patch @@ -0,0 +1,63 @@ +From 9a3eab7d73b6300de21b0bf3aad176b774e5b1f5 Mon Sep 17 00:00:00 2001 +From: snir sheriber +Date: Sun, 26 Feb 2017 12:09:18 +0200 +Subject: [PATCH spice-gtk 8/8] authentication: Handle failed spice + authentication +To: spice-devel@lists.freedesktop.org + +Changing the name of the failures handling function (spice +and sasl authentication failures are now treated separately) +and display more suitable spice authentication failure error +message. + +Resolves: rhbz#1365736 +(cherry picked from commit 34be2a39949ebdffd7fdce4a9e6f3ddf1225b86b) +--- + src/spice-channel.c | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/src/spice-channel.c b/src/spice-channel.c +index 020606b..854fff6 100644 +--- a/src/spice-channel.c ++++ b/src/spice-channel.c +@@ -1130,8 +1130,8 @@ static void spice_channel_failed_sasl_authentication(SpiceChannel *channel) + #endif + + /* coroutine context */ +-static void spice_channel_failed_authentication(SpiceChannel *channel, +- gboolean invalidPassword) ++static void spice_channel_failed_spice_authentication(SpiceChannel *channel, ++ gboolean invalidPassword) + { + SpiceChannelPrivate *c = channel->priv; + +@@ -1144,7 +1144,7 @@ static void spice_channel_failed_authentication(SpiceChannel *channel, + g_set_error_literal(&c->error, + SPICE_CLIENT_ERROR, + SPICE_CLIENT_ERROR_AUTH_NEEDS_PASSWORD, +- _("Authentication failed: password is required")); ++ _("Authentication failed: wrong password ?")); + + c->event = SPICE_CHANNEL_ERROR_AUTH; + +@@ -1183,7 +1183,7 @@ static SpiceChannelEvent spice_channel_send_spice_ticket(SpiceChannel *channel) + if (password == NULL) + password = g_strdup(""); + if (strlen(password) > SPICE_MAX_PASSWORD_LENGTH) { +- spice_channel_failed_authentication(channel, TRUE); ++ spice_channel_failed_spice_authentication(channel, TRUE); + ret = SPICE_CHANNEL_ERROR_AUTH; + goto cleanup; + } +@@ -1219,7 +1219,7 @@ static gboolean spice_channel_recv_auth(SpiceChannel *channel) + + if (link_res != SPICE_LINK_ERR_OK) { + CHANNEL_DEBUG(channel, "link result: reply %u", link_res); +- spice_channel_failed_authentication(channel, FALSE); ++ spice_channel_failed_spice_authentication(channel, FALSE); + return FALSE; + } + +-- +2.12.1 + diff --git a/SOURCES/0009-file-xfer-do-not-send-unnecessary-0-bytes-messages.patch b/SOURCES/0009-file-xfer-do-not-send-unnecessary-0-bytes-messages.patch new file mode 100644 index 0000000..1729fd8 --- /dev/null +++ b/SOURCES/0009-file-xfer-do-not-send-unnecessary-0-bytes-messages.patch @@ -0,0 +1,40 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Victor Toso +Date: Fri, 11 Nov 2016 14:19:53 +0100 +Subject: [PATCH] file-xfer: do not send unnecessary 0 bytes messages + +This fixes the situation when VDAgent receives 0 byte message +regarding a file-transfer operation that was terminated in the +previous message. + +This makes the VDAgent to send a STATUS_ERROR after STATUS_SUCCESS to +client. + +Resolves: https://bugs.freedesktop.org/show_bug.cgi?id=97227 + +Signed-off-by: Victor Toso +Acked-by: Jonathon Jongsma +(cherry picked from commit 885229393e3198bd4b386cf71a51832439dfb31b) +--- + src/channel-main.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/src/channel-main.c b/src/channel-main.c +index 990a06a..72ca712 100644 +--- a/src/channel-main.c ++++ b/src/channel-main.c +@@ -1822,6 +1822,14 @@ static void file_xfer_read_async_cb(GObject *source_object, + return; + } + ++ if (count == 0 && spice_file_transfer_task_get_total_bytes(xfer_task) > 0) { ++ /* If we have sent all payload to the agent, we should not send 0 bytes ++ * as it will cause https://bugs.freedesktop.org/show_bug.cgi?id=97227. ++ * Only when file has 0 bytes of size is when we should send 0 bytes to ++ * agent, see: https://bugzilla.redhat.com/show_bug.cgi?id=1135099 */ ++ return; ++ } ++ + file_xfer_queue_msg_to_agent(channel, spice_file_transfer_task_get_id(xfer_task), buffer, count); + if (count == 0 || spice_file_transfer_task_is_completed(xfer_task)) { + /* on EOF just wait for VD_AGENT_FILE_XFER_STATUS from agent diff --git a/SOURCES/0010-file-xfer-avoid-g_hash_table_iter_-when-changing-the.patch b/SOURCES/0010-file-xfer-avoid-g_hash_table_iter_-when-changing-the.patch new file mode 100644 index 0000000..7e65a1a --- /dev/null +++ b/SOURCES/0010-file-xfer-avoid-g_hash_table_iter_-when-changing-the.patch @@ -0,0 +1,71 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Victor Toso +Date: Wed, 8 Feb 2017 09:59:51 +0100 +Subject: [PATCH] file-xfer: avoid g_hash_table_iter_* when changing the + GHashTable + +Using g_hash_table_iter_init() and g_hash_table_iter_next() here is +bad as spice_file_transfer_task_completed() will emit "finished" +signal from SpiceFileTransferTask resulting in the original GHashTable +to be changed in file_transfer_operation_task_finished() + +Debug will show: + GSpice-DEBUG: spice-file-transfer-task.c:303 File bigfile2 xfer + failed: Agent connection closed + + WARNING **: Agent connection closed + + GLib-CRITICAL **: g_hash_table_iter_next: assertion 'ri->version == + ri->hash_table->version' failed + +Reported-by: Pavel Grunt +Signed-off-by: Victor Toso +Acked-by: Pavel Grunt +(cherry picked from commit 01bb9bb30517b0ea3bdb230d40b2835c53a9cf59) +--- + src/channel-main.c | 19 ++++++++++++------- + 1 file changed, 12 insertions(+), 7 deletions(-) + +diff --git a/src/channel-main.c b/src/channel-main.c +index 72ca712..0a4435e 100644 +--- a/src/channel-main.c ++++ b/src/channel-main.c +@@ -2915,19 +2915,23 @@ static void file_transfer_operation_free(FileTransferOperation *xfer_op) + + static void spice_main_channel_reset_all_xfer_operations(SpiceMainChannel *channel) + { +- GHashTableIter iter_all_xfer_tasks; +- gpointer key, value; ++ GList *it, *keys; + + /* Mark each of SpiceFileTransferTask as completed due error */ +- g_hash_table_iter_init(&iter_all_xfer_tasks, channel->priv->file_xfer_tasks); +- while (g_hash_table_iter_next(&iter_all_xfer_tasks, &key, &value)) { +- FileTransferOperation *xfer_op = value; +- SpiceFileTransferTask *xfer_task = g_hash_table_lookup(xfer_op->xfer_task, key); ++ keys = g_hash_table_get_keys(channel->priv->file_xfer_tasks); ++ for (it = keys; it != NULL; it = it->next) { ++ FileTransferOperation *xfer_op; ++ SpiceFileTransferTask *xfer_task; + GError *error; + ++ xfer_op = g_hash_table_lookup(channel->priv->file_xfer_tasks, it->data); ++ if (xfer_op == NULL) ++ continue; ++ ++ xfer_task = g_hash_table_lookup(xfer_op->xfer_task, it->data); + if (xfer_task == NULL) { + spice_warning("(reset-all) can't complete task %u - completed already?", +- GPOINTER_TO_UINT(key)); ++ GPOINTER_TO_UINT(it->data)); + continue; + } + +@@ -2935,6 +2939,7 @@ static void spice_main_channel_reset_all_xfer_operations(SpiceMainChannel *chann + "Agent connection closed"); + spice_file_transfer_task_completed(xfer_task, error); + } ++ g_list_free(keys); + } + + static SpiceFileTransferTask *spice_main_channel_find_xfer_task_by_task_id(SpiceMainChannel *channel, diff --git a/SOURCES/0011-Remove-redundant-space-from-error-message.patch b/SOURCES/0011-Remove-redundant-space-from-error-message.patch new file mode 100644 index 0000000..2e21968 --- /dev/null +++ b/SOURCES/0011-Remove-redundant-space-from-error-message.patch @@ -0,0 +1,29 @@ +From f85c6387ff74bdb805fbb3a23b2af7dd087a982c Mon Sep 17 00:00:00 2001 +From: snir sheriber +Date: Tue, 25 Apr 2017 16:24:25 +0300 +Subject: [PATCH 11/13] Remove redundant space from error message + +Resolves: rhbz#1365736 + +Acked-by: Victor Toso +(cherry picked from commit 366344f37bc756137b0c5009135088f4bf562b04) +--- + src/spice-channel.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/spice-channel.c b/src/spice-channel.c +index 854fff6..df66386 100644 +--- a/src/spice-channel.c ++++ b/src/spice-channel.c +@@ -1144,7 +1144,7 @@ static void spice_channel_failed_spice_authentication(SpiceChannel *channel, + g_set_error_literal(&c->error, + SPICE_CLIENT_ERROR, + SPICE_CLIENT_ERROR_AUTH_NEEDS_PASSWORD, +- _("Authentication failed: wrong password ?")); ++ _("Authentication failed: wrong password?")); + + c->event = SPICE_CHANNEL_ERROR_AUTH; + +-- +2.12.2 + diff --git a/SOURCES/0012-audio-debug-audio-codec-when-audio-stream-starts.patch b/SOURCES/0012-audio-debug-audio-codec-when-audio-stream-starts.patch new file mode 100644 index 0000000..736b013 --- /dev/null +++ b/SOURCES/0012-audio-debug-audio-codec-when-audio-stream-starts.patch @@ -0,0 +1,92 @@ +From a279657cabec5af3a0d58cb63dbd039b13fe563f Mon Sep 17 00:00:00 2001 +From: Victor Toso +Date: Tue, 28 Mar 2017 13:45:16 +0200 +Subject: [PATCH 12/13] audio: debug audio codec when audio stream starts +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +We already debug a few parameters but the audio codec is missing. + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1436249 +Signed-off-by: Victor Toso +Acked-by: Marc-André Lureau +(cherry picked from commit 7721d0906d55cfaa6ce8f5786829c5c738adf74c) +--- + src/channel-playback.c | 5 +++-- + src/channel-record.c | 5 +++-- + src/spice-session-priv.h | 1 + + src/spice-session.c | 13 +++++++++++++ + 4 files changed, 20 insertions(+), 4 deletions(-) + +diff --git a/src/channel-playback.c b/src/channel-playback.c +index 39c2178..ca14b96 100644 +--- a/src/channel-playback.c ++++ b/src/channel-playback.c +@@ -367,8 +367,9 @@ static void playback_handle_start(SpiceChannel *channel, SpiceMsgIn *in) + SpicePlaybackChannelPrivate *c = SPICE_PLAYBACK_CHANNEL(channel)->priv; + SpiceMsgPlaybackStart *start = spice_msg_in_parsed(in); + +- CHANNEL_DEBUG(channel, "%s: fmt %u channels %u freq %u time %u", __FUNCTION__, +- start->format, start->channels, start->frequency, start->time); ++ CHANNEL_DEBUG(channel, "%s: fmt %u channels %u freq %u time %u mode %s", __FUNCTION__, ++ start->format, start->channels, start->frequency, start->time, ++ spice_audio_data_mode_to_string(c->mode)); + + c->frame_count = 0; + c->last_time = start->time; +diff --git a/src/channel-record.c b/src/channel-record.c +index c1d9afa..9834e85 100644 +--- a/src/channel-record.c ++++ b/src/channel-record.c +@@ -405,8 +405,9 @@ static void record_handle_start(SpiceChannel *channel, SpiceMsgIn *in) + + c->mode = spice_record_desired_mode(channel, start->frequency); + +- CHANNEL_DEBUG(channel, "%s: fmt %u channels %u freq %u", __FUNCTION__, +- start->format, start->channels, start->frequency); ++ CHANNEL_DEBUG(channel, "%s: fmt %u channels %u freq %u mode %s", __FUNCTION__, ++ start->format, start->channels, start->frequency, ++ spice_audio_data_mode_to_string(c->mode)); + + g_return_if_fail(start->format == SPICE_AUDIO_FMT_S16); + +diff --git a/src/spice-session-priv.h b/src/spice-session-priv.h +index 049973a..03005aa 100644 +--- a/src/spice-session-priv.h ++++ b/src/spice-session-priv.h +@@ -99,6 +99,7 @@ guint spice_session_get_n_display_channels(SpiceSession *session); + void spice_session_set_main_channel(SpiceSession *session, SpiceChannel *channel); + gboolean spice_session_set_migration_session(SpiceSession *session, SpiceSession *mig_session); + SpiceAudio *spice_audio_get(SpiceSession *session, GMainContext *context); ++const gchar* spice_audio_data_mode_to_string(gint mode); + G_END_DECLS + + #endif /* __SPICE_CLIENT_SESSION_PRIV_H__ */ +diff --git a/src/spice-session.c b/src/spice-session.c +index 3f450d9..a972002 100644 +--- a/src/spice-session.c ++++ b/src/spice-session.c +@@ -2602,6 +2602,19 @@ void spice_session_set_shared_dir(SpiceSession *session, const gchar *dir) + s->shared_dir = g_strdup(dir); + } + ++G_GNUC_INTERNAL ++const gchar* spice_audio_data_mode_to_string(gint mode) ++{ ++ static const char *str[] = { ++ [ SPICE_AUDIO_DATA_MODE_INVALID ] = "invalid", ++ [ SPICE_AUDIO_DATA_MODE_RAW ] = "raw", ++ [ SPICE_AUDIO_DATA_MODE_CELT_0_5_1 ] = "celt", ++ [ SPICE_AUDIO_DATA_MODE_OPUS ] = "opus", ++ }; ++ return (mode >= 0 && mode < G_N_ELEMENTS(str)) ? str[mode] : "unknown audio codec"; ++} ++ ++ + /** + * spice_session_get_proxy_uri: + * @session: a #SpiceSession +-- +2.12.2 + diff --git a/SOURCES/0013-file-xfer-Fix-bad-filename-encoding.patch b/SOURCES/0013-file-xfer-Fix-bad-filename-encoding.patch new file mode 100644 index 0000000..9a16096 --- /dev/null +++ b/SOURCES/0013-file-xfer-Fix-bad-filename-encoding.patch @@ -0,0 +1,69 @@ +From bfd5040f4a082441c143c128d13063d28ddc1e32 Mon Sep 17 00:00:00 2001 +From: Victor Toso +Date: Thu, 13 Apr 2017 14:32:55 +0200 +Subject: [PATCH 13/13] file-xfer: Fix bad filename encoding +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Manual for G_FILE_ATTRIBUTE_STANDARD_NAME states: + > The name is the on-disk filename which may not be in any known + > encoding, and can thus not be generally displayed as is. + +Considering a file named "ěščřžýáíé", if we use +G_FILE_ATTRIBUTE_STANDARD_NAME to get the file name, we will have the +following 72 bytes long string: +"\xc4\x9b\xc5\xa1\xc4\x8d\xc5\x99\xc5\xbe\xc3\xbd\xc3\xa1\xc3\xad\xc3\xa9" + +This is a regression introduced at 4647ac9a2a72c98b6841180ccf5f8d + +Possible solutions are: +1) Using G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME attribute; +2) Using g_file_info_get_attribute_byte_string() function; +3) Using the g_file_get_basename() which was used before 4647ac9a2a72c9 + +Using option 2 based on better long term solution. +This give us the correct 18 bytes long utf-8 string to "ěščřžýáíé" + +Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1440206 +Signed-off-by: Victor Toso +Acked-by: Christophe Fergeau +(cherry picked from commit 5b9ad92814e3fc488cca8cba41b6af0caa390e1b) +--- + src/channel-main.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/channel-main.c b/src/channel-main.c +index 990a06a..b0878dd 100644 +--- a/src/channel-main.c ++++ b/src/channel-main.c +@@ -2822,7 +2822,8 @@ static void file_xfer_init_task_async_cb(GObject *obj, GAsyncResult *res, gpoint + GFileInfo *info; + SpiceFileTransferTask *xfer_task; + SpiceMainChannel *channel; +- gchar *string, *basename; ++ gchar *string; ++ const gchar *basename; + GKeyFile *keyfile; + VDAgentFileXferStartMessage msg; + guint64 file_size; +@@ -2837,7 +2838,7 @@ static void file_xfer_init_task_async_cb(GObject *obj, GAsyncResult *res, gpoint + goto failed; + + channel = spice_file_transfer_task_get_channel(xfer_task); +- basename = g_file_info_get_attribute_as_string(info, G_FILE_ATTRIBUTE_STANDARD_NAME); ++ basename = g_file_info_get_attribute_byte_string(info, G_FILE_ATTRIBUTE_STANDARD_NAME); + file_size = g_file_info_get_attribute_uint64(info, G_FILE_ATTRIBUTE_STANDARD_SIZE); + + xfer_op = data; +@@ -2846,7 +2847,6 @@ static void file_xfer_init_task_async_cb(GObject *obj, GAsyncResult *res, gpoint + keyfile = g_key_file_new(); + g_key_file_set_string(keyfile, "vdagent-file-xfer", "name", basename); + g_key_file_set_uint64(keyfile, "vdagent-file-xfer", "size", file_size); +- g_free(basename); + + /* Save keyfile content to memory. TODO: more file attributions + need to be sent to guest */ +-- +2.12.2 + diff --git a/SOURCES/0014-Revert-Ignore-modifiers-messages-if-no-modifiers-cha.patch b/SOURCES/0014-Revert-Ignore-modifiers-messages-if-no-modifiers-cha.patch new file mode 100644 index 0000000..ebfe275 --- /dev/null +++ b/SOURCES/0014-Revert-Ignore-modifiers-messages-if-no-modifiers-cha.patch @@ -0,0 +1,32 @@ +From fde2665c56db4e28bd0d9fbcfd28959166cdbc19 Mon Sep 17 00:00:00 2001 +From: Pavel Grunt +Date: Mon, 5 Jun 2017 15:22:27 +0200 +Subject: [PATCH spice-gtk] Revert "Ignore modifiers messages if no modifiers + changed" +To: spice-devel@lists.freedesktop.org + +This reverts commit 73cd553fb0fbd213b64d72f8b4289ed8a17fc6c0. +--- + src/channel-inputs.c | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +diff --git a/src/channel-inputs.c b/src/channel-inputs.c +index f79bc38..7572bff 100644 +--- a/src/channel-inputs.c ++++ b/src/channel-inputs.c +@@ -242,10 +242,8 @@ static void inputs_handle_modifiers(SpiceChannel *channel, SpiceMsgIn *in) + SpiceInputsChannelPrivate *c = SPICE_INPUTS_CHANNEL(channel)->priv; + SpiceMsgInputsKeyModifiers *modifiers = spice_msg_in_parsed(in); + +- if (c->modifiers != modifiers->modifiers) { +- c->modifiers = modifiers->modifiers; +- g_coroutine_signal_emit(channel, signals[SPICE_INPUTS_MODIFIERS], 0); +- } ++ c->modifiers = modifiers->modifiers; ++ g_coroutine_signal_emit(channel, signals[SPICE_INPUTS_MODIFIERS], 0); + } + + /* coroutine context */ +-- +2.13.0 + diff --git a/SOURCES/0015-canvas-base-Fix-width-computation-for-palette-images.patch b/SOURCES/0015-canvas-base-Fix-width-computation-for-palette-images.patch new file mode 100644 index 0000000..350839c --- /dev/null +++ b/SOURCES/0015-canvas-base-Fix-width-computation-for-palette-images.patch @@ -0,0 +1,33 @@ +From 3b4759ce15325e2de1b473d619b69ae786c2fcec Mon Sep 17 00:00:00 2001 +From: Frediano Ziglio +Date: Thu, 21 Dec 2017 15:54:04 +0000 +Subject: [PATCH spice-common] canvas-base: Fix width computation for palette + images + +Palette images are encoded with a slightly larger pixel than +width. This cause a wrong calculation of stride_encoded value +which cause a wrong stride adjustment. + +This fix bug https://bugzilla.redhat.com/show_bug.cgi?id=1508847. + +Signed-off-by: Frediano Ziglio +--- + common/canvas_base.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/common/canvas_base.c b/common/canvas_base.c +index a9d7855..2ecd276 100644 +--- a/spice-common/common/canvas_base.c ++++ b/spice-common/common/canvas_base.c +@@ -824,7 +824,7 @@ static pixman_image_t *canvas_get_lz(CanvasBase *canvas, SpiceImage *image, + lz_decode_begin(lz_data->lz, comp_buf, comp_size, &type, + &width, &height, &n_comp_pixels, &top_down, palette); + +- stride_encoded = width; ++ stride_encoded = n_comp_pixels / height; + switch (type) { + case LZ_IMAGE_TYPE_RGBA: + as_type = LZ_IMAGE_TYPE_RGBA; +-- +2.14.3 + diff --git a/SOURCES/1000-gtk-Makefile.am-add-PIE-flags-to-libspice-client-gli.patch b/SOURCES/1000-gtk-Makefile.am-add-PIE-flags-to-libspice-client-gli.patch new file mode 100644 index 0000000..1686db8 --- /dev/null +++ b/SOURCES/1000-gtk-Makefile.am-add-PIE-flags-to-libspice-client-gli.patch @@ -0,0 +1,122 @@ +From 9788af437a99cb2600aeae6e313a43efb2ceb466 Mon Sep 17 00:00:00 2001 +From: Alon Levy +Date: Wed, 6 May 2015 09:04:02 -0400 +Subject: [PATCH] gtk/Makefile.am: add PIE flags to libspice-client-glib + +Also to gtk and controller lib + +Signed-off-by: Pavel Grunt +--- + src/Makefile.am | 7 +++++++ + src/Makefile.in | 7 +++++++ + src/controller/Makefile.am | 2 ++ + src/controller/Makefile.in | 2 ++ + 4 files changed, 18 insertions(+) + +diff --git a/src/Makefile.am b/src/Makefile.am +index 78953dd..688a7e8 100644 +--- a/src/Makefile.am ++++ b/src/Makefile.am +@@ -115,6 +115,7 @@ SPICE_GTK_LDFLAGS_COMMON = \ + -version-info 5:0:0 \ + -no-undefined \ + $(GTK_SYMBOLS_LDFLAGS) \ ++ $(PIE_LDFLAGS) \ + $(NULL) + + SPICE_GTK_LIBADD_COMMON = \ +@@ -161,6 +162,7 @@ endif + if WITH_GTK + EXTRA_libspice_client_gtk_3_0_la_DEPENDENCIES = $(GTK_SYMBOLS_FILE) + libspice_client_gtk_3_0_la_LDFLAGS = $(SPICE_GTK_LDFLAGS_COMMON) ++libspice_client_gtk_3_0_la_CPPFLAGS = $(PIE_CFLAGS) + libspice_client_gtk_3_0_la_LIBADD = $(SPICE_GTK_LIBADD_COMMON) + libspice_client_gtk_3_0_la_SOURCES = $(SPICE_GTK_SOURCES_COMMON) + nodist_libspice_client_gtk_3_0_la_SOURCES = $(nodist_SPICE_GTK_SOURCES_COMMON) +@@ -185,6 +187,11 @@ libspice_client_glib_2_0_la_LDFLAGS = \ + -version-info 14:0:6 \ + -no-undefined \ + $(GLIB_SYMBOLS_LDFLAGS) \ ++ $(PIE_LDFLAGS) \ ++ $(NULL) ++ ++libspice_client_glib_2_0_la_CPPFLAGS = \ ++ $(PIE_CFLAGS) \ + $(NULL) + + libspice_client_glib_2_0_la_LIBADD = \ +diff --git a/src/Makefile.in b/src/Makefile.in +index 2ea0804..a5e3a37 100644 +--- a/src/Makefile.in ++++ b/src/Makefile.in +@@ -790,6 +790,7 @@ SPICE_GTK_LDFLAGS_COMMON = \ + -version-info 5:0:0 \ + -no-undefined \ + $(GTK_SYMBOLS_LDFLAGS) \ ++ $(PIE_LDFLAGS) \ + $(NULL) + + SPICE_GTK_LIBADD_COMMON = \ +@@ -815,6 +816,7 @@ nodist_SPICE_GTK_SOURCES_COMMON = \ + + @WITH_GTK_TRUE@EXTRA_libspice_client_gtk_3_0_la_DEPENDENCIES = $(GTK_SYMBOLS_FILE) + @WITH_GTK_TRUE@libspice_client_gtk_3_0_la_LDFLAGS = $(SPICE_GTK_LDFLAGS_COMMON) ++@WITH_GTK_TRUE@libspice_client_gtk_3_0_la_CPPFLAGS = $(PIE_CFLAGS) + @WITH_GTK_TRUE@libspice_client_gtk_3_0_la_LIBADD = $(SPICE_GTK_LIBADD_COMMON) + @WITH_GTK_TRUE@libspice_client_gtk_3_0_la_SOURCES = $(SPICE_GTK_SOURCES_COMMON) + @WITH_GTK_TRUE@nodist_libspice_client_gtk_3_0_la_SOURCES = $(nodist_SPICE_GTK_SOURCES_COMMON) +@@ -836,6 +838,11 @@ libspice_client_glib_2_0_la_LDFLAGS = \ + -version-info 14:0:6 \ + -no-undefined \ + $(GLIB_SYMBOLS_LDFLAGS) \ ++ $(PIE_LDFLAGS) \ ++ $(NULL) ++ ++libspice_client_glib_2_0_la_CPPFLAGS = \ ++ $(PIE_CFLAGS) \ + $(NULL) + + libspice_client_glib_2_0_la_LIBADD = \ +diff --git a/src/controller/Makefile.am b/src/controller/Makefile.am +index fb56986..71dd2bd 100644 +--- a/src/controller/Makefile.am ++++ b/src/controller/Makefile.am +@@ -4,6 +4,7 @@ AM_CPPFLAGS = \ + -DG_LOG_DOMAIN=\"GSpiceController\" \ + $(GIO_CFLAGS) \ + $(COMMON_CFLAGS) \ ++ $(PIE_CFLAGS) \ + -Wno-deprecated-declarations \ + $(NULL) + +@@ -11,6 +12,7 @@ AM_CPPFLAGS = \ + AM_LDFLAGS = \ + -no-undefined \ + $(GIO_LIBS) \ ++ $(PIE_LDFLAGS) \ + $(NULL) + + AM_VALAFLAGS = \ +diff --git a/src/controller/Makefile.in b/src/controller/Makefile.in +index 03e67a4..32c1d44 100644 +--- a/src/controller/Makefile.in ++++ b/src/controller/Makefile.in +@@ -495,6 +495,7 @@ AM_CPPFLAGS = \ + -DG_LOG_DOMAIN=\"GSpiceController\" \ + $(GIO_CFLAGS) \ + $(COMMON_CFLAGS) \ ++ $(PIE_CFLAGS) \ + -Wno-deprecated-declarations \ + $(NULL) + +@@ -503,6 +504,7 @@ AM_CPPFLAGS = \ + AM_LDFLAGS = \ + -no-undefined \ + $(GIO_LIBS) \ ++ $(PIE_LDFLAGS) \ + $(NULL) + + AM_VALAFLAGS = \ +-- +2.13.0 + diff --git a/SPECS/spice-gtk.spec b/SPECS/spice-gtk.spec new file mode 100644 index 0000000..0325997 --- /dev/null +++ b/SPECS/spice-gtk.spec @@ -0,0 +1,586 @@ +# we don't want to provide private python extension libs +%{?filter_setup: +%filter_provides_in %{python_sitearch}/.*\.so$ +%filter_setup +} + +%global _hardened_build 1 + +#define _version_suffix + +Name: spice-gtk +Version: 0.33 +Release: 6%{?dist}.1 +Summary: A GTK+ widget for SPICE clients + +Group: System Environment/Libraries +License: LGPLv2+ +URL: https://www.spice-space.org/ +#VCS: git:git://anongit.freedesktop.org/spice/spice-gtk +Source0: https://www.spice-space.org/download/gtk/%{name}-%{version}%{?_version_suffix}.tar.bz2 + +Patch0001: 0001-clipboard-Fix-crash-by-handling-error.patch +Patch0002: 0002-channel-usbredir-Fix-crash-on-channel-up.patch +Patch0003: 0003-gtk-session-Use-GWeakRef.patch +Patch0004: 0004-gtk-session-always-reply-to-agent-s-clipboard-reques.patch +Patch0005: 0005-usb-Allow-to-compile-if-LZ4-is-disabled.patch +Patch0006: 0006-widget-Always-call-gtk_widget_show_all.patch +Patch0007: 0007-authentication-Handle-failed-SASL-authentication-sep.patch +Patch0008: 0008-authentication-Handle-failed-spice-authentication.patch +Patch0009: 0009-file-xfer-do-not-send-unnecessary-0-bytes-messages.patch +Patch0010: 0010-file-xfer-avoid-g_hash_table_iter_-when-changing-the.patch +Patch0011: 0011-Remove-redundant-space-from-error-message.patch +Patch0012: 0012-audio-debug-audio-codec-when-audio-stream-starts.patch +Patch0013: 0013-file-xfer-Fix-bad-filename-encoding.patch +Patch0014: 0014-Revert-Ignore-modifiers-messages-if-no-modifiers-cha.patch +Patch0015: 0015-canvas-base-Fix-width-computation-for-palette-images.patch +Patch1000: 1000-gtk-Makefile.am-add-PIE-flags-to-libspice-client-gli.patch + +BuildRequires: intltool +BuildRequires: usbredir-devel >= 0.6-8 +BuildRequires: libusb1-devel >= 1.0.9 +BuildRequires: libgudev1-devel +BuildRequires: pixman-devel openssl-devel libjpeg-turbo-devel +BuildRequires: celt051-devel pulseaudio-libs-devel +BuildRequires: zlib-devel +BuildRequires: cyrus-sasl-devel +BuildRequires: libcacard-devel +BuildRequires: gobject-introspection-devel +BuildRequires: dbus-glib-devel +BuildRequires: libacl-devel +BuildRequires: polkit-devel +BuildRequires: gtk-doc +BuildRequires: vala-tools +BuildRequires: usbutils +BuildRequires: libepoxy-devel +BuildRequires: gtk3-devel +BuildRequires: gstreamer1-devel gstreamer1-plugins-base-devel +# keep me to get gendeps magic happen +BuildRequires: spice-protocol >= 0.12.12-1 +# Hack because of bz #613466 +BuildRequires: libtool +Requires: spice-glib%{?_isa} = %{version}-%{release} + + +%description +Client libraries for SPICE desktop servers. + +%package -n spice-glib +Summary: A GObject for communicating with Spice servers +Group: Development/Libraries +Requires: usbredir >= 0.6-8 + +%description -n spice-glib +spice-client-glib-2.0 is a SPICE client library for GLib2. + +%package -n spice-glib-devel +Summary: Development files to build Glib2 applications with spice-glib-2.0 +Group: Development/Libraries +Requires: spice-glib%{?_isa} = %{version}-%{release} +Requires: pkgconfig +Requires: glib2-devel +Obsoletes: spice-gtk-python < 0.32 + +%description -n spice-glib-devel +spice-client-glib-2.0 is a SPICE client library for GLib2. + +Libraries, includes, etc. to compile with the spice-glib-2.0 libraries + +%package -n spice-gtk3 +Summary: A GTK3 widget for SPICE clients +Group: Development/Libraries +Requires: spice-glib%{?_isa} = %{version}-%{release} +Obsoletes: spice-gtk < 0.32 + +%description -n spice-gtk3 +spice-client-glib-3.0 is a SPICE client library for Gtk3. + +%package -n spice-gtk3-devel +Summary: Development files to build GTK3 applications with spice-gtk-3.0 +Group: Development/Libraries +Requires: spice-gtk3%{?_isa} = %{version}-%{release} +Requires: spice-glib-devel%{?_isa} = %{version}-%{release} +Requires: pkgconfig +Requires: gtk3-devel +Obsoletes: spice-gtk-devel < 0.32 + +%description -n spice-gtk3-devel +spice-client-gtk-3.0 provides a SPICE viewer widget for GTK3. + +Libraries, includes, etc. to compile with the spice-gtk3 libraries + +%package -n spice-gtk3-vala +Summary: Vala bindings for the spice-gtk-3.0 library +Group: Development/Libraries +Requires: spice-gtk3%{?_isa} = %{version}-%{release} +Requires: spice-gtk3-devel%{?_isa} = %{version}-%{release} + +%description -n spice-gtk3-vala +A module allowing use of the spice-gtk-3.0 widget from vala + +%package tools +Summary: Spice-gtk tools +Group: Applications/Internet +Requires: spice-gtk3%{?_isa} = %{version}-%{release} +Requires: spice-glib = %{version}-%{release} + +%description tools +Simple clients for interacting with SPICE servers. +spicy is a client to a SPICE desktop server. +spicy-screenshot is a tool to capture screen-shots of a SPICE desktop. + + +%prep +%setup -q -n spice-gtk-%{version}%{?_version_suffix} + +%patch0001 -p1 +%patch0002 -p1 +%patch0003 -p1 +%patch0004 -p1 +%patch0005 -p1 +%patch0006 -p1 +%patch0007 -p1 +%patch0008 -p1 +%patch0009 -p1 +%patch0010 -p1 +%patch0011 -p1 +%patch0012 -p1 +%patch0013 -p1 +%patch0014 -p1 +%patch0015 -p1 +%patch1000 -p1 +find . -name '*.stamp' | xargs touch + + +%build +%configure \ + --with-gtk=3.0 \ + --enable-vala \ + --with-usb-acl-helper-dir=%{_libexecdir}/spice-gtk-%{_arch}/ \ + --disable-werror +make %{?_smp_mflags} + + +%install +make install DESTDIR=%{buildroot} + +rm -f %{buildroot}%{_libdir}/*.a +rm -f %{buildroot}%{_libdir}/*.la + + +%find_lang %{name} + +%post -p /sbin/ldconfig +%postun -p /sbin/ldconfig + +%post -n spice-glib -p /sbin/ldconfig +%postun -n spice-glib -p /sbin/ldconfig + +%post -n spice-gtk3 -p /sbin/ldconfig +%postun -n spice-gtk3 -p /sbin/ldconfig + + +%files -n spice-glib -f %{name}.lang +%{_libdir}/libspice-client-glib-2.0.so.* +%{_libdir}/libspice-controller.so.* +%{_libdir}/girepository-1.0/SpiceClientGLib-2.0.typelib +%dir %{_libexecdir}/spice-gtk-%{_arch}/ +%attr(4755, root, root) %{_libexecdir}/spice-gtk-%{_arch}/spice-client-glib-usb-acl-helper +%{_datadir}/polkit-1/actions/org.spice-space.lowlevelusbaccess.policy + +%files -n spice-glib-devel +%{_libdir}/libspice-client-glib-2.0.so +%{_libdir}/libspice-controller.so +%{_includedir}/spice-client-glib-2.0 +%{_includedir}/spice-controller +%{_libdir}/pkgconfig/spice-client-glib-2.0.pc +%{_libdir}/pkgconfig/spice-controller.pc +%{_datadir}/gir-1.0/SpiceClientGLib-2.0.gir +%{_datadir}/vala/vapi/spice-protocol.vapi +%doc %{_datadir}/gtk-doc/html/* + +%files -n spice-gtk3 +%doc AUTHORS +%doc COPYING +%doc README +%doc NEWS +%{_mandir}/man1/spice-client.1* +%{_libdir}/libspice-client-gtk-3.0.so.* +%{_libdir}/girepository-1.0/SpiceClientGtk-3.0.typelib + +%files -n spice-gtk3-devel +%{_libdir}/libspice-client-gtk-3.0.so +%{_includedir}/spice-client-gtk-3.0 +%{_libdir}/pkgconfig/spice-client-gtk-3.0.pc +%{_datadir}/gir-1.0/SpiceClientGtk-3.0.gir + +%files -n spice-gtk3-vala +%{_datadir}/vala/vapi/spice-client-glib-2.0.deps +%{_datadir}/vala/vapi/spice-client-glib-2.0.vapi +%{_datadir}/vala/vapi/spice-client-gtk-3.0.deps +%{_datadir}/vala/vapi/spice-client-gtk-3.0.vapi + +%files tools +%{_bindir}/spicy +%{_bindir}/spicy-screenshot +%{_bindir}/spicy-stats + +%changelog +* Thu Dec 21 2017 Frediano Ziglio - 0.33-6.1 +- Fix stride misalignment + Resolves: rhbz#1532212 + +* Wed Jun 7 2017 Pavel Grunt - 0.33-6 +- Fix capslock regression + Resolves: rhbz#1458730 + +* Thu May 25 2017 Pavel Grunt - 0.33-5 +- Enable hardened build flags + Resolves: rhbz#1420778 + +* Wed May 10 2017 Pavel Grunt - 0.33-4 +- Make connection error message more clear + Resolves: rhbz#1365736 +- Improve audio debug + Resolves: rhbz#1436249 +- Fix wrong encoding of transferred files + Resolves: rhbz#1440206 + +* Tue Apr 11 2017 Victor Toso - 0.33-3 +- Avoid CRITICALs on copy-paste + Resolves: rhbz#1440096 +- Avoid assertions on file-xfer while agent disconnects + Related: rhbz#1440096 + +* Mon Mar 27 2017 Pavel Grunt - 0.33-2 +- Add missing patch for rebase + Resolves: rhbz#1402474 +- Add obsoletes to the spec file to ease updates + Resolves: rhbz#1432776 +- Fix black screen in virt-manager + Resolves: rhbz#1433242 +- Make connection error message more clear + Resolves: rhbz#1365736 + +* Mon Mar 13 2017 Pavel Grunt - 0.33-1 +- Rebase to 0.33 + Resolves: rhbz#1402474 +- Rebuilt with correct hardening flags due to bug 1387475 + Resolves: rhbz#1420778 +- Fix copy paste issues + Resolve: rhbz#1409854 + +* Mon Dec 12 2016 Pavel Grunt - 0.31-8 +- Fix crash in spicy-stats + Resolves: rhbz#1403820 + +* Fri Dec 9 2016 Pavel Grunt - 0.31-7 +- Avoid crash on clipboard due failure in text conversion + Resolves: rhbz#1385225 + +* Fri Sep 9 2016 Pavel Grunt - 0.31-6 +- Improve clipboard handling for motif applications + Resolves: rhbz#1348624 + +* Wed Aug 3 2016 Pavel Grunt - 0.31-5 +- Allow to connect to ipv6 without proxy + Resolves: rhbz#1361478 +- Silence a critical when migrating + Resolves: rhbz#1356162 +- Disable EPOXY / EGL usage + Resolves: rhbz#1362460 + +* Fri Jul 1 2016 Pavel Grunt - 0.31-4 +- Fix SASL GSSAPI (kerberos authentication) + Resolves: rhbz#1343361 +- Allow to connect to ipv6 behind proxy + Resolves: rhbz#1331777 + +* Wed Jun 8 2016 Victor Toso - 0.31-3 +- Fix client's crash when agent is killed + Resolves: rhbz#1336321 +- Parse ipv6 address + Resolves: rhbz#1335239 +- Improving parsing of Smartcard messages + Resolves: rhbz#1338727 +- Fix hangs with "Connected to graphic server" + Resolves: rhbz#1323092 + +* Mon May 2 2016 Pavel Grunt - 0.31-2 +- Rebase to 0.31, add back the PIE/relro patch. + Resolves: rhbz#1329973 + +* Mon May 2 2016 Pavel Grunt - 0.31-1 +- Rebase to 0.31 + Resolves: rhbz#1329973 +- Fix crash when migration fails + Resolves: rhbz#1318574 + +* Mon Apr 18 2016 Pavel Grunt - 0.26-8 +- Check runtime usbredir version + Resolves: rhbz#1320827 +- Allow connection to password protected guests + Resolves: rhbz#1320806 +- Fix runtime warnings related to shared folders and usb redirection + Resolves: rhbz#1319405 +- Change runtime warning for empty monitor config to debug message + Resolves: rhbz#1319405 +- Fix 16 bpp LZ image decompression + Resolves: rhbz#1285469 + +* Fri Mar 18 2016 Pavel Grunt - 0.26-7 +- Improve message for number of usb channels in usb device widget + Resolves: rhbz#1299931 +- Fix usbredir leak when redirecting a webcam + Resolves: rhbz#1270363 + +* Thu Mar 17 2016 Victor Toso - 0.26-6 +- Implements volume-sync from guest to client + Resolves: rhbz#1264105 +- Avoid crash in virt-manager + Resolves: rhbz#1301863 +- Fix focus in fullscreen mode + Resolves: rhbz#1275231 +- Add Client capability for Windows monitor_config message + Resolves: rhbz#1248189 +- Fix error message for file transfer + Resolves: rhbz#1265562 + +* Mon Aug 31 2015 Fabiano Fidêncio - 0.26-5 +- Connecting to VM changes its resolution + Resolves: rhbz#1242602 +- Cannot enable display 1 when it was disabled in previous session + Resolves: rhbz#1247907 +- Windows needs to send complete monitors_config message to client + Resolves: rhbz#1244878 +- High Resolution Multi-Monitor Windows Guest freeze + Resolves: rhbz#1235442 +- Print file transfer summary to the log + Resolves: rhbz#1140512 +- Enable proxy when requested + Related: rhbz#1182252 + +* Thu Jul 9 2015 Fabiano Fidêncio - 0.26-4 +- Disable default socket proxy + Resolves: rhbz#1182252 + +* Wed May 6 2015 Marc-Andre Lureau - 0.26-3 +- Rebase to 0.26, fix the PIE/relro patch. + Resolves: rhbz#1214101 + +* Wed May 6 2015 Marc-Andre Lureau - 0.26-2 +- Rebase to 0.26, add back the PIE/relro patch. + Resolves: rhbz#1214101 + +* Tue May 5 2015 Marc-Andre Lureau - 0.26-1 +- Rebase to 0.26 + Resolves: rhbz#1214101 +- Allow to transfer multiple files at once + Resolves: rhbz#1167829 +- Fix smartcard cannot work after restart guest + Resolves: rhbz#1205548 + +* Fri Sep 12 2014 Jonathon Jongsma - 0.22-2 +- Additional display pop out when restarting service spice-vdagentd in guest + Resolves: rhbz#1043782 +- Coverity scan fixes + Resolves: rhbz#885719 +- Send data message for file copy of 0 size + Resolves: rhbz#1135104 +- add spice_channel_get_error() + Resolves: rhbz#1116048 +- Prefix proxy lookup errors + Resolves: rhbz#1116048 + +* Mon Jul 7 2014 Marc-Andre Lureau - 0.22-1 +- Rebase to 0.22 + Resolves: rhbz#1109397 +- Fix screenshot of secondary displays + Resolves: rhbz#1029761 +- Fix potential crash when freeing primary surface. + Resolves: rhbz#1082555 +- Add RHEL-only SPICE_NOSCALE to disable display scaling. + Resolves: rhbz#1067346 +- Fix connection to RHEL5 Spice server + Resolves: rhbz#1017862 +- Fix coroutine leak + Resolves: rhbz#1007841 +- Fix clipboard hang on clipboard loop + Resolves: rhbz#1073364 + +* Fri Jan 24 2014 Daniel Mach - 0.20-8 +- Mass rebuild 2014-01-24 + +* Fri Dec 27 2013 Daniel Mach - 0.20-7 +- Mass rebuild 2013-12-27 + +* Fri Sep 13 2013 Christophe Fergeau 0.20-6 +- Add patch for CVE-2013-4324 + +* Fri Sep 13 2013 Hans de Goede - 0.20-5 +- Fix the spice-client-glib-usb-acl-helper no longer being suid root + +* Fri Sep 13 2013 Christophe Fergeau 0.20-4 +- Add misc upstream patches fixing various 0.20 bugs + +* Wed Aug 28 2013 Alon Levy - 0.20-3 +- Fix wrong mono cursor local rendering (rhbz#998529) + +* Sun Aug 04 2013 Fedora Release Engineering - 0.20-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Sat Jul 6 2013 Marc-André Lureau - 0.20-2 +- Fix spice_channel_string_to_type symbol visibility (rhbz#981815) + +* Wed Jun 26 2013 Marc-André Lureau - 0.20-1 +- Update to spice-gtk 0.20 + +* Fri Apr 19 2013 Daniel Mach - 0.19-1.1 +- Rebuild for cyrus-sasl + +* Thu Apr 11 2013 Marc-André Lureau - 0.19-1 +- Update to spice-gtk 0.19 + +* Thu Mar 14 2013 Hans de Goede - 0.18-2 +- Fix "Warning no automount-inhibiting implementation available" warnings + +* Wed Feb 13 2013 Marc-André Lureau - 0.18-1 +- Update to spice-gtk 0.18 + +* Wed Feb 6 2013 Marc-André Lureau - 0.17-1 +- Update to spice-gtk 0.17 + +* Thu Jan 31 2013 Marc-André Lureau - 0.16-2 +- Remove perl-text-csv build requirement. (rhbz#873174) + +* Sat Jan 12 2013 Marc-André Lureau - 0.16-1 +- Update to spice-gtk 0.16 + +* Mon Dec 31 2012 Marc-André Lureau - 0.15.3-1 +- Update to spice-gtk 0.15.3, fixes TLS & password regressions + +* Fri Dec 21 2012 Christophe Fergeau - 0.15-2 +- Update to spice-gtk 0.15 + +* Thu Oct 25 2012 Christophe Fergeau - 0.14-2 +- Add various upstream patches + +* Fri Sep 21 2012 Christophe Fergeau - 0.14-1 +- Update to 0.14 release + +* Fri Sep 14 2012 Christophe Fergeau - 0.13.29-4 +- Add patch fixing CVE 2012-4425 + +* Thu Sep 13 2012 Christophe Fergeau - 0.13.29-3 +- Run autoreconf after applying patch 2 as it only modifies Makefile.am + +* Tue Sep 11 2012 Christophe Fergeau - 0.13.29-2 +- Add patch to fix symbol versioning + +* Fri Sep 7 2012 Hans de Goede - 0.13.29-1 +- Update to the spice-gtk 0.13.29 development release +- Rebuild for new usbredir + +* Mon Sep 03 2012 Christophe Fergeau - 0.13-2 +- Update to spice-gtk 0.13 + +* Tue Aug 07 2012 Christophe Fergeau - 0.12.101-1 +- Update to the spice-gtk 0.12.101 development release (needed by Boxes + 3.5.5) + +* Sat Jul 21 2012 Fedora Release Engineering - 0.12-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Tue May 15 2012 Marc-André Lureau - 0.12-4 +- re-Add back spice-protocol BuildRequires to help some deps magic happen + +* Thu May 10 2012 Marc-André Lureau - 0.12-3 +- Fix Spice.Audio constructor Python binding + https://bugzilla.redhat.com/show_bug.cgi?id=820335 + +* Wed May 2 2012 Marc-André Lureau - 0.12-2 +- Fix virt-manager console not showing up, rhbz#818169 + +* Tue Apr 24 2012 Marc-André Lureau - 0.12-1 +- New upstream release 0.12 + +* Tue Apr 10 2012 Christophe Fergeau - 0.11-5 +- Fix build on PPC +- Remove ExclusiveArch. While spice-gtk will build on ARM and PPC, it + hasn't been tested on these arch, so there may be some bugs. + +* Tue Mar 20 2012 Hans de Goede - 0.11-4 +- Add missing BuildRequires: usbutils, so that we get proper USB device + descriptions in the USB device selection menu + +* Wed Mar 14 2012 Hans de Goede - 0.11-3 +- Fix a crash triggered when trying to view a usbredir enabled vm from + virt-manager + +* Mon Mar 12 2012 Hans de Goede - 0.11-2 +- Add back spice-protocol BuildRequires to help some deps magic happen + +* Fri Mar 9 2012 Hans de Goede - 0.11-1 +- New upstream release 0.11 +- Fix multilib conflict in spice-glib + +* Thu Feb 23 2012 Marc-André Lureau - 0.10-1 +- New upstream release 0.10 + +* Mon Jan 30 2012 Hans de Goede - 0.9-1 +- New upstream release 0.9 + +* Mon Jan 16 2012 Hans de Goede - 0.8-1 +- New upstream release 0.8 +- Various small specfile improvements +- Enable vala bindings + +* Sat Jan 14 2012 Fedora Release Engineering - 0.7.39-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Mon Nov 14 2011 Adam Jackson 0.7.39-2 +- Rebuild to break bogus libpng dependency +- Fix summaries for gtk3 subpackages to not talk about gtk2 + +* Fri Sep 2 2011 Hans de Goede - 0.7.39-1 +- Update to git snapshot 0.7.39-ab64, to add usbredir support + +* Tue Jul 26 2011 Marc-André Lureau - 0.7.1-1 +- Upstream version 0.7.1-d5a8 (fix libtool versionning) + +* Tue Jul 19 2011 Marc-André Lureau - 0.7-1 +- Upstream release 0.7 + +* Wed May 25 2011 Christophe Fergeau - 0.6-1 +- Upstream release 0.6 + +* Tue Mar 1 2011 Hans de Goede - 0.5-6 +- Fix spice-glib requires in .pc file (#680314) + +* Fri Feb 11 2011 Matthias Clasen - 0.5-5 +- Fix build against glib 2.28 + +* Thu Feb 10 2011 Matthias Clasen - 0.5-4 +- Rebuild against newer gtk + +* Wed Feb 09 2011 Fedora Release Engineering - 0.5-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Wed Feb 2 2011 Matthias Clasen - 0.5-2 +- Rebuild against newer gtk + +* Thu Jan 27 2011 Marc-André Lureau - 0.5-1 +- Upstream release 0.5 + +* Fri Jan 14 2011 Daniel P. Berrange - 0.4-2 +- Add support for parallel GTK3 build + +* Mon Jan 10 2011 Dan Horák - 0.4-2 +- add ExclusiveArch as only x86 is supported + +* Sun Jan 09 2011 Marc-André Lureau - 0.4-1 +- Upstream release 0.4 +- Initial release (#657403) + +* Thu Nov 25 2010 Marc-André Lureau - 0.1.0-1 +- Initial packaging