--- Begin Message ---
Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock
X-Debbugs-Cc: Simon McVittie <smcv@debian.org>
Please unblock package vinagre
[ Reason ]
Resolves hanging black screen when connecting to an RDP server.
[ Impact ] Users of vinagre from buster will not be able to use the
application anymore. The vinagre package should then be removed from
bullseye.
[ Tests ]
Manually tested against a Windows 2016 Server OS.
[ Risks ]
Leaf package, no risk.
[ Checklist ]
[x] all changes are documented in the d/changelog
[x] I reviewed all changes and I approve them
[x] attach debdiff against the package in testing
[ Other info ]
None
unblock vinagre/3.22.0-8.1
diff -Nru vinagre-3.22.0/debian/changelog vinagre-3.22.0/debian/changelog
--- vinagre-3.22.0/debian/changelog 2021-01-01 01:09:52.000000000 +0100
+++ vinagre-3.22.0/debian/changelog 2021-05-16 23:11:19.000000000 +0200
@@ -1,3 +1,14 @@
+vinagre (3.22.0-8.1) unstable; urgency=medium
+
+ * Non-maintainer upload.
+ * debian/patches:
+ + Add 0003-fix-hangs-with-recent-FreeRDP-version.patch and
+ 0004-fix-FreeRDP-API-usage.patch. This resolves vinagre hanging endlessly
+ with a black screen when connecting to a remote RDP server (Closes:
+ #983533).
+
+ -- Mike Gabriel <sunweaver@debian.org> Sun, 16 May 2021 23:11:19 +0200
+
vinagre (3.22.0-8) unstable; urgency=medium
* Team upload.
diff -Nru vinagre-3.22.0/debian/patches/0003-fix-hangs-with-recent-FreeRDP-version.patch vinagre-3.22.0/debian/patches/0003-fix-hangs-with-recent-FreeRDP-version.patch
--- vinagre-3.22.0/debian/patches/0003-fix-hangs-with-recent-FreeRDP-version.patch 1970-01-01 01:00:00.000000000 +0100
+++ vinagre-3.22.0/debian/patches/0003-fix-hangs-with-recent-FreeRDP-version.patch 2021-02-26 10:32:02.000000000 +0100
@@ -0,0 +1,78 @@
+From 404a56a11469ef24a1df632847465030d81db091 Mon Sep 17 00:00:00 2001
+From: Ondrej Holy <oholy@redhat.com>
+Date: Fri, 15 May 2020 15:43:37 +0200
+Subject: [PATCH] plugins/rdp: Fix hangs with recent FreeRDP versions
+
+Connection to all my testing servers fails with "SERVER BUG: The support
+for this feature was not announced! Use /relax-order-checks to ignore"
+currently. This happens always with current FreeRDP versions after
+https://github.com/FreeRDP/FreeRDP/pull/4926 has been merged. This can be
+fixed by the usage of /relax-order-checks option, however, this option
+should be used only if necessary needed and it should not be needed in
+most of the cases. This currenlty happens always as it interfere with our
+custom OrderSupports settings. Let's use the default OrderSupports
+settings to fix this issue, which is possible thanks to
+https://github.com/FreeRDP/FreeRDP/pull/5057.
+
+See: https://gitlab.gnome.org/GNOME/gtk-frdp/-/issues/27
+---
+ configure.ac | 2 +-
+ plugins/rdp/vinagre-rdp-tab.c | 27 ---------------------------
+ 2 files changed, 1 insertion(+), 28 deletions(-)
+
+--- a/configure.ac
++++ b/configure.ac
+@@ -58,7 +58,7 @@
+ AM_CONDITIONAL([VINAGRE_ENABLE_SSH], [test "x$have_ssh" = "xyes"])
+
+ # Whether to enable support for RDP.
+-RDP_DEPS="freerdp2 x11"
++RDP_DEPS="freerdp2 >= 2.0.0 x11"
+ AC_ARG_ENABLE([rdp],
+ [AS_HELP_STRING([--disable-rdp],
+ [Disable Remote Desktop Protocol (RDP) support])])
+--- a/plugins/rdp/vinagre-rdp-tab.c
++++ b/plugins/rdp/vinagre-rdp-tab.c
+@@ -524,32 +524,7 @@ frdp_pre_connect (freerdp *instance)
+ {
+ rdpSettings *settings = instance->settings;
+
+-#if HAVE_FREERDP_1_1
+- settings->OrderSupport[NEG_DSTBLT_INDEX] = TRUE;
+- settings->OrderSupport[NEG_PATBLT_INDEX] = TRUE;
+- settings->OrderSupport[NEG_SCRBLT_INDEX] = TRUE;
+- settings->OrderSupport[NEG_OPAQUE_RECT_INDEX] = TRUE;
+- settings->OrderSupport[NEG_DRAWNINEGRID_INDEX] = FALSE;
+- settings->OrderSupport[NEG_MULTIDSTBLT_INDEX] = FALSE;
+- settings->OrderSupport[NEG_MULTIPATBLT_INDEX] = FALSE;
+- settings->OrderSupport[NEG_MULTISCRBLT_INDEX] = FALSE;
+- settings->OrderSupport[NEG_MULTIOPAQUERECT_INDEX] = TRUE;
+- settings->OrderSupport[NEG_MULTI_DRAWNINEGRID_INDEX] = FALSE;
+- settings->OrderSupport[NEG_LINETO_INDEX] = TRUE;
+- settings->OrderSupport[NEG_POLYLINE_INDEX] = TRUE;
+- settings->OrderSupport[NEG_MEMBLT_INDEX] = TRUE;
+- settings->OrderSupport[NEG_MEM3BLT_INDEX] = FALSE;
+- settings->OrderSupport[NEG_MEMBLT_V2_INDEX] = TRUE;
+- settings->OrderSupport[NEG_MEM3BLT_V2_INDEX] = FALSE;
+- settings->OrderSupport[NEG_SAVEBITMAP_INDEX] = FALSE;
+- settings->OrderSupport[NEG_GLYPH_INDEX_INDEX] = TRUE;
+- settings->OrderSupport[NEG_FAST_INDEX_INDEX] = TRUE;
+- settings->OrderSupport[NEG_FAST_GLYPH_INDEX] = FALSE;
+- settings->OrderSupport[NEG_POLYGON_SC_INDEX] = FALSE;
+- settings->OrderSupport[NEG_POLYGON_CB_INDEX] = FALSE;
+- settings->OrderSupport[NEG_ELLIPSE_SC_INDEX] = FALSE;
+- settings->OrderSupport[NEG_ELLIPSE_CB_INDEX] = FALSE;
+-#else
++#if !HAVE_FREERDP_1_1
+ settings->order_support[NEG_DSTBLT_INDEX] = true;
+ settings->order_support[NEG_PATBLT_INDEX] = true;
+ settings->order_support[NEG_SCRBLT_INDEX] = true;
+@@ -1122,6 +1097,8 @@ open_freerdp (VinagreRdpTab *rdp_tab)
+ settings->encryption = true;
+ settings->encryption_method = ENCRYPTION_METHOD_40BIT | ENCRYPTION_METHOD_128BIT | ENCRYPTION_METHOD_FIPS;
+ settings->encryption_level = ENCRYPTION_LEVEL_CLIENT_COMPATIBLE;
++ settings->AllowUnanouncedOrdersFromServer = true;
++ settings->BitmapCacheEnabled = true;
+ #endif
+ #include <freerdp/version.h>
+ #if (FREERDP_VERSION_MAJOR == 1 && FREERDP_VERSION_MINOR >= 2 && FREERDP_VERSION_REVISION >= 1) || (FREERDP_VERSION_MAJOR == 2)
diff -Nru vinagre-3.22.0/debian/patches/0004-fix-FreeRDP-API-usage.patch vinagre-3.22.0/debian/patches/0004-fix-FreeRDP-API-usage.patch
--- vinagre-3.22.0/debian/patches/0004-fix-FreeRDP-API-usage.patch 1970-01-01 01:00:00.000000000 +0100
+++ vinagre-3.22.0/debian/patches/0004-fix-FreeRDP-API-usage.patch 2021-02-26 10:35:40.000000000 +0100
@@ -0,0 +1,64 @@
+From 18150f00a889e7f02d15f04e868e7b019ccdf0f2 Mon Sep 17 00:00:00 2001
+From: akallabeth <akallabeth@posteo.net>
+Date: Fri, 26 Feb 2021 08:11:35 +0100
+Subject: [PATCH] Fixed freerdp API use
+
+* Use PostDisconnect callback to free up resources allocated
+ during Pre/PostConnect phase
+* Only call freerdp_disconnect if there was an actual connection
+---
+ plugins/rdp/vinagre-rdp-tab.c | 14 ++++++++++++--
+ 1 file changed, 12 insertions(+), 2 deletions(-)
+
+--- a/plugins/rdp/vinagre-rdp-tab.c
++++ b/plugins/rdp/vinagre-rdp-tab.c
+@@ -70,6 +70,8 @@
+ gboolean scaling;
+ double scale;
+ double offset_x, offset_y;
++
++ gboolean is_connected;
+ };
+
+ G_DEFINE_TYPE (VinagreRdpTab, vinagre_rdp_tab, VINAGRE_TYPE_TAB)
+@@ -178,8 +180,9 @@
+
+ if (priv->freerdp_session)
+ {
+- gdi_free (priv->freerdp_session);
+- freerdp_disconnect (priv->freerdp_session);
++ if (priv->is_connected)
++ freerdp_disconnect (priv->freerdp_session);
++
+ freerdp_context_free (priv->freerdp_session);
+ g_clear_pointer (&priv->freerdp_session, freerdp_free);
+ }
+@@ -584,6 +587,12 @@
+ return TRUE;
+ }
+
++static void
++frdp_post_disconnect (freerdp *instance)
++{
++ gdi_free(instance);
++}
++
+ static gboolean
+ update (gpointer user_data)
+ {
+@@ -1065,6 +1074,7 @@
+ priv->freerdp_session = freerdp_new ();
+ priv->freerdp_session->PreConnect = frdp_pre_connect;
+ priv->freerdp_session->PostConnect = frdp_post_connect;
++ priv->freerdp_session->PostDisconnect = frdp_post_disconnect;
+ priv->freerdp_session->Authenticate = frdp_authenticate;
+ priv->freerdp_session->VerifyCertificate = frdp_certificate_verify;
+ #if HAVE_FREERDP_1_1
+@@ -1199,6 +1209,7 @@
+ /* Run FreeRDP session */
+ success = freerdp_connect (priv->freerdp_session);
+
++ priv->is_connected = success;
+ if (!success)
+ {
+ gtk_window_unfullscreen (window);
diff -Nru vinagre-3.22.0/debian/patches/series vinagre-3.22.0/debian/patches/series
--- vinagre-3.22.0/debian/patches/series 2021-01-01 01:06:19.000000000 +0100
+++ vinagre-3.22.0/debian/patches/series 2021-02-26 10:34:20.000000000 +0100
@@ -3,3 +3,5 @@
freerdp2017.patch
131d151cb02245f84918f9ba5b3ef055758bcf61.patch
gcc-10.patch
+0003-fix-hangs-with-recent-FreeRDP-version.patch
+0004-fix-FreeRDP-API-usage.patch
--- End Message ---