gnu: vinagre: Update package for newer freerdp.
* gnu/packages/gnome.scm (vinagre)[source]: Update patches. [arguments]: Add custom phase to replace 'freerdp' with 'freerdp2'. Remove configure flags. * gnu/packages/patches/vinagre-revert-1.patch, gnu/packages/patches/vinagre-revert-2.patch: Remove files. * gnu/packages/patches/vinagre-newer-freerdp.patch, gnu/packages/patches/vinagre-newer-rdp-parameters.patch: New files. * gnu/local.mk (dist_patch_DATA): Register changes.master
parent
bbbe7adda6
commit
684f97f8c9
|
@ -1227,8 +1227,8 @@ dist_patch_DATA = \
|
||||||
%D%/packages/patches/upx-fix-CVE-2017-15056.patch \
|
%D%/packages/patches/upx-fix-CVE-2017-15056.patch \
|
||||||
%D%/packages/patches/valgrind-enable-arm.patch \
|
%D%/packages/patches/valgrind-enable-arm.patch \
|
||||||
%D%/packages/patches/valgrind-glibc-compat.patch \
|
%D%/packages/patches/valgrind-glibc-compat.patch \
|
||||||
%D%/packages/patches/vinagre-revert-1.patch \
|
%D%/packages/patches/vinagre-newer-freerdp.patch \
|
||||||
%D%/packages/patches/vinagre-revert-2.patch \
|
%D%/packages/patches/vinagre-newer-rdp-parameters.patch \
|
||||||
%D%/packages/patches/virglrenderer-CVE-2017-6386.patch \
|
%D%/packages/patches/virglrenderer-CVE-2017-6386.patch \
|
||||||
%D%/packages/patches/vorbis-tools-CVE-2014-9638+CVE-2014-9639.patch \
|
%D%/packages/patches/vorbis-tools-CVE-2014-9638+CVE-2014-9639.patch \
|
||||||
%D%/packages/patches/vorbis-tools-CVE-2014-9640.patch \
|
%D%/packages/patches/vorbis-tools-CVE-2014-9640.patch \
|
||||||
|
|
|
@ -2221,13 +2221,20 @@ selection and URL hints.")))
|
||||||
(uri (string-append "mirror://gnome/sources/" name "/"
|
(uri (string-append "mirror://gnome/sources/" name "/"
|
||||||
(version-major+minor version) "/"
|
(version-major+minor version) "/"
|
||||||
name "-" version ".tar.xz"))
|
name "-" version ".tar.xz"))
|
||||||
(patches ; We have to revert 2 commits to build against freerdp 1.1.
|
(patches (search-patches "vinagre-newer-freerdp.patch"
|
||||||
(search-patches "vinagre-revert-1.patch"
|
"vinagre-newer-rdp-parameters.patch"))
|
||||||
"vinagre-revert-2.patch"))
|
|
||||||
(sha256
|
(sha256
|
||||||
(base32
|
(base32
|
||||||
"10jya3jyrm18nbw3v410gbkc7677bqamax44pzgd3j15randn76d"))))
|
"10jya3jyrm18nbw3v410gbkc7677bqamax44pzgd3j15randn76d"))))
|
||||||
(build-system glib-or-gtk-build-system)
|
(build-system glib-or-gtk-build-system)
|
||||||
|
(arguments
|
||||||
|
'(#:phases
|
||||||
|
(modify-phases %standard-phases
|
||||||
|
(add-after 'unpack 'patch-configure
|
||||||
|
(lambda _
|
||||||
|
(substitute* "configure"
|
||||||
|
(("freerdp") "freerdp2"))
|
||||||
|
#t)))))
|
||||||
(native-inputs
|
(native-inputs
|
||||||
`(("pkg-config" ,pkg-config)
|
`(("pkg-config" ,pkg-config)
|
||||||
("intltool" ,intltool)
|
("intltool" ,intltool)
|
||||||
|
@ -2244,8 +2251,6 @@ selection and URL hints.")))
|
||||||
("spice-gtk" ,spice-gtk)
|
("spice-gtk" ,spice-gtk)
|
||||||
("telepathy-glib" ,telepathy-glib)
|
("telepathy-glib" ,telepathy-glib)
|
||||||
("vte" ,vte)))
|
("vte" ,vte)))
|
||||||
(arguments
|
|
||||||
`(#:configure-flags '("--enable-rdp")))
|
|
||||||
(home-page "https://wiki.gnome.org/Apps/Vinagre")
|
(home-page "https://wiki.gnome.org/Apps/Vinagre")
|
||||||
(synopsis "Remote desktop viewer for GNOME")
|
(synopsis "Remote desktop viewer for GNOME")
|
||||||
(description "Vinagre is a remote display client supporting the VNC, SPICE
|
(description "Vinagre is a remote display client supporting the VNC, SPICE
|
||||||
|
|
|
@ -0,0 +1,320 @@
|
||||||
|
https://gitlab.gnome.org/GNOME/vinagre/merge_requests/4.patch
|
||||||
|
|
||||||
|
From 83ec3835c36d5cd2c957512c18d21a33b4136c95 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ondrej Holy <oholy@redhat.com>
|
||||||
|
Date: Tue, 20 Nov 2018 14:57:17 +0100
|
||||||
|
Subject: [PATCH 1/2] Fix build with recent FreeRDP versions
|
||||||
|
|
||||||
|
Vinagre is not buildable with recent FreeRDP versions and similar patches
|
||||||
|
are used by distributions to fix that. I have also removed some old
|
||||||
|
compatibility codes, because it wasn't buildable against 1.0, nor 1.1
|
||||||
|
anyway and 1.2 has never been officially released and is superseded by 2.0.
|
||||||
|
|
||||||
|
https://gitlab.gnome.org/GNOME/vinagre/issues/4
|
||||||
|
---
|
||||||
|
configure.ac | 7 +-
|
||||||
|
plugins/rdp/vinagre-rdp-tab.c | 129 +++++++---------------------------
|
||||||
|
2 files changed, 27 insertions(+), 109 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/configure.ac b/configure.ac
|
||||||
|
index 5b51a82..61617f1 100644
|
||||||
|
--- a/configure.ac
|
||||||
|
+++ b/configure.ac
|
||||||
|
@@ -58,16 +58,15 @@ AS_IF([test "x$have_ssh" = "xyes"],
|
||||||
|
AM_CONDITIONAL([VINAGRE_ENABLE_SSH], [test "x$have_ssh" = "xyes"])
|
||||||
|
|
||||||
|
# Whether to enable support for RDP.
|
||||||
|
-RDP_DEPS="freerdp x11"
|
||||||
|
+RDP_DEPS="freerdp2 x11"
|
||||||
|
+
|
||||||
|
AC_ARG_ENABLE([rdp],
|
||||||
|
[AS_HELP_STRING([--disable-rdp],
|
||||||
|
[Disable Remote Desktop Protocol (RDP) support])])
|
||||||
|
|
||||||
|
AS_IF([test "x$enable_rdp" != "xno"],
|
||||||
|
[PKG_CHECK_EXISTS([$RDP_DEPS],
|
||||||
|
- [have_rdp=yes
|
||||||
|
- PKG_CHECK_EXISTS(freerdp >= 1.1,
|
||||||
|
- [AC_DEFINE([HAVE_FREERDP_1_1], [1], [FreeRDP is of version 1.1 or newer])], [])],
|
||||||
|
+ [have_rdp=yes],
|
||||||
|
[have_rdp=no])],
|
||||||
|
[have_rdp=no])
|
||||||
|
|
||||||
|
diff --git a/plugins/rdp/vinagre-rdp-tab.c b/plugins/rdp/vinagre-rdp-tab.c
|
||||||
|
index 5b98c24..28e3eb6 100644
|
||||||
|
--- a/plugins/rdp/vinagre-rdp-tab.c
|
||||||
|
+++ b/plugins/rdp/vinagre-rdp-tab.c
|
||||||
|
@@ -29,12 +29,7 @@
|
||||||
|
#include <freerdp/types.h>
|
||||||
|
#include <freerdp/freerdp.h>
|
||||||
|
#include <freerdp/gdi/gdi.h>
|
||||||
|
-#if HAVE_FREERDP_1_1
|
||||||
|
#include <freerdp/locale/keyboard.h>
|
||||||
|
-#else
|
||||||
|
-#include <freerdp/kbd/vkcodes.h>
|
||||||
|
-#include <gdk/gdkx.h>
|
||||||
|
-#endif
|
||||||
|
|
||||||
|
#include "vinagre-rdp-tab.h"
|
||||||
|
#include "vinagre-rdp-connection.h"
|
||||||
|
@@ -44,12 +39,6 @@
|
||||||
|
|
||||||
|
#define SELECT_TIMEOUT 50
|
||||||
|
|
||||||
|
-#if !HAVE_FREERDP_1_1
|
||||||
|
-typedef boolean BOOL;
|
||||||
|
-typedef uint8 UINT8;
|
||||||
|
-typedef uint16 UINT16;
|
||||||
|
-#endif
|
||||||
|
-
|
||||||
|
struct _VinagreRdpTabPrivate
|
||||||
|
{
|
||||||
|
freerdp *freerdp_session;
|
||||||
|
@@ -476,16 +465,18 @@ frdp_drawing_area_draw (GtkWidget *area,
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
-static void
|
||||||
|
+static BOOL
|
||||||
|
frdp_begin_paint (rdpContext *context)
|
||||||
|
{
|
||||||
|
rdpGdi *gdi = context->gdi;
|
||||||
|
|
||||||
|
gdi->primary->hdc->hwnd->invalid->null = 1;
|
||||||
|
gdi->primary->hdc->hwnd->ninvalid = 0;
|
||||||
|
+
|
||||||
|
+ return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
-static void
|
||||||
|
+static BOOL
|
||||||
|
frdp_end_paint (rdpContext *context)
|
||||||
|
{
|
||||||
|
VinagreRdpTab *rdp_tab = ((frdpContext *) context)->rdp_tab;
|
||||||
|
@@ -495,7 +486,7 @@ frdp_end_paint (rdpContext *context)
|
||||||
|
gint x, y, w, h;
|
||||||
|
|
||||||
|
if (gdi->primary->hdc->hwnd->invalid->null)
|
||||||
|
- return;
|
||||||
|
+ return TRUE;
|
||||||
|
|
||||||
|
x = gdi->primary->hdc->hwnd->invalid->x;
|
||||||
|
y = gdi->primary->hdc->hwnd->invalid->y;
|
||||||
|
@@ -517,6 +508,8 @@ frdp_end_paint (rdpContext *context)
|
||||||
|
{
|
||||||
|
gtk_widget_queue_draw_area (priv->display, x, y, w, h);
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOL
|
||||||
|
@@ -524,7 +517,6 @@ 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;
|
||||||
|
@@ -549,32 +541,6 @@ frdp_pre_connect (freerdp *instance)
|
||||||
|
settings->OrderSupport[NEG_POLYGON_CB_INDEX] = FALSE;
|
||||||
|
settings->OrderSupport[NEG_ELLIPSE_SC_INDEX] = FALSE;
|
||||||
|
settings->OrderSupport[NEG_ELLIPSE_CB_INDEX] = FALSE;
|
||||||
|
-#else
|
||||||
|
- settings->order_support[NEG_DSTBLT_INDEX] = true;
|
||||||
|
- settings->order_support[NEG_PATBLT_INDEX] = true;
|
||||||
|
- settings->order_support[NEG_SCRBLT_INDEX] = true;
|
||||||
|
- settings->order_support[NEG_OPAQUE_RECT_INDEX] = true;
|
||||||
|
- settings->order_support[NEG_DRAWNINEGRID_INDEX] = false;
|
||||||
|
- settings->order_support[NEG_MULTIDSTBLT_INDEX] = false;
|
||||||
|
- settings->order_support[NEG_MULTIPATBLT_INDEX] = false;
|
||||||
|
- settings->order_support[NEG_MULTISCRBLT_INDEX] = false;
|
||||||
|
- settings->order_support[NEG_MULTIOPAQUERECT_INDEX] = true;
|
||||||
|
- settings->order_support[NEG_MULTI_DRAWNINEGRID_INDEX] = false;
|
||||||
|
- settings->order_support[NEG_LINETO_INDEX] = true;
|
||||||
|
- settings->order_support[NEG_POLYLINE_INDEX] = true;
|
||||||
|
- settings->order_support[NEG_MEMBLT_INDEX] = true;
|
||||||
|
- settings->order_support[NEG_MEM3BLT_INDEX] = false;
|
||||||
|
- settings->order_support[NEG_MEMBLT_V2_INDEX] = true;
|
||||||
|
- settings->order_support[NEG_MEM3BLT_V2_INDEX] = false;
|
||||||
|
- settings->order_support[NEG_SAVEBITMAP_INDEX] = false;
|
||||||
|
- settings->order_support[NEG_GLYPH_INDEX_INDEX] = true;
|
||||||
|
- settings->order_support[NEG_FAST_INDEX_INDEX] = true;
|
||||||
|
- settings->order_support[NEG_FAST_GLYPH_INDEX] = false;
|
||||||
|
- settings->order_support[NEG_POLYGON_SC_INDEX] = false;
|
||||||
|
- settings->order_support[NEG_POLYGON_CB_INDEX] = false;
|
||||||
|
- settings->order_support[NEG_ELLIPSE_SC_INDEX] = false;
|
||||||
|
- settings->order_support[NEG_ELLIPSE_CB_INDEX] = false;
|
||||||
|
-#endif
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
@@ -587,15 +553,7 @@ frdp_post_connect (freerdp *instance)
|
||||||
|
rdpGdi *gdi;
|
||||||
|
int stride;
|
||||||
|
|
||||||
|
- gdi_init (instance,
|
||||||
|
-#if defined(FREERDP_VERSION_MAJOR) && defined(FREERDP_VERSION_MINOR) && \
|
||||||
|
- !(FREERDP_VERSION_MAJOR > 1 || (FREERDP_VERSION_MAJOR == 1 && \
|
||||||
|
- FREERDP_VERSION_MINOR >= 2))
|
||||||
|
- CLRBUF_24BPP,
|
||||||
|
-#else
|
||||||
|
- CLRBUF_32BPP,
|
||||||
|
-#endif
|
||||||
|
- NULL);
|
||||||
|
+ gdi_init (instance, PIXEL_FORMAT_BGRA32);
|
||||||
|
gdi = instance->context->gdi;
|
||||||
|
|
||||||
|
instance->update->BeginPaint = frdp_begin_paint;
|
||||||
|
@@ -705,21 +663,15 @@ frdp_key_pressed (GtkWidget *widget,
|
||||||
|
VinagreRdpTab *rdp_tab = (VinagreRdpTab *) user_data;
|
||||||
|
VinagreRdpTabPrivate *priv = rdp_tab->priv;
|
||||||
|
frdpEventKey *frdp_event;
|
||||||
|
-#if HAVE_FREERDP_1_1
|
||||||
|
UINT16 scancode;
|
||||||
|
-#endif
|
||||||
|
|
||||||
|
frdp_event = g_new0 (frdpEventKey, 1);
|
||||||
|
frdp_event->type = FRDP_EVENT_TYPE_KEY;
|
||||||
|
frdp_event->flags = event->type == GDK_KEY_PRESS ? KBD_FLAGS_DOWN : KBD_FLAGS_RELEASE;
|
||||||
|
|
||||||
|
-#if HAVE_FREERDP_1_1
|
||||||
|
scancode = freerdp_keyboard_get_rdp_scancode_from_x11_keycode (event->hardware_keycode);
|
||||||
|
frdp_event->code = RDP_SCANCODE_CODE(scancode);
|
||||||
|
frdp_event->extended = RDP_SCANCODE_EXTENDED(scancode);
|
||||||
|
-#else
|
||||||
|
- frdp_event->code = freerdp_kbd_get_scancode_by_keycode (event->hardware_keycode, &frdp_event->extended);
|
||||||
|
-#endif
|
||||||
|
|
||||||
|
if (frdp_event->extended)
|
||||||
|
frdp_event->flags |= KBD_FLAGS_EXTENDED;
|
||||||
|
@@ -934,11 +886,13 @@ frdp_authenticate (freerdp *instance,
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
-static BOOL
|
||||||
|
+static DWORD
|
||||||
|
frdp_certificate_verify (freerdp *instance,
|
||||||
|
- char *subject,
|
||||||
|
- char *issuer,
|
||||||
|
- char *fingerprint)
|
||||||
|
+ const char *common_name,
|
||||||
|
+ const char *subject,
|
||||||
|
+ const char *issuer,
|
||||||
|
+ const char *fingerprint,
|
||||||
|
+ BOOL host_mismatch)
|
||||||
|
{
|
||||||
|
VinagreTab *tab = VINAGRE_TAB (((frdpContext *) instance->context)->rdp_tab);
|
||||||
|
GtkBuilder *builder;
|
||||||
|
@@ -968,17 +922,18 @@ frdp_certificate_verify (freerdp *instance,
|
||||||
|
gtk_widget_hide (dialog);
|
||||||
|
|
||||||
|
|
||||||
|
- return response == GTK_RESPONSE_YES;
|
||||||
|
+ return (response == GTK_RESPONSE_YES) ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
-
|
||||||
|
-#if HAVE_FREERDP_1_1
|
||||||
|
-static BOOL
|
||||||
|
+static DWORD
|
||||||
|
frdp_changed_certificate_verify (freerdp *instance,
|
||||||
|
- char *subject,
|
||||||
|
- char *issuer,
|
||||||
|
- char *new_fingerprint,
|
||||||
|
- char *old_fingerprint)
|
||||||
|
+ const char *common_name,
|
||||||
|
+ const char *subject,
|
||||||
|
+ const char *issuer,
|
||||||
|
+ const char *new_fingerprint,
|
||||||
|
+ const char *old_subject,
|
||||||
|
+ const char *old_issuer,
|
||||||
|
+ const char *old_fingerprint)
|
||||||
|
{
|
||||||
|
VinagreTab *tab = VINAGRE_TAB (((frdpContext *) instance->context)->rdp_tab);
|
||||||
|
GtkBuilder *builder;
|
||||||
|
@@ -1023,9 +978,8 @@ frdp_changed_certificate_verify (freerdp *instance,
|
||||||
|
gtk_widget_hide (dialog);
|
||||||
|
|
||||||
|
|
||||||
|
- return response == GTK_RESPONSE_YES;
|
||||||
|
+ return (response == GTK_RESPONSE_YES) ? 1 : 0;
|
||||||
|
}
|
||||||
|
-#endif
|
||||||
|
|
||||||
|
static void
|
||||||
|
init_freerdp (VinagreRdpTab *rdp_tab)
|
||||||
|
@@ -1053,15 +1007,9 @@ init_freerdp (VinagreRdpTab *rdp_tab)
|
||||||
|
priv->freerdp_session->PostConnect = frdp_post_connect;
|
||||||
|
priv->freerdp_session->Authenticate = frdp_authenticate;
|
||||||
|
priv->freerdp_session->VerifyCertificate = frdp_certificate_verify;
|
||||||
|
-#if HAVE_FREERDP_1_1
|
||||||
|
priv->freerdp_session->VerifyChangedCertificate = frdp_changed_certificate_verify;
|
||||||
|
-#endif
|
||||||
|
|
||||||
|
-#if HAVE_FREERDP_1_1
|
||||||
|
priv->freerdp_session->ContextSize = sizeof (frdpContext);
|
||||||
|
-#else
|
||||||
|
- priv->freerdp_session->context_size = sizeof (frdpContext);
|
||||||
|
-#endif
|
||||||
|
|
||||||
|
freerdp_context_new (priv->freerdp_session);
|
||||||
|
((frdpContext *) priv->freerdp_session->context)->rdp_tab = rdp_tab;
|
||||||
|
@@ -1070,53 +1018,24 @@ init_freerdp (VinagreRdpTab *rdp_tab)
|
||||||
|
settings = priv->freerdp_session->settings;
|
||||||
|
|
||||||
|
/* Security settings */
|
||||||
|
-#if HAVE_FREERDP_1_1
|
||||||
|
settings->RdpSecurity = TRUE;
|
||||||
|
settings->TlsSecurity = TRUE;
|
||||||
|
settings->NlaSecurity = TRUE;
|
||||||
|
settings->EncryptionMethods = ENCRYPTION_METHOD_40BIT | ENCRYPTION_METHOD_128BIT | ENCRYPTION_METHOD_FIPS;
|
||||||
|
settings->EncryptionLevel = ENCRYPTION_LEVEL_CLIENT_COMPATIBLE;
|
||||||
|
-#else
|
||||||
|
- settings->rdp_security = true;
|
||||||
|
- settings->tls_security = true;
|
||||||
|
- settings->nla_security = true;
|
||||||
|
- settings->encryption = true;
|
||||||
|
- settings->encryption_method = ENCRYPTION_METHOD_40BIT | ENCRYPTION_METHOD_128BIT | ENCRYPTION_METHOD_FIPS;
|
||||||
|
- settings->encryption_level = ENCRYPTION_LEVEL_CLIENT_COMPATIBLE;
|
||||||
|
-#endif
|
||||||
|
-#include <freerdp/version.h>
|
||||||
|
-#if (FREERDP_VERSION_MAJOR == 1 && FREERDP_VERSION_MINOR >= 2 && FREERDP_VERSION_REVISION >= 1) || (FREERDP_VERSION_MAJOR == 2)
|
||||||
|
settings->UseRdpSecurityLayer = FALSE;
|
||||||
|
-#else
|
||||||
|
- settings->DisableEncryption = FALSE;
|
||||||
|
-#endif
|
||||||
|
|
||||||
|
/* Set display size */
|
||||||
|
-#if HAVE_FREERDP_1_1
|
||||||
|
settings->DesktopWidth = width;
|
||||||
|
settings->DesktopHeight = height;
|
||||||
|
-#else
|
||||||
|
- settings->width = width;
|
||||||
|
- settings->height = height;
|
||||||
|
-#endif
|
||||||
|
|
||||||
|
/* Set hostname */
|
||||||
|
-#if HAVE_FREERDP_1_1
|
||||||
|
settings->WindowTitle = g_strdup (hostname);
|
||||||
|
settings->ServerHostname = g_strdup (hostname);
|
||||||
|
settings->ServerPort = port;
|
||||||
|
-#else
|
||||||
|
- settings->window_title = g_strdup (hostname);
|
||||||
|
- settings->hostname = g_strdup (hostname);
|
||||||
|
- settings->port = port;
|
||||||
|
-#endif
|
||||||
|
|
||||||
|
/* Set keyboard layout */
|
||||||
|
-#if HAVE_FREERDP_1_1
|
||||||
|
freerdp_keyboard_init (KBD_US);
|
||||||
|
-#else
|
||||||
|
- freerdp_kbd_init (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), KBD_US);
|
||||||
|
-#endif
|
||||||
|
|
||||||
|
/* Allow font smoothing by default */
|
||||||
|
settings->AllowFontSmoothing = TRUE;
|
||||||
|
--
|
||||||
|
2.18.1
|
||||||
|
|
|
@ -0,0 +1,212 @@
|
||||||
|
https://gitlab.gnome.org/GNOME/vinagre/merge_requests/4.patch
|
||||||
|
|
||||||
|
From 141f9383129795da267a8111897fb3a0a324b080 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ondrej Holy <oholy@redhat.com>
|
||||||
|
Date: Thu, 22 Nov 2018 17:22:35 +0100
|
||||||
|
Subject: [PATCH 2/2] Handle new RDP certificate parameters
|
||||||
|
|
||||||
|
The freerdp2 certificate callbacks contains more parameters, let's
|
||||||
|
present some of them to user also.
|
||||||
|
---
|
||||||
|
data/vinagre.ui | 80 ++++++++++++++++++++++++++++++-----
|
||||||
|
plugins/rdp/vinagre-rdp-tab.c | 26 +++++-------
|
||||||
|
2 files changed, 80 insertions(+), 26 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/data/vinagre.ui b/data/vinagre.ui
|
||||||
|
index 3135336..d7ce258 100644
|
||||||
|
--- a/data/vinagre.ui
|
||||||
|
+++ b/data/vinagre.ui
|
||||||
|
@@ -885,7 +885,7 @@ Do you trust the new certificate?</property>
|
||||||
|
<property name="vexpand">True</property>
|
||||||
|
<property name="xalign">0</property>
|
||||||
|
<property name="xpad">12</property>
|
||||||
|
- <property name="label" translatable="yes" comments="Subject of the certificate.">Subject:</property>
|
||||||
|
+ <property name="label" translatable="yes" comments="Subject of the certificate.">New subject:</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="left_attach">0</property>
|
||||||
|
@@ -901,7 +901,7 @@ Do you trust the new certificate?</property>
|
||||||
|
<property name="vexpand">True</property>
|
||||||
|
<property name="xalign">0</property>
|
||||||
|
<property name="xpad">12</property>
|
||||||
|
- <property name="label" translatable="yes" comments="Issuer of the certificate.">Issuer:</property>
|
||||||
|
+ <property name="label" translatable="yes" comments="Issuer of the certificate.">New issuer:</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="left_attach">0</property>
|
||||||
|
@@ -927,7 +927,55 @@ Do you trust the new certificate?</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
- <object class="GtkLabel" id="certificate_changed_subject">
|
||||||
|
+ <object class="GtkLabel">
|
||||||
|
+ <property name="visible">True</property>
|
||||||
|
+ <property name="can_focus">False</property>
|
||||||
|
+ <property name="vexpand">True</property>
|
||||||
|
+ <property name="xalign">0</property>
|
||||||
|
+ <property name="xpad">12</property>
|
||||||
|
+ <property name="label" translatable="yes" comments="Subject of the old certificate.">Old subject:</property>
|
||||||
|
+ </object>
|
||||||
|
+ <packing>
|
||||||
|
+ <property name="left_attach">0</property>
|
||||||
|
+ <property name="top_attach">3</property>
|
||||||
|
+ <property name="width">1</property>
|
||||||
|
+ <property name="height">1</property>
|
||||||
|
+ </packing>
|
||||||
|
+ </child>
|
||||||
|
+ <child>
|
||||||
|
+ <object class="GtkLabel">
|
||||||
|
+ <property name="visible">True</property>
|
||||||
|
+ <property name="can_focus">False</property>
|
||||||
|
+ <property name="vexpand">True</property>
|
||||||
|
+ <property name="xalign">0</property>
|
||||||
|
+ <property name="xpad">12</property>
|
||||||
|
+ <property name="label" translatable="yes" comments="Issuer of the old certificate.">Old issuer:</property>
|
||||||
|
+ </object>
|
||||||
|
+ <packing>
|
||||||
|
+ <property name="left_attach">0</property>
|
||||||
|
+ <property name="top_attach">4</property>
|
||||||
|
+ <property name="width">1</property>
|
||||||
|
+ <property name="height">1</property>
|
||||||
|
+ </packing>
|
||||||
|
+ </child>
|
||||||
|
+ <child>
|
||||||
|
+ <object class="GtkLabel">
|
||||||
|
+ <property name="visible">True</property>
|
||||||
|
+ <property name="can_focus">False</property>
|
||||||
|
+ <property name="vexpand">True</property>
|
||||||
|
+ <property name="xalign">0</property>
|
||||||
|
+ <property name="xpad">12</property>
|
||||||
|
+ <property name="label" translatable="yes" comments="Fingerprint of the old certificate.">Old fingerprint:</property>
|
||||||
|
+ </object>
|
||||||
|
+ <packing>
|
||||||
|
+ <property name="left_attach">0</property>
|
||||||
|
+ <property name="top_attach">5</property>
|
||||||
|
+ <property name="width">1</property>
|
||||||
|
+ <property name="height">1</property>
|
||||||
|
+ </packing>
|
||||||
|
+ </child>
|
||||||
|
+ <child>
|
||||||
|
+ <object class="GtkLabel" id="certificate_changed_new_subject">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="hexpand">True</property>
|
||||||
|
@@ -942,7 +990,7 @@ Do you trust the new certificate?</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
- <object class="GtkLabel" id="certificate_changed_issuer">
|
||||||
|
+ <object class="GtkLabel" id="certificate_changed_new_issuer">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="hexpand">True</property>
|
||||||
|
@@ -972,21 +1020,33 @@ Do you trust the new certificate?</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
- <object class="GtkLabel" id="certificate_changed_old_fingerprint_label">
|
||||||
|
+ <object class="GtkLabel" id="certificate_changed_old_subject">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
- <property name="vexpand">True</property>
|
||||||
|
+ <property name="hexpand">True</property>
|
||||||
|
<property name="xalign">0</property>
|
||||||
|
- <property name="xpad">12</property>
|
||||||
|
- <property name="label" translatable="yes" comments="Fingerprint of the old certificate.">Old fingerprint:</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
- <property name="left_attach">0</property>
|
||||||
|
+ <property name="left_attach">1</property>
|
||||||
|
<property name="top_attach">3</property>
|
||||||
|
<property name="width">1</property>
|
||||||
|
<property name="height">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
+ <child>
|
||||||
|
+ <object class="GtkLabel" id="certificate_changed_old_issuer">
|
||||||
|
+ <property name="visible">True</property>
|
||||||
|
+ <property name="can_focus">False</property>
|
||||||
|
+ <property name="hexpand">True</property>
|
||||||
|
+ <property name="xalign">0</property>
|
||||||
|
+ </object>
|
||||||
|
+ <packing>
|
||||||
|
+ <property name="left_attach">1</property>
|
||||||
|
+ <property name="top_attach">4</property>
|
||||||
|
+ <property name="width">1</property>
|
||||||
|
+ <property name="height">1</property>
|
||||||
|
+ </packing>
|
||||||
|
+ </child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel" id="certificate_changed_old_fingerprint">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
@@ -997,7 +1057,7 @@ Do you trust the new certificate?</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="left_attach">1</property>
|
||||||
|
- <property name="top_attach">3</property>
|
||||||
|
+ <property name="top_attach">5</property>
|
||||||
|
<property name="width">1</property>
|
||||||
|
<property name="height">1</property>
|
||||||
|
</packing>
|
||||||
|
diff --git a/plugins/rdp/vinagre-rdp-tab.c b/plugins/rdp/vinagre-rdp-tab.c
|
||||||
|
index 28e3eb6..30a8698 100644
|
||||||
|
--- a/plugins/rdp/vinagre-rdp-tab.c
|
||||||
|
+++ b/plugins/rdp/vinagre-rdp-tab.c
|
||||||
|
@@ -917,6 +917,7 @@ frdp_certificate_verify (freerdp *instance,
|
||||||
|
widget = GTK_WIDGET (gtk_builder_get_object (builder, "certificate_fingerprint"));
|
||||||
|
gtk_label_set_text (GTK_LABEL (widget), fingerprint);
|
||||||
|
|
||||||
|
+ /* FIXME: Warn user in case of host_mismatch. */
|
||||||
|
|
||||||
|
response = gtk_dialog_run (GTK_DIALOG (dialog));
|
||||||
|
gtk_widget_hide (dialog);
|
||||||
|
@@ -939,7 +940,6 @@ frdp_changed_certificate_verify (freerdp *instance,
|
||||||
|
GtkBuilder *builder;
|
||||||
|
GtkWidget *dialog;
|
||||||
|
GtkWidget *widget;
|
||||||
|
- GtkWidget *label;
|
||||||
|
gint response;
|
||||||
|
|
||||||
|
builder = vinagre_utils_get_builder ();
|
||||||
|
@@ -950,29 +950,23 @@ frdp_changed_certificate_verify (freerdp *instance,
|
||||||
|
_("Connect"), GTK_RESPONSE_YES, NULL);
|
||||||
|
gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_YES);
|
||||||
|
|
||||||
|
- widget = GTK_WIDGET (gtk_builder_get_object (builder, "certificate_changed_subject"));
|
||||||
|
+ widget = GTK_WIDGET (gtk_builder_get_object (builder, "certificate_changed_new_subject"));
|
||||||
|
gtk_label_set_text (GTK_LABEL (widget), subject);
|
||||||
|
|
||||||
|
- widget = GTK_WIDGET (gtk_builder_get_object (builder, "certificate_changed_issuer"));
|
||||||
|
+ widget = GTK_WIDGET (gtk_builder_get_object (builder, "certificate_changed_new_issuer"));
|
||||||
|
gtk_label_set_text (GTK_LABEL (widget), issuer);
|
||||||
|
|
||||||
|
widget = GTK_WIDGET (gtk_builder_get_object (builder, "certificate_changed_new_fingerprint"));
|
||||||
|
gtk_label_set_text (GTK_LABEL (widget), new_fingerprint);
|
||||||
|
|
||||||
|
- widget = GTK_WIDGET (gtk_builder_get_object (builder, "certificate_changed_old_fingerprint"));
|
||||||
|
- label = GTK_WIDGET (gtk_builder_get_object (builder, "certificate_changed_old_fingerprint_label"));
|
||||||
|
- if (old_fingerprint != NULL && old_fingerprint[0] != '\0')
|
||||||
|
- {
|
||||||
|
- gtk_label_set_text (GTK_LABEL (widget), old_fingerprint);
|
||||||
|
- gtk_widget_show (widget);
|
||||||
|
- gtk_widget_show (label);
|
||||||
|
- }
|
||||||
|
- else
|
||||||
|
- {
|
||||||
|
- gtk_widget_hide (widget);
|
||||||
|
- gtk_widget_hide (label);
|
||||||
|
- }
|
||||||
|
+ widget = GTK_WIDGET (gtk_builder_get_object (builder, "certificate_changed_old_subject"));
|
||||||
|
+ gtk_label_set_text (GTK_LABEL (widget), old_subject);
|
||||||
|
|
||||||
|
+ widget = GTK_WIDGET (gtk_builder_get_object (builder, "certificate_changed_old_issuer"));
|
||||||
|
+ gtk_label_set_text (GTK_LABEL (widget), old_issuer);
|
||||||
|
+
|
||||||
|
+ widget = GTK_WIDGET (gtk_builder_get_object (builder, "certificate_changed_old_fingerprint"));
|
||||||
|
+ gtk_label_set_text (GTK_LABEL (widget), old_fingerprint);
|
||||||
|
|
||||||
|
response = gtk_dialog_run (GTK_DIALOG (dialog));
|
||||||
|
gtk_widget_hide (dialog);
|
||||||
|
--
|
||||||
|
2.18.1
|
||||||
|
|
|
@ -1,56 +0,0 @@
|
||||||
Patch taken from Debian: revert changes that prevent building against freerdp
|
|
||||||
version 1.1 branch.
|
|
||||||
|
|
||||||
From 8ebc0685b85e0d1f70eb00171f2e7712de3d44bd Mon Sep 17 00:00:00 2001
|
|
||||||
From: Michael Biebl <biebl@debian.org>
|
|
||||||
Date: Thu, 22 Sep 2016 01:15:55 +0200
|
|
||||||
Subject: [PATCH 1/2] Revert "Improve FreeRDP authentication failure handling"
|
|
||||||
|
|
||||||
This reverts commit d7b4f88943e8615d252d27e1efc58cb64a9e1821.
|
|
||||||
---
|
|
||||||
plugins/rdp/vinagre-rdp-tab.c | 10 ++++++----
|
|
||||||
1 file changed, 6 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/plugins/rdp/vinagre-rdp-tab.c b/plugins/rdp/vinagre-rdp-tab.c
|
|
||||||
index b731f9b..8572bc3 100644
|
|
||||||
--- a/plugins/rdp/vinagre-rdp-tab.c
|
|
||||||
+++ b/plugins/rdp/vinagre-rdp-tab.c
|
|
||||||
@@ -1195,8 +1195,8 @@ open_freerdp (VinagreRdpTab *rdp_tab)
|
|
||||||
VinagreTab *tab = VINAGRE_TAB (rdp_tab);
|
|
||||||
GtkWindow *window = GTK_WINDOW (vinagre_tab_get_window (tab));
|
|
||||||
gboolean success = TRUE;
|
|
||||||
+ gboolean authentication_error = FALSE;
|
|
||||||
gboolean cancelled = FALSE;
|
|
||||||
- guint authentication_errors = 0;
|
|
||||||
|
|
||||||
priv->events = g_queue_new ();
|
|
||||||
|
|
||||||
@@ -1205,12 +1205,14 @@ open_freerdp (VinagreRdpTab *rdp_tab)
|
|
||||||
|
|
||||||
do
|
|
||||||
{
|
|
||||||
+ authentication_error = FALSE;
|
|
||||||
+
|
|
||||||
/* Run FreeRDP session */
|
|
||||||
success = freerdp_connect (priv->freerdp_session);
|
|
||||||
if (!success)
|
|
||||||
{
|
|
||||||
- authentication_errors += freerdp_get_last_error (priv->freerdp_session->context) == 0x20009 ||
|
|
||||||
- freerdp_get_last_error (priv->freerdp_session->context) == 0x2000c;
|
|
||||||
+ authentication_error = freerdp_get_last_error (priv->freerdp_session->context) == 0x20009 ||
|
|
||||||
+ freerdp_get_last_error (priv->freerdp_session->context) == 0x2000c;
|
|
||||||
|
|
||||||
cancelled = freerdp_get_last_error (priv->freerdp_session->context) == 0x2000b;
|
|
||||||
|
|
||||||
@@ -1218,7 +1220,7 @@ open_freerdp (VinagreRdpTab *rdp_tab)
|
|
||||||
init_freerdp (rdp_tab);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
- while (!success && authentication_errors < 3);
|
|
||||||
+ while (!success && authentication_error);
|
|
||||||
|
|
||||||
if (!success)
|
|
||||||
{
|
|
||||||
--
|
|
||||||
2.9.3
|
|
||||||
|
|
|
@ -1,448 +0,0 @@
|
||||||
Patch taken from Debian: revert changes that prevent building against freerdp
|
|
||||||
version 1.1 branch.
|
|
||||||
|
|
||||||
From bb1828b6b7eb29bb037bcc687cf10f916ddc7561 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Michael Biebl <biebl@debian.org>
|
|
||||||
Date: Thu, 22 Sep 2016 01:18:16 +0200
|
|
||||||
Subject: [PATCH 2/2] Revert "Store credentials for RDP"
|
|
||||||
|
|
||||||
This reverts commit 60dea279a24c7f0e398b89a0a60d45e80087ed1d.
|
|
||||||
---
|
|
||||||
plugins/rdp/vinagre-rdp-connection.c | 22 +---
|
|
||||||
plugins/rdp/vinagre-rdp-plugin.c | 29 +----
|
|
||||||
plugins/rdp/vinagre-rdp-tab.c | 231 +++++++++++++++++------------------
|
|
||||||
3 files changed, 123 insertions(+), 159 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/plugins/rdp/vinagre-rdp-connection.c b/plugins/rdp/vinagre-rdp-connection.c
|
|
||||||
index f0ff02b..c5f6ed1 100644
|
|
||||||
--- a/plugins/rdp/vinagre-rdp-connection.c
|
|
||||||
+++ b/plugins/rdp/vinagre-rdp-connection.c
|
|
||||||
@@ -127,25 +127,9 @@ rdp_parse_item (VinagreConnection *conn, xmlNode *root)
|
|
||||||
static void
|
|
||||||
rdp_parse_options_widget (VinagreConnection *conn, GtkWidget *widget)
|
|
||||||
{
|
|
||||||
- const gchar *text;
|
|
||||||
- GtkWidget *u_entry, *d_entry, *spin_button, *scaling_button;
|
|
||||||
- gboolean scaling;
|
|
||||||
- guint width, height;
|
|
||||||
-
|
|
||||||
- d_entry = g_object_get_data (G_OBJECT (widget), "domain_entry");
|
|
||||||
- if (!d_entry)
|
|
||||||
- {
|
|
||||||
- g_warning ("Wrong widget passed to rdp_parse_options_widget()");
|
|
||||||
- return;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- text = gtk_entry_get_text (GTK_ENTRY (d_entry));
|
|
||||||
- vinagre_cache_prefs_set_string ("rdp-connection", "domain", text);
|
|
||||||
-
|
|
||||||
- g_object_set (conn,
|
|
||||||
- "domain", text != NULL && *text != '\0' ? text : NULL,
|
|
||||||
- NULL);
|
|
||||||
-
|
|
||||||
+ GtkWidget *u_entry, *spin_button, *scaling_button;
|
|
||||||
+ gboolean scaling;
|
|
||||||
+ guint width, height;
|
|
||||||
|
|
||||||
u_entry = g_object_get_data (G_OBJECT (widget), "username_entry");
|
|
||||||
if (!u_entry)
|
|
||||||
diff --git a/plugins/rdp/vinagre-rdp-plugin.c b/plugins/rdp/vinagre-rdp-plugin.c
|
|
||||||
index 4751102..f41da37 100644
|
|
||||||
--- a/plugins/rdp/vinagre-rdp-plugin.c
|
|
||||||
+++ b/plugins/rdp/vinagre-rdp-plugin.c
|
|
||||||
@@ -100,7 +100,7 @@ vinagre_rdp_plugin_init (VinagreRdpPlugin *plugin)
|
|
||||||
static GtkWidget *
|
|
||||||
impl_get_connect_widget (VinagreProtocol *plugin, VinagreConnection *conn)
|
|
||||||
{
|
|
||||||
- GtkWidget *grid, *label, *u_entry, *d_entry, *spin_button, *check;
|
|
||||||
+ GtkWidget *grid, *label, *u_entry, *spin_button, *check;
|
|
||||||
gchar *str;
|
|
||||||
gint width, height;
|
|
||||||
|
|
||||||
@@ -146,29 +146,10 @@ impl_get_connect_widget (VinagreProtocol *plugin, VinagreConnection *conn)
|
|
||||||
g_free (str);
|
|
||||||
|
|
||||||
|
|
||||||
- label = gtk_label_new_with_mnemonic (_("_Domain:"));
|
|
||||||
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
|
|
||||||
- gtk_grid_attach (GTK_GRID (grid), label, 0, 3, 1, 1);
|
|
||||||
- gtk_widget_set_margin_left (label, 12);
|
|
||||||
-
|
|
||||||
- d_entry = gtk_entry_new ();
|
|
||||||
- /* Translators: This is the tooltip for the domain field in a RDP connection */
|
|
||||||
- gtk_widget_set_tooltip_text (d_entry, _("Optional."));
|
|
||||||
- g_object_set_data (G_OBJECT (grid), "domain_entry", d_entry);
|
|
||||||
- gtk_grid_attach (GTK_GRID (grid), d_entry, 1, 3, 1, 1);
|
|
||||||
- gtk_label_set_mnemonic_widget (GTK_LABEL (label), d_entry);
|
|
||||||
- str = g_strdup (VINAGRE_IS_CONNECTION (conn) ?
|
|
||||||
- vinagre_connection_get_domain (conn) :
|
|
||||||
- vinagre_cache_prefs_get_string ("rdp-connection", "domain", ""));
|
|
||||||
- gtk_entry_set_text (GTK_ENTRY (d_entry), str);
|
|
||||||
- gtk_entry_set_activates_default (GTK_ENTRY (d_entry), TRUE);
|
|
||||||
- g_free (str);
|
|
||||||
-
|
|
||||||
-
|
|
||||||
/* Host width */
|
|
||||||
label = gtk_label_new_with_mnemonic (_("_Width:"));
|
|
||||||
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
|
|
||||||
- gtk_grid_attach (GTK_GRID (grid), label, 0, 4, 1, 1);
|
|
||||||
+ gtk_grid_attach (GTK_GRID (grid), label, 0, 3, 1, 1);
|
|
||||||
gtk_widget_set_margin_left (label, 12);
|
|
||||||
|
|
||||||
spin_button = gtk_spin_button_new_with_range (MIN_SIZE, MAX_SIZE, 1);
|
|
||||||
@@ -176,7 +157,7 @@ impl_get_connect_widget (VinagreProtocol *plugin, VinagreConnection *conn)
|
|
||||||
gtk_widget_set_tooltip_text (spin_button, _("Set width of the remote desktop"));
|
|
||||||
gtk_spin_button_set_value (GTK_SPIN_BUTTON (spin_button), DEFAULT_WIDTH);
|
|
||||||
g_object_set_data (G_OBJECT (grid), "width_spin_button", spin_button);
|
|
||||||
- gtk_grid_attach (GTK_GRID (grid), spin_button, 1, 4, 1, 1);
|
|
||||||
+ gtk_grid_attach (GTK_GRID (grid), spin_button, 1, 3, 1, 1);
|
|
||||||
gtk_label_set_mnemonic_widget (GTK_LABEL (label), spin_button);
|
|
||||||
width = VINAGRE_IS_CONNECTION (conn) ?
|
|
||||||
vinagre_connection_get_width (conn) :
|
|
||||||
@@ -188,7 +169,7 @@ impl_get_connect_widget (VinagreProtocol *plugin, VinagreConnection *conn)
|
|
||||||
/* Host height */
|
|
||||||
label = gtk_label_new_with_mnemonic (_("_Height:"));
|
|
||||||
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
|
|
||||||
- gtk_grid_attach (GTK_GRID (grid), label, 0, 5, 1, 1);
|
|
||||||
+ gtk_grid_attach (GTK_GRID (grid), label, 0, 4, 1, 1);
|
|
||||||
gtk_widget_set_margin_left (label, 12);
|
|
||||||
|
|
||||||
spin_button = gtk_spin_button_new_with_range (MIN_SIZE, MAX_SIZE, 1);
|
|
||||||
@@ -196,7 +177,7 @@ impl_get_connect_widget (VinagreProtocol *plugin, VinagreConnection *conn)
|
|
||||||
gtk_widget_set_tooltip_text (spin_button, _("Set height of the remote desktop"));
|
|
||||||
gtk_spin_button_set_value (GTK_SPIN_BUTTON (spin_button), DEFAULT_HEIGHT);
|
|
||||||
g_object_set_data (G_OBJECT (grid), "height_spin_button", spin_button);
|
|
||||||
- gtk_grid_attach (GTK_GRID (grid), spin_button, 1, 5, 1, 1);
|
|
||||||
+ gtk_grid_attach (GTK_GRID (grid), spin_button, 1, 4, 1, 1);
|
|
||||||
gtk_label_set_mnemonic_widget (GTK_LABEL (label), spin_button);
|
|
||||||
height = VINAGRE_IS_CONNECTION (conn) ?
|
|
||||||
vinagre_connection_get_height (conn) :
|
|
||||||
diff --git a/plugins/rdp/vinagre-rdp-tab.c b/plugins/rdp/vinagre-rdp-tab.c
|
|
||||||
index 8572bc3..f3d9c08 100644
|
|
||||||
--- a/plugins/rdp/vinagre-rdp-tab.c
|
|
||||||
+++ b/plugins/rdp/vinagre-rdp-tab.c
|
|
||||||
@@ -70,8 +70,6 @@ struct _VinagreRdpTabPrivate
|
|
||||||
gboolean scaling;
|
|
||||||
double scale;
|
|
||||||
double offset_x, offset_y;
|
|
||||||
-
|
|
||||||
- guint authentication_attempts;
|
|
||||||
};
|
|
||||||
|
|
||||||
G_DEFINE_TYPE (VinagreRdpTab, vinagre_rdp_tab, VINAGRE_TYPE_TAB)
|
|
||||||
@@ -611,7 +609,6 @@ frdp_post_connect (freerdp *instance)
|
|
||||||
0, 0,
|
|
||||||
gdi->width, gdi->height);
|
|
||||||
|
|
||||||
- vinagre_tab_save_credentials_in_keyring (VINAGRE_TAB (rdp_tab));
|
|
||||||
vinagre_tab_add_recent_used (VINAGRE_TAB (rdp_tab));
|
|
||||||
vinagre_tab_set_state (VINAGRE_TAB (rdp_tab), VINAGRE_TAB_STATE_CONNECTED);
|
|
||||||
|
|
||||||
@@ -862,76 +859,114 @@ frdp_mouse_moved (GtkWidget *widget,
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static void
|
|
||||||
+entry_text_changed_cb (GtkEntry *entry,
|
|
||||||
+ GtkBuilder *builder)
|
|
||||||
+{
|
|
||||||
+ const gchar *text;
|
|
||||||
+ GtkWidget *widget;
|
|
||||||
+ gsize username_length;
|
|
||||||
+ gsize password_length;
|
|
||||||
+
|
|
||||||
+ widget = GTK_WIDGET (gtk_builder_get_object (builder, "username_entry"));
|
|
||||||
+ text = gtk_entry_get_text (GTK_ENTRY (widget));
|
|
||||||
+ username_length = strlen (text);
|
|
||||||
+
|
|
||||||
+ widget = GTK_WIDGET (gtk_builder_get_object (builder, "password_entry"));
|
|
||||||
+ text = gtk_entry_get_text (GTK_ENTRY (widget));
|
|
||||||
+ password_length = strlen (text);
|
|
||||||
+
|
|
||||||
+ widget = GTK_WIDGET (gtk_builder_get_object (builder, "ok_button"));
|
|
||||||
+ gtk_widget_set_sensitive (widget, password_length > 0 && username_length > 0);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static gboolean
|
|
||||||
frdp_authenticate (freerdp *instance,
|
|
||||||
char **username,
|
|
||||||
char **password,
|
|
||||||
char **domain)
|
|
||||||
{
|
|
||||||
- VinagreTab *tab = VINAGRE_TAB (((frdpContext *) instance->context)->rdp_tab);
|
|
||||||
- VinagreRdpTab *rdp_tab = VINAGRE_RDP_TAB (tab);
|
|
||||||
- VinagreRdpTabPrivate *priv = rdp_tab->priv;
|
|
||||||
- VinagreConnection *conn = vinagre_tab_get_conn (tab);
|
|
||||||
- GtkWindow *window = GTK_WINDOW (vinagre_tab_get_window (tab));
|
|
||||||
- gboolean save_in_keyring = FALSE;
|
|
||||||
- gchar *keyring_domain = NULL;
|
|
||||||
- gchar *keyring_username = NULL;
|
|
||||||
- gchar *keyring_password = NULL;
|
|
||||||
+ VinagreTab *tab = VINAGRE_TAB (((frdpContext *) instance->context)->rdp_tab);
|
|
||||||
+ VinagreConnection *conn = vinagre_tab_get_conn (tab);
|
|
||||||
+ const gchar *user_name;
|
|
||||||
+ const gchar *domain_name;
|
|
||||||
+ GtkBuilder *builder;
|
|
||||||
+ GtkWidget *dialog;
|
|
||||||
+ GtkWidget *widget;
|
|
||||||
+ GtkWidget *username_entry;
|
|
||||||
+ GtkWidget *password_entry;
|
|
||||||
+ GtkWidget *domain_entry;
|
|
||||||
+ gboolean save_credential_check_visible;
|
|
||||||
+ gboolean domain_label_visible;
|
|
||||||
+ gboolean domain_entry_visible;
|
|
||||||
+ gint response;
|
|
||||||
|
|
||||||
- priv->authentication_attempts++;
|
|
||||||
+ builder = vinagre_utils_get_builder ();
|
|
||||||
|
|
||||||
- if (priv->authentication_attempts == 1)
|
|
||||||
- {
|
|
||||||
- vinagre_tab_find_credentials_in_keyring (tab, &keyring_domain, &keyring_username, &keyring_password);
|
|
||||||
- if (keyring_password != NULL && keyring_username != NULL)
|
|
||||||
- {
|
|
||||||
- *domain = keyring_domain;
|
|
||||||
- *username = keyring_username;
|
|
||||||
- *password = keyring_password;
|
|
||||||
+ dialog = GTK_WIDGET (gtk_builder_get_object (builder, "auth_required_dialog"));
|
|
||||||
+ gtk_window_set_modal ((GtkWindow *) dialog, TRUE);
|
|
||||||
+ gtk_window_set_transient_for ((GtkWindow *) dialog, GTK_WINDOW (vinagre_tab_get_window (tab)));
|
|
||||||
|
|
||||||
- return TRUE;
|
|
||||||
- }
|
|
||||||
- else
|
|
||||||
- {
|
|
||||||
- g_free (keyring_domain);
|
|
||||||
- g_free (keyring_username);
|
|
||||||
- g_free (keyring_password);
|
|
||||||
- }
|
|
||||||
+ widget = GTK_WIDGET (gtk_builder_get_object (builder, "host_label"));
|
|
||||||
+ gtk_label_set_text (GTK_LABEL (widget), vinagre_connection_get_host (conn));
|
|
||||||
+
|
|
||||||
+ username_entry = GTK_WIDGET (gtk_builder_get_object (builder, "username_entry"));
|
|
||||||
+ password_entry = GTK_WIDGET (gtk_builder_get_object (builder, "password_entry"));
|
|
||||||
+ domain_entry = GTK_WIDGET (gtk_builder_get_object (builder, "domain_entry"));
|
|
||||||
+
|
|
||||||
+ if (*username != NULL && *username[0] != '\0')
|
|
||||||
+ {
|
|
||||||
+ gtk_entry_set_text (GTK_ENTRY (username_entry), *username);
|
|
||||||
+ gtk_widget_grab_focus (password_entry);
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (vinagre_utils_request_credential (window,
|
|
||||||
- "RDP",
|
|
||||||
- vinagre_connection_get_host (conn),
|
|
||||||
- vinagre_connection_get_domain (conn),
|
|
||||||
- vinagre_connection_get_username (conn),
|
|
||||||
- TRUE,
|
|
||||||
- TRUE,
|
|
||||||
- TRUE,
|
|
||||||
- 20,
|
|
||||||
- domain,
|
|
||||||
- username,
|
|
||||||
- password,
|
|
||||||
- &save_in_keyring))
|
|
||||||
+ g_signal_connect (username_entry, "changed", G_CALLBACK (entry_text_changed_cb), builder);
|
|
||||||
+ g_signal_connect (password_entry, "changed", G_CALLBACK (entry_text_changed_cb), builder);
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+ widget = GTK_WIDGET (gtk_builder_get_object (builder, "save_credential_check"));
|
|
||||||
+ save_credential_check_visible = gtk_widget_get_visible (widget);
|
|
||||||
+ gtk_widget_set_visible (widget, FALSE);
|
|
||||||
+
|
|
||||||
+ widget = GTK_WIDGET (gtk_builder_get_object (builder, "domain_label"));
|
|
||||||
+ domain_label_visible = gtk_widget_get_visible (widget);
|
|
||||||
+ gtk_widget_set_visible (widget, TRUE);
|
|
||||||
+
|
|
||||||
+ domain_entry_visible = gtk_widget_get_visible (domain_entry);
|
|
||||||
+ gtk_widget_set_visible (domain_entry, TRUE);
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+ response = gtk_dialog_run (GTK_DIALOG (dialog));
|
|
||||||
+ gtk_widget_hide (dialog);
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+ widget = GTK_WIDGET (gtk_builder_get_object (builder, "save_credential_check"));
|
|
||||||
+ gtk_widget_set_visible (widget, save_credential_check_visible);
|
|
||||||
+
|
|
||||||
+ widget = GTK_WIDGET (gtk_builder_get_object (builder, "domain_label"));
|
|
||||||
+ gtk_widget_set_visible (widget, domain_label_visible);
|
|
||||||
+
|
|
||||||
+ gtk_widget_set_visible (domain_entry, domain_entry_visible);
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+ if (response == GTK_RESPONSE_OK)
|
|
||||||
{
|
|
||||||
- if (*domain && **domain != '\0')
|
|
||||||
- vinagre_connection_set_domain (conn, *domain);
|
|
||||||
+ domain_name = gtk_entry_get_text (GTK_ENTRY (domain_entry));
|
|
||||||
+ if (g_strcmp0 (*domain, domain_name) != 0)
|
|
||||||
+ *domain = g_strdup (domain_name);
|
|
||||||
|
|
||||||
- if (*username && **username != '\0')
|
|
||||||
- vinagre_connection_set_username (conn, *username);
|
|
||||||
+ user_name = gtk_entry_get_text (GTK_ENTRY (username_entry));
|
|
||||||
+ if (g_strcmp0 (*username, user_name) != 0)
|
|
||||||
+ *username = g_strdup (user_name);
|
|
||||||
|
|
||||||
- if (*password && **password != '\0')
|
|
||||||
- vinagre_connection_set_password (conn, *password);
|
|
||||||
+ *password = g_strdup (gtk_entry_get_text (GTK_ENTRY (password_entry)));
|
|
||||||
|
|
||||||
- vinagre_tab_set_save_credentials (tab, save_in_keyring);
|
|
||||||
+ return TRUE;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
- vinagre_tab_remove_from_notebook (tab);
|
|
||||||
-
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
-
|
|
||||||
- return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static BOOL
|
|
||||||
@@ -1028,25 +1063,30 @@ frdp_changed_certificate_verify (freerdp *instance,
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void
|
|
||||||
-init_freerdp (VinagreRdpTab *rdp_tab)
|
|
||||||
+open_freerdp (VinagreRdpTab *rdp_tab)
|
|
||||||
{
|
|
||||||
VinagreRdpTabPrivate *priv = rdp_tab->priv;
|
|
||||||
- rdpSettings *settings;
|
|
||||||
VinagreTab *tab = VINAGRE_TAB (rdp_tab);
|
|
||||||
VinagreConnection *conn = vinagre_tab_get_conn (tab);
|
|
||||||
- gboolean scaling;
|
|
||||||
- gchar *hostname;
|
|
||||||
- gint width, height;
|
|
||||||
- gint port;
|
|
||||||
+ rdpSettings *settings;
|
|
||||||
+ GtkWindow *window = GTK_WINDOW (vinagre_tab_get_window (tab));
|
|
||||||
+ gboolean success = TRUE;
|
|
||||||
+ gboolean fullscreen, scaling;
|
|
||||||
+ gchar *hostname, *username;
|
|
||||||
+ gint port, width, height;
|
|
||||||
|
|
||||||
g_object_get (conn,
|
|
||||||
"port", &port,
|
|
||||||
"host", &hostname,
|
|
||||||
"width", &width,
|
|
||||||
"height", &height,
|
|
||||||
+ "fullscreen", &fullscreen,
|
|
||||||
"scaling", &scaling,
|
|
||||||
+ "username", &username,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
+ priv->events = g_queue_new ();
|
|
||||||
+
|
|
||||||
/* Setup FreeRDP session */
|
|
||||||
priv->freerdp_session = freerdp_new ();
|
|
||||||
priv->freerdp_session->PreConnect = frdp_pre_connect;
|
|
||||||
@@ -1111,6 +1151,17 @@ init_freerdp (VinagreRdpTab *rdp_tab)
|
|
||||||
settings->port = port;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+ /* Set username */
|
|
||||||
+ username = g_strstrip (username);
|
|
||||||
+ if (username != NULL && username[0] != '\0')
|
|
||||||
+ {
|
|
||||||
+#if HAVE_FREERDP_1_1
|
|
||||||
+ settings->Username = g_strdup (username);
|
|
||||||
+#else
|
|
||||||
+ settings->username = g_strdup (username);
|
|
||||||
+#endif
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
/* Set keyboard layout */
|
|
||||||
#if HAVE_FREERDP_1_1
|
|
||||||
freerdp_keyboard_init (KBD_US);
|
|
||||||
@@ -1120,24 +1171,6 @@ init_freerdp (VinagreRdpTab *rdp_tab)
|
|
||||||
|
|
||||||
/* Allow font smoothing by default */
|
|
||||||
settings->AllowFontSmoothing = TRUE;
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-static void
|
|
||||||
-init_display (VinagreRdpTab *rdp_tab)
|
|
||||||
-{
|
|
||||||
- VinagreRdpTabPrivate *priv = rdp_tab->priv;
|
|
||||||
- VinagreTab *tab = VINAGRE_TAB (rdp_tab);
|
|
||||||
- VinagreConnection *conn = vinagre_tab_get_conn (tab);
|
|
||||||
- GtkWindow *window = GTK_WINDOW (vinagre_tab_get_window (tab));
|
|
||||||
- gboolean fullscreen, scaling;
|
|
||||||
- gint width, height;
|
|
||||||
-
|
|
||||||
- g_object_get (conn,
|
|
||||||
- "width", &width,
|
|
||||||
- "height", &height,
|
|
||||||
- "fullscreen", &fullscreen,
|
|
||||||
- "scaling", &scaling,
|
|
||||||
- NULL);
|
|
||||||
|
|
||||||
/* Setup display for FreeRDP session */
|
|
||||||
priv->display = gtk_drawing_area_new ();
|
|
||||||
@@ -1186,54 +1219,20 @@ init_display (VinagreRdpTab *rdp_tab)
|
|
||||||
priv->key_release_handler_id = g_signal_connect (GTK_WIDGET (tab), "key-release-event",
|
|
||||||
G_CALLBACK (frdp_key_pressed),
|
|
||||||
rdp_tab);
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-static void
|
|
||||||
-open_freerdp (VinagreRdpTab *rdp_tab)
|
|
||||||
-{
|
|
||||||
- VinagreRdpTabPrivate *priv = rdp_tab->priv;
|
|
||||||
- VinagreTab *tab = VINAGRE_TAB (rdp_tab);
|
|
||||||
- GtkWindow *window = GTK_WINDOW (vinagre_tab_get_window (tab));
|
|
||||||
- gboolean success = TRUE;
|
|
||||||
- gboolean authentication_error = FALSE;
|
|
||||||
- gboolean cancelled = FALSE;
|
|
||||||
-
|
|
||||||
- priv->events = g_queue_new ();
|
|
||||||
-
|
|
||||||
- init_freerdp (rdp_tab);
|
|
||||||
- init_display (rdp_tab);
|
|
||||||
-
|
|
||||||
- do
|
|
||||||
- {
|
|
||||||
- authentication_error = FALSE;
|
|
||||||
|
|
||||||
- /* Run FreeRDP session */
|
|
||||||
- success = freerdp_connect (priv->freerdp_session);
|
|
||||||
- if (!success)
|
|
||||||
- {
|
|
||||||
- authentication_error = freerdp_get_last_error (priv->freerdp_session->context) == 0x20009 ||
|
|
||||||
- freerdp_get_last_error (priv->freerdp_session->context) == 0x2000c;
|
|
||||||
-
|
|
||||||
- cancelled = freerdp_get_last_error (priv->freerdp_session->context) == 0x2000b;
|
|
||||||
-
|
|
||||||
- freerdp_free (priv->freerdp_session);
|
|
||||||
- init_freerdp (rdp_tab);
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
- while (!success && authentication_error);
|
|
||||||
+ /* Run FreeRDP session */
|
|
||||||
+ success = freerdp_connect (priv->freerdp_session);
|
|
||||||
|
|
||||||
if (!success)
|
|
||||||
{
|
|
||||||
gtk_window_unfullscreen (window);
|
|
||||||
- if (!cancelled)
|
|
||||||
- vinagre_utils_show_error_dialog (_("Error connecting to host."),
|
|
||||||
- NULL,
|
|
||||||
- window);
|
|
||||||
+ vinagre_utils_show_error_dialog (_("Error connecting to host."),
|
|
||||||
+ NULL,
|
|
||||||
+ window);
|
|
||||||
g_idle_add ((GSourceFunc) idle_close, rdp_tab);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
- priv->authentication_attempts = 0;
|
|
||||||
priv->update_id = g_idle_add ((GSourceFunc) update, rdp_tab);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
--
|
|
||||||
2.9.3
|
|
||||||
|
|
Reference in New Issue