Update gnome-remote-desktop

- Update to 0.1.9
- Backport race condition crash fix
- Rebase anon-tls patches
- Cleanup left-over patches
This commit is contained in:
Jonas Ådahl 2020-09-14 10:36:55 +02:00
parent dd976f72bd
commit ef24ef5b54
7 changed files with 168 additions and 220 deletions

View File

@ -1,25 +0,0 @@
From 8f760d73df6011330cd09da7ca7b8a3f40c9a3ef Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
Date: Tue, 7 Aug 2018 13:35:43 +0200
Subject: [PATCH] meson.build: Bump pipewire requirement to 0.2.2
---
meson.build | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/meson.build b/meson.build
index 6951b89..34ec5ea 100644
--- a/meson.build
+++ b/meson.build
@@ -10,7 +10,7 @@ gnome = import('gnome')
glib_dep = dependency('glib-2.0')
gio_dep = dependency('gio-2.0')
gio_unix_dep = dependency('gio-unix-2.0')
-pipewire_dep = dependency('libpipewire-0.1')
+pipewire_dep = dependency('libpipewire-0.2', version: '>= 0.2.2')
systemd_dep = dependency('systemd')
libvncserver_dep = dependency('libvncserver')
libsecret_dep = dependency('libsecret-1')
--
2.17.1

View File

@ -1,84 +0,0 @@
From add0ea34fd1d6835c99aebeb4e56b805b38e53ec Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
Date: Mon, 1 Oct 2018 18:02:39 +0200
Subject: [PATCH 1/2] session/vnc: Don't requeue close session idle
If being closed due to a PipeWire error, RFB will still process state
and invoke callbacks when cleaning up the RFB screen, meaning we'd
requeue the close session idle handler. Avoid this by avoiding
requeueing if there is already one queued, and don't mark is as unqueued
until after actually stopping the session.
---
src/grd-session-vnc.c | 28 ++++++++++++++++++----------
1 file changed, 18 insertions(+), 10 deletions(-)
diff --git a/src/grd-session-vnc.c b/src/grd-session-vnc.c
index ce4dd29..3c98eeb 100644
--- a/src/grd-session-vnc.c
+++ b/src/grd-session-vnc.c
@@ -165,6 +165,16 @@ grd_session_vnc_draw_buffer (GrdSessionVnc *session_vnc,
rfbProcessEvents (session_vnc->rfb_screen, 0);
}
+static void
+maybe_queue_close_session_idle (GrdSessionVnc *session_vnc)
+{
+ if (session_vnc->close_session_idle_id)
+ return;
+
+ session_vnc->close_session_idle_id =
+ g_idle_add (close_session_idle, session_vnc);
+}
+
static void
handle_client_gone (rfbClientPtr rfb_client)
{
@@ -172,8 +182,7 @@ handle_client_gone (rfbClientPtr rfb_client)
g_debug ("VNC client gone");
- session_vnc->close_session_idle_id =
- g_idle_add (close_session_idle, session_vnc);
+ maybe_queue_close_session_idle (session_vnc);
}
static void
@@ -670,12 +679,6 @@ grd_session_vnc_stop (GrdSession *session)
g_debug ("Stopping VNC session");
- if (session_vnc->close_session_idle_id)
- {
- g_source_remove (session_vnc->close_session_idle_id);
- session_vnc->close_session_idle_id = 0;
- }
-
g_clear_object (&session_vnc->pipewire_stream);
grd_session_vnc_detach_source (session_vnc);
@@ -683,6 +686,12 @@ grd_session_vnc_stop (GrdSession *session)
g_clear_object (&session_vnc->connection);
g_clear_pointer (&session_vnc->rfb_screen->frameBuffer, g_free);
g_clear_pointer (&session_vnc->rfb_screen, (GDestroyNotify) rfbScreenCleanup);
+
+ if (session_vnc->close_session_idle_id)
+ {
+ g_source_remove (session_vnc->close_session_idle_id);
+ session_vnc->close_session_idle_id = 0;
+ }
}
static gboolean
@@ -703,8 +712,7 @@ on_pipwire_stream_closed (GrdVncPipeWireStream *stream,
{
g_warning ("PipeWire stream closed, closing client");
- session_vnc->close_session_idle_id =
- g_idle_add (close_session_idle, session_vnc);
+ maybe_queue_close_session_idle (session_vnc);
}
static void
--
2.17.1

View File

@ -0,0 +1,80 @@
From ab97841629f5f3f4fab9993b6255b6ae04828b9c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
Date: Wed, 9 Sep 2020 10:14:20 +0200
Subject: [PATCH] vnc: Drop frames if client is gone
Frames from PipeWire are posted asynchronously from a I/O thread to the
main thread where they are turned into VNC frame updates and cursor
movements. On the other hand, sessions are closed asynchronously when
the VNC client disappears. If a frame ended up on the main thread after
a client disappeared but before the session and stream was closed, we'd
try to turn the new frames into VNC updates without a client being
available, causing use after free.
Fix this by dropping frames that happens during this time frame.
Closes: https://gitlab.gnome.org/GNOME/gnome-remote-desktop/-/issues/43
---
src/grd-session-vnc.c | 7 +++++++
src/grd-session-vnc.h | 2 ++
src/grd-vnc-pipewire-stream.c | 8 ++++++++
3 files changed, 17 insertions(+)
diff --git a/src/grd-session-vnc.c b/src/grd-session-vnc.c
index 813838a..a06d34d 100644
--- a/src/grd-session-vnc.c
+++ b/src/grd-session-vnc.c
@@ -209,6 +209,12 @@ maybe_queue_close_session_idle (GrdSessionVnc *session_vnc)
g_idle_add (close_session_idle, session_vnc);
}
+gboolean
+grd_session_vnc_is_client_gone (GrdSessionVnc *session_vnc)
+{
+ return !session_vnc->rfb_client;
+}
+
static void
handle_client_gone (rfbClientPtr rfb_client)
{
@@ -218,6 +224,7 @@ handle_client_gone (rfbClientPtr rfb_client)
grd_session_vnc_detach_source (session_vnc);
maybe_queue_close_session_idle (session_vnc);
+ session_vnc->rfb_client = NULL;
}
static void
diff --git a/src/grd-session-vnc.h b/src/grd-session-vnc.h
index 579a12a..07678c8 100644
--- a/src/grd-session-vnc.h
+++ b/src/grd-session-vnc.h
@@ -57,4 +57,6 @@ void grd_session_vnc_move_cursor (GrdSessionVnc *session_vnc,
int grd_session_vnc_get_framebuffer_stride (GrdSessionVnc *session_vnc);
+gboolean grd_session_vnc_is_client_gone (GrdSessionVnc *session_vnc);
+
#endif /* GRD_SESSION_VNC_H */
diff --git a/src/grd-vnc-pipewire-stream.c b/src/grd-vnc-pipewire-stream.c
index 78793c4..96dd7c9 100644
--- a/src/grd-vnc-pipewire-stream.c
+++ b/src/grd-vnc-pipewire-stream.c
@@ -234,6 +234,14 @@ do_render (struct spa_loop *loop,
if (!frame)
return 0;
+ if (grd_session_vnc_is_client_gone (stream->session))
+ {
+ g_free (frame->data);
+ g_clear_pointer (&frame->rfb_cursor, rfbFreeCursor);
+ g_free (frame);
+ return 0;
+ }
+
if (frame->rfb_cursor)
grd_session_vnc_set_cursor (stream->session, frame->rfb_cursor);
--
2.26.2

View File

@ -1,28 +0,0 @@
From 59188d81cf8936cd9f5400df040d875427251bf2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
Date: Mon, 1 Oct 2018 18:05:07 +0200
Subject: [PATCH 2/2] vnc-pipewire-stream: Close session when disconnected
When there is an active stream, and we're disconnected from PipeWire
(e.g. because it terminated), close the session.
---
src/grd-vnc-pipewire-stream.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/src/grd-vnc-pipewire-stream.c b/src/grd-vnc-pipewire-stream.c
index 66d66a0..d6454b8 100644
--- a/src/grd-vnc-pipewire-stream.c
+++ b/src/grd-vnc-pipewire-stream.c
@@ -392,6 +392,9 @@ on_state_changed (void *user_data,
}
break;
case PW_REMOTE_STATE_UNCONNECTED:
+ if (stream->pipewire_stream)
+ g_signal_emit (stream, signals[CLOSED], 0);
+ break;
case PW_REMOTE_STATE_CONNECTING:
break;
}
--
2.17.1

View File

@ -1,27 +1,30 @@
%global systemd_unit gnome-remote-desktop.service %global systemd_unit gnome-remote-desktop.service
Name: gnome-remote-desktop Name: gnome-remote-desktop
Version: 0.1.8 Version: 0.1.9
Release: 3%{?dist} Release: 1%{?dist}
Summary: GNOME Remote Desktop screen share service Summary: GNOME Remote Desktop screen share service
License: GPLv2+ License: GPLv2+
URL: https://gitlab.gnome.org/jadahl/gnome-remote-desktop URL: https://gitlab.gnome.org/jadahl/gnome-remote-desktop
Source0: https://gitlab.gnome.org/jadahl/gnome-remote-desktop/uploads/20e4965351cdbd8dc32ff9801e884b91/gnome-remote-desktop-0.1.8.tar.xz Source0: https://download.gnome.org/sources/gnome-remote-desktop/0.1/gnome-remote-desktop-0.1.9.tar.xz
# Avoid race condition on disconnect
Patch0: 0001-vnc-Drop-frames-if-client-is-gone.patch
# Adds encryption support (requires patched LibVNCServer) # Adds encryption support (requires patched LibVNCServer)
Patch0: anon-tls-support.patch Patch1: gnutls-anontls.patch
Patch1: 0001-vnc-pipewire-stream-Handle-stride-mismatch.patch
BuildRequires: git BuildRequires: git
BuildRequires: gcc BuildRequires: gcc
BuildRequires: meson >= 0.36.0 BuildRequires: meson >= 0.36.0
BuildRequires: pkgconfig BuildRequires: pkgconfig
BuildRequires: pkgconfig(cairo)
BuildRequires: pkgconfig(glib-2.0) >= 2.32 BuildRequires: pkgconfig(glib-2.0) >= 2.32
BuildRequires: pkgconfig(gio-unix-2.0) >= 2.32 BuildRequires: pkgconfig(gio-unix-2.0) >= 2.32
BuildRequires: pkgconfig(libpipewire-0.3) >= 0.3.0 BuildRequires: pkgconfig(libpipewire-0.3) >= 0.3.0
BuildRequires: pkgconfig(libvncserver) >= 0.9.11-7 BuildRequires: pkgconfig(libvncserver) >= 0.9.11-7
BuildRequires: pkgconfig(freerdp2)
BuildRequires: pkgconfig(libsecret-1) BuildRequires: pkgconfig(libsecret-1)
BuildRequires: pkgconfig(libnotify) BuildRequires: pkgconfig(libnotify)
BuildRequires: pkgconfig(gnutls) BuildRequires: pkgconfig(gnutls)
@ -71,6 +74,11 @@ GNOME desktop environment.
%changelog %changelog
* Mon Sep 14 2020 Jonas Ådahl <jadahl@redhat.com> - 0.1.9-1
- Update to 0.1.9
- Backport race condition crash fix
- Rebase anon-tls patches
* Thu Aug 27 2020 Ray Strode <rstrode@redhat.com> - 0.1.8-3 * Thu Aug 27 2020 Ray Strode <rstrode@redhat.com> - 0.1.8-3
- Fix crash - Fix crash
Related: #1844993 Related: #1844993

View File

@ -1,4 +1,4 @@
From f431e71d2a40db2fcfc8f88ba5899b4b938b4c2f Mon Sep 17 00:00:00 2001 From 546151b4e15fd45901f38172435cd9aa63893727 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com> From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
Date: Thu, 14 Jun 2018 12:21:37 +0200 Date: Thu, 14 Jun 2018 12:21:37 +0200
Subject: [PATCH 1/6] vnc: Add anonymous TLS encryption support Subject: [PATCH 1/6] vnc: Add anonymous TLS encryption support
@ -25,13 +25,13 @@ VNC connection.
create mode 100644 src/grd-vnc-tls.h create mode 100644 src/grd-vnc-tls.h
diff --git a/meson.build b/meson.build diff --git a/meson.build b/meson.build
index 516656e..db77711 100644 index af423a4..813c97f 100644
--- a/meson.build --- a/meson.build
+++ b/meson.build +++ b/meson.build
@@ -15,6 +15,7 @@ libvncserver_dep = dependency('libvncserver') @@ -20,6 +20,7 @@ libvncclient_dep = dependency('libvncclient')
libvncclient_dep = dependency('libvncclient')
libsecret_dep = dependency('libsecret-1') libsecret_dep = dependency('libsecret-1')
libnotify_dep = dependency('libnotify') libnotify_dep = dependency('libnotify')
winpr_dep = dependency('winpr2', version: freerdp_req)
+gnutls_dep = dependency('gnutls') +gnutls_dep = dependency('gnutls')
cdata = configuration_data() cdata = configuration_data()
@ -52,7 +52,7 @@ index ffab821..4333863 100644
+ +
#endif /* GRD_ENUMS_H */ #endif /* GRD_ENUMS_H */
diff --git a/src/grd-session-vnc.c b/src/grd-session-vnc.c diff --git a/src/grd-session-vnc.c b/src/grd-session-vnc.c
index 4cdc379..6d489cc 100644 index a06d34d..d014315 100644
--- a/src/grd-session-vnc.c --- a/src/grd-session-vnc.c
+++ b/src/grd-session-vnc.c +++ b/src/grd-session-vnc.c
@@ -44,7 +44,9 @@ struct _GrdSessionVnc @@ -44,7 +44,9 @@ struct _GrdSessionVnc
@ -65,7 +65,7 @@ index 4cdc379..6d489cc 100644
GSource *source; GSource *source;
rfbScreenInfoPtr rfb_screen; rfbScreenInfoPtr rfb_screen;
rfbClientPtr rfb_client; rfbClientPtr rfb_client;
@@ -508,12 +510,30 @@ check_rfb_password (rfbClientPtr rfb_client, @@ -518,12 +520,30 @@ check_rfb_password (rfbClientPtr rfb_client,
} }
} }
@ -96,7 +96,7 @@ index 4cdc379..6d489cc 100644
static void static void
init_vnc_session (GrdSessionVnc *session_vnc) init_vnc_session (GrdSessionVnc *session_vnc)
{ {
@@ -554,33 +574,74 @@ init_vnc_session (GrdSessionVnc *session_vnc) @@ -564,33 +584,74 @@ init_vnc_session (GrdSessionVnc *session_vnc)
rfbProcessEvents (rfb_screen, 0); rfbProcessEvents (rfb_screen, 0);
} }
@ -185,7 +185,7 @@ index 4cdc379..6d489cc 100644
} }
return G_SOURCE_CONTINUE; return G_SOURCE_CONTINUE;
@@ -593,7 +654,10 @@ grd_session_vnc_attach_source (GrdSessionVnc *session_vnc) @@ -603,7 +664,10 @@ grd_session_vnc_attach_source (GrdSessionVnc *session_vnc)
socket = g_socket_connection_get_socket (session_vnc->connection); socket = g_socket_connection_get_socket (session_vnc->connection);
session_vnc->source = g_socket_create_source (socket, session_vnc->source = g_socket_create_source (socket,
@ -197,7 +197,7 @@ index 4cdc379..6d489cc 100644
NULL); NULL);
g_source_set_callback (session_vnc->source, g_source_set_callback (session_vnc->source,
(GSourceFunc) handle_socket_data, (GSourceFunc) handle_socket_data,
@@ -619,8 +683,10 @@ grd_session_vnc_new (GrdVncServer *vnc_server, @@ -629,8 +693,10 @@ grd_session_vnc_new (GrdVncServer *vnc_server,
"context", context, "context", context,
NULL); NULL);
@ -208,7 +208,7 @@ index 4cdc379..6d489cc 100644
grd_session_vnc_attach_source (session_vnc); grd_session_vnc_attach_source (session_vnc);
init_vnc_session (session_vnc); init_vnc_session (session_vnc);
@@ -635,6 +701,8 @@ grd_session_vnc_dispose (GObject *object) @@ -645,6 +711,8 @@ grd_session_vnc_dispose (GObject *object)
g_assert (!session_vnc->rfb_screen); g_assert (!session_vnc->rfb_screen);
@ -218,7 +218,7 @@ index 4cdc379..6d489cc 100644
G_OBJECT_CLASS (grd_session_vnc_parent_class)->dispose (object); G_OBJECT_CLASS (grd_session_vnc_parent_class)->dispose (object);
diff --git a/src/grd-session-vnc.h b/src/grd-session-vnc.h diff --git a/src/grd-session-vnc.h b/src/grd-session-vnc.h
index 25919b6..e0601c3 100644 index 07678c8..bba3d56 100644
--- a/src/grd-session-vnc.h --- a/src/grd-session-vnc.h
+++ b/src/grd-session-vnc.h +++ b/src/grd-session-vnc.h
@@ -36,6 +36,9 @@ G_DECLARE_FINAL_TYPE (GrdSessionVnc, @@ -36,6 +36,9 @@ G_DECLARE_FINAL_TYPE (GrdSessionVnc,
@ -231,7 +231,7 @@ index 25919b6..e0601c3 100644
GrdSessionVnc *grd_session_vnc_new (GrdVncServer *vnc_server, GrdSessionVnc *grd_session_vnc_new (GrdVncServer *vnc_server,
GSocketConnection *connection); GSocketConnection *connection);
@@ -53,6 +56,18 @@ void grd_session_vnc_move_cursor (GrdSessionVnc *session_vnc, @@ -55,8 +58,20 @@ void grd_session_vnc_move_cursor (GrdSessionVnc *session_vnc,
int x, int x,
int y); int y);
@ -239,6 +239,8 @@ index 25919b6..e0601c3 100644
+ +
int grd_session_vnc_get_framebuffer_stride (GrdSessionVnc *session_vnc); int grd_session_vnc_get_framebuffer_stride (GrdSessionVnc *session_vnc);
gboolean grd_session_vnc_is_client_gone (GrdSessionVnc *session_vnc);
+rfbClientPtr grd_session_vnc_get_rfb_client (GrdSessionVnc *session_vnc); +rfbClientPtr grd_session_vnc_get_rfb_client (GrdSessionVnc *session_vnc);
+ +
+void grd_session_vnc_grab_socket (GrdSessionVnc *session_vnc, +void grd_session_vnc_grab_socket (GrdSessionVnc *session_vnc,
@ -251,10 +253,10 @@ index 25919b6..e0601c3 100644
+ +
#endif /* GRD_SESSION_VNC_H */ #endif /* GRD_SESSION_VNC_H */
diff --git a/src/grd-settings.c b/src/grd-settings.c diff --git a/src/grd-settings.c b/src/grd-settings.c
index bdf8211..7324310 100644 index 3af87be..f37f2da 100644
--- a/src/grd-settings.c --- a/src/grd-settings.c
+++ b/src/grd-settings.c +++ b/src/grd-settings.c
@@ -48,6 +48,7 @@ struct _GrdSettings @@ -60,6 +60,7 @@ struct _GrdSettings
gboolean view_only; gboolean view_only;
GrdVncAuthMethod auth_method; GrdVncAuthMethod auth_method;
int port; int port;
@ -262,7 +264,7 @@ index bdf8211..7324310 100644
} vnc; } vnc;
}; };
@@ -120,6 +121,12 @@ grd_settings_get_vnc_auth_method (GrdSettings *settings) @@ -232,6 +233,12 @@ grd_settings_get_vnc_auth_method (GrdSettings *settings)
return settings->vnc.auth_method; return settings->vnc.auth_method;
} }
@ -273,9 +275,9 @@ index bdf8211..7324310 100644
+} +}
+ +
static void static void
update_vnc_view_only (GrdSettings *settings) update_rdp_tls_cert (GrdSettings *settings)
{ {
@@ -134,6 +141,13 @@ update_vnc_auth_method (GrdSettings *settings) @@ -267,6 +274,13 @@ update_vnc_auth_method (GrdSettings *settings)
"auth-method"); "auth-method");
} }
@ -287,9 +289,9 @@ index bdf8211..7324310 100644
+} +}
+ +
static void static void
on_vnc_settings_changed (GSettings *vnc_settings, on_rdp_settings_changed (GSettings *rdp_settings,
const char *key, const char *key,
@@ -149,6 +163,11 @@ on_vnc_settings_changed (GSettings *vnc_settings, @@ -304,6 +318,11 @@ on_vnc_settings_changed (GSettings *vnc_settings,
update_vnc_auth_method (settings); update_vnc_auth_method (settings);
g_signal_emit (settings, signals[VNC_AUTH_METHOD_CHANGED], 0); g_signal_emit (settings, signals[VNC_AUTH_METHOD_CHANGED], 0);
} }
@ -301,16 +303,16 @@ index bdf8211..7324310 100644
} }
static void static void
@@ -172,6 +191,8 @@ grd_settings_init (GrdSettings *settings) @@ -335,6 +354,8 @@ grd_settings_init (GrdSettings *settings)
update_vnc_auth_method (settings);
settings->rdp.port = GRD_RDP_SERVER_PORT;
settings->vnc.port = GRD_VNC_SERVER_PORT; settings->vnc.port = GRD_VNC_SERVER_PORT;
+ +
+ update_vnc_encryption (settings); + update_vnc_encryption (settings);
} }
static void static void
@@ -195,4 +216,11 @@ grd_settings_class_init (GrdSettingsClass *klass) @@ -379,4 +400,11 @@ grd_settings_class_init (GrdSettingsClass *klass)
0, 0,
NULL, NULL, NULL, NULL, NULL, NULL,
G_TYPE_NONE, 0); G_TYPE_NONE, 0);
@ -323,10 +325,10 @@ index bdf8211..7324310 100644
+ G_TYPE_NONE, 0); + G_TYPE_NONE, 0);
} }
diff --git a/src/grd-settings.h b/src/grd-settings.h diff --git a/src/grd-settings.h b/src/grd-settings.h
index e4e0c09..0575ec1 100644 index e12e47e..b940fdb 100644
--- a/src/grd-settings.h --- a/src/grd-settings.h
+++ b/src/grd-settings.h +++ b/src/grd-settings.h
@@ -45,4 +45,6 @@ gboolean grd_settings_get_vnc_view_only (GrdSettings *settings); @@ -64,4 +64,6 @@ gboolean grd_settings_get_vnc_view_only (GrdSettings *settings);
GrdVncAuthMethod grd_settings_get_vnc_auth_method (GrdSettings *settings); GrdVncAuthMethod grd_settings_get_vnc_auth_method (GrdSettings *settings);
@ -899,10 +901,10 @@ index 0000000..135ef8c
+ +
+#endif /* GRD_VNC_TLS_H */ +#endif /* GRD_VNC_TLS_H */
diff --git a/src/meson.build b/src/meson.build diff --git a/src/meson.build b/src/meson.build
index 0f76fab..9d2f1ce 100644 index 1b6425d..17579b1 100644
--- a/src/meson.build --- a/src/meson.build
+++ b/src/meson.build +++ b/src/meson.build
@@ -21,6 +21,8 @@ daemon_sources = files([ @@ -33,6 +33,8 @@ daemon_sources = files([
'grd-vnc-pipewire-stream.h', 'grd-vnc-pipewire-stream.h',
'grd-vnc-server.c', 'grd-vnc-server.c',
'grd-vnc-server.h', 'grd-vnc-server.h',
@ -911,21 +913,21 @@ index 0f76fab..9d2f1ce 100644
]) ])
gen_daemon_sources = [] gen_daemon_sources = []
@@ -51,7 +53,8 @@ executable('gnome-remote-desktop-daemon', @@ -66,7 +68,8 @@ executable('gnome-remote-desktop-daemon',
pipewire_dep,
libvncserver_dep, libvncserver_dep,
libsecret_dep, libsecret_dep,
- libnotify_dep], libnotify_dep,
+ libnotify_dep, - winpr_dep],
+ winpr_dep,
+ gnutls_dep], + gnutls_dep],
include_directories: [configinc], include_directories: [configinc],
install: true, install: true,
install_dir: libexecdir) install_dir: libexecdir)
diff --git a/src/org.gnome.desktop.remote-desktop.gschema.xml.in b/src/org.gnome.desktop.remote-desktop.gschema.xml.in diff --git a/src/org.gnome.desktop.remote-desktop.gschema.xml.in b/src/org.gnome.desktop.remote-desktop.gschema.xml.in
index a5c2022..846e65b 100644 index 4b6e593..0086d99 100644
--- a/src/org.gnome.desktop.remote-desktop.gschema.xml.in --- a/src/org.gnome.desktop.remote-desktop.gschema.xml.in
+++ b/src/org.gnome.desktop.remote-desktop.gschema.xml.in +++ b/src/org.gnome.desktop.remote-desktop.gschema.xml.in
@@ -23,5 +23,15 @@ @@ -49,5 +49,15 @@
* password - by requiring the remote client to provide a known password * password - by requiring the remote client to provide a known password
</description> </description>
</key> </key>
@ -942,10 +944,10 @@ index a5c2022..846e65b 100644
</schema> </schema>
</schemalist> </schemalist>
-- --
2.25.1 2.26.2
From 73c96bb84856362e2446645533bfff8af2e90529 Mon Sep 17 00:00:00 2001 From 2e46518f421fd8704770bb6742accfacba3570aa Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com> From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
Date: Wed, 27 Nov 2019 11:02:09 +0100 Date: Wed, 27 Nov 2019 11:02:09 +0100
Subject: [PATCH 2/6] session-vnc: Add paused/resumed signals Subject: [PATCH 2/6] session-vnc: Add paused/resumed signals
@ -958,7 +960,7 @@ out-of-socket source.
1 file changed, 65 insertions(+), 7 deletions(-) 1 file changed, 65 insertions(+), 7 deletions(-)
diff --git a/src/grd-session-vnc.c b/src/grd-session-vnc.c diff --git a/src/grd-session-vnc.c b/src/grd-session-vnc.c
index 6d489cc..afe5889 100644 index d014315..7edd407 100644
--- a/src/grd-session-vnc.c --- a/src/grd-session-vnc.c
+++ b/src/grd-session-vnc.c +++ b/src/grd-session-vnc.c
@@ -40,14 +40,27 @@ @@ -40,14 +40,27 @@
@ -998,7 +1000,7 @@ index 6d489cc..afe5889 100644
static gboolean static gboolean
close_session_idle (gpointer user_data); close_session_idle (gpointer user_data);
@@ -215,7 +228,8 @@ handle_client_gone (rfbClientPtr rfb_client) @@ -224,7 +237,8 @@ handle_client_gone (rfbClientPtr rfb_client)
g_debug ("VNC client gone"); g_debug ("VNC client gone");
@ -1006,9 +1008,9 @@ index 6d489cc..afe5889 100644
+ grd_session_vnc_pause (session_vnc); + grd_session_vnc_pause (session_vnc);
+ +
maybe_queue_close_session_idle (session_vnc); maybe_queue_close_session_idle (session_vnc);
session_vnc->rfb_client = NULL;
} }
@@ -293,7 +307,7 @@ handle_new_client (rfbClientPtr rfb_client)
@@ -283,7 +297,7 @@ handle_new_client (rfbClientPtr rfb_client)
session_vnc->prompt_cancellable, session_vnc->prompt_cancellable,
prompt_response_callback, prompt_response_callback,
session_vnc); session_vnc);
@ -1017,7 +1019,7 @@ index 6d489cc..afe5889 100644
return RFB_CLIENT_ON_HOLD; return RFB_CLIENT_ON_HOLD;
case GRD_VNC_AUTH_METHOD_PASSWORD: case GRD_VNC_AUTH_METHOD_PASSWORD:
session_vnc->rfb_screen->passwordCheck = check_rfb_password; session_vnc->rfb_screen->passwordCheck = check_rfb_password;
@@ -501,7 +515,7 @@ check_rfb_password (rfbClientPtr rfb_client, @@ -511,7 +525,7 @@ check_rfb_password (rfbClientPtr rfb_client,
if (memcmp (challenge_encrypted, response_encrypted, len) == 0) if (memcmp (challenge_encrypted, response_encrypted, len) == 0)
{ {
grd_session_start (GRD_SESSION (session_vnc)); grd_session_start (GRD_SESSION (session_vnc));
@ -1026,7 +1028,7 @@ index 6d489cc..afe5889 100644
return TRUE; return TRUE;
} }
else else
@@ -671,6 +685,36 @@ grd_session_vnc_detach_source (GrdSessionVnc *session_vnc) @@ -681,6 +695,36 @@ grd_session_vnc_detach_source (GrdSessionVnc *session_vnc)
g_clear_pointer (&session_vnc->source, g_source_destroy); g_clear_pointer (&session_vnc->source, g_source_destroy);
} }
@ -1063,7 +1065,7 @@ index 6d489cc..afe5889 100644
GrdSessionVnc * GrdSessionVnc *
grd_session_vnc_new (GrdVncServer *vnc_server, grd_session_vnc_new (GrdVncServer *vnc_server,
GSocketConnection *connection) GSocketConnection *connection)
@@ -688,6 +732,7 @@ grd_session_vnc_new (GrdVncServer *vnc_server, @@ -698,6 +742,7 @@ grd_session_vnc_new (GrdVncServer *vnc_server,
grd_session_vnc_grab_socket (session_vnc, vnc_socket_grab_func); grd_session_vnc_grab_socket (session_vnc, vnc_socket_grab_func);
grd_session_vnc_attach_source (session_vnc); grd_session_vnc_attach_source (session_vnc);
@ -1071,7 +1073,7 @@ index 6d489cc..afe5889 100644
init_vnc_session (session_vnc); init_vnc_session (session_vnc);
@@ -717,7 +762,7 @@ grd_session_vnc_stop (GrdSession *session) @@ -727,7 +772,7 @@ grd_session_vnc_stop (GrdSession *session)
g_clear_object (&session_vnc->pipewire_stream); g_clear_object (&session_vnc->pipewire_stream);
@ -1080,8 +1082,8 @@ index 6d489cc..afe5889 100644
g_clear_object (&session_vnc->connection); g_clear_object (&session_vnc->connection);
g_clear_pointer (&session_vnc->rfb_screen->frameBuffer, g_free); g_clear_pointer (&session_vnc->rfb_screen->frameBuffer, g_free);
@@ -773,8 +818,8 @@ grd_session_vnc_stream_ready (GrdSession *session, @@ -783,8 +828,8 @@ grd_session_vnc_stream_ready (GrdSession *session,
G_CALLBACK (on_pipwire_stream_closed), G_CALLBACK (on_pipewire_stream_closed),
session_vnc); session_vnc);
- if (!session_vnc->source) - if (!session_vnc->source)
@ -1091,7 +1093,7 @@ index 6d489cc..afe5889 100644
} }
static void static void
@@ -793,4 +838,17 @@ grd_session_vnc_class_init (GrdSessionVncClass *klass) @@ -803,4 +848,17 @@ grd_session_vnc_class_init (GrdSessionVncClass *klass)
session_class->stop = grd_session_vnc_stop; session_class->stop = grd_session_vnc_stop;
session_class->stream_ready = grd_session_vnc_stream_ready; session_class->stream_ready = grd_session_vnc_stream_ready;
@ -1110,10 +1112,10 @@ index 6d489cc..afe5889 100644
+ G_TYPE_NONE, 0); + G_TYPE_NONE, 0);
} }
-- --
2.25.1 2.26.2
From fd139827f668c3fadf61a90b47c1b01a95ba0503 Mon Sep 17 00:00:00 2001 From b59c36ccf73939d32ccf5ab4eb47460a9fe415f3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com> From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
Date: Wed, 27 Nov 2019 11:03:46 +0100 Date: Wed, 27 Nov 2019 11:03:46 +0100
Subject: [PATCH 3/6] session-vnc: Add grd_session_vnc_dispatch() helper Subject: [PATCH 3/6] session-vnc: Add grd_session_vnc_dispatch() helper
@ -1126,10 +1128,10 @@ available that is not visible to the socket source.
2 files changed, 18 insertions(+), 10 deletions(-) 2 files changed, 18 insertions(+), 10 deletions(-)
diff --git a/src/grd-session-vnc.c b/src/grd-session-vnc.c diff --git a/src/grd-session-vnc.c b/src/grd-session-vnc.c
index afe5889..e26f145 100644 index 7edd407..29c94a1 100644
--- a/src/grd-session-vnc.c --- a/src/grd-session-vnc.c
+++ b/src/grd-session-vnc.c +++ b/src/grd-session-vnc.c
@@ -625,6 +625,21 @@ vnc_socket_grab_func (GrdSessionVnc *session_vnc, @@ -635,6 +635,21 @@ vnc_socket_grab_func (GrdSessionVnc *session_vnc,
return TRUE; return TRUE;
} }
@ -1151,7 +1153,7 @@ index afe5889..e26f145 100644
static gboolean static gboolean
handle_socket_data (GSocket *socket, handle_socket_data (GSocket *socket,
GIOCondition condition, GIOCondition condition,
@@ -641,16 +656,7 @@ handle_socket_data (GSocket *socket, @@ -651,16 +666,7 @@ handle_socket_data (GSocket *socket,
} }
else if (condition & G_IO_IN) else if (condition & G_IO_IN)
{ {
@ -1170,10 +1172,10 @@ index afe5889..e26f145 100644
else else
{ {
diff --git a/src/grd-session-vnc.h b/src/grd-session-vnc.h diff --git a/src/grd-session-vnc.h b/src/grd-session-vnc.h
index e0601c3..5caa9f4 100644 index bba3d56..58f635c 100644
--- a/src/grd-session-vnc.h --- a/src/grd-session-vnc.h
+++ b/src/grd-session-vnc.h +++ b/src/grd-session-vnc.h
@@ -68,6 +68,8 @@ void grd_session_vnc_grab_socket (GrdSessionVnc *session_vnc, @@ -72,6 +72,8 @@ void grd_session_vnc_grab_socket (GrdSessionVnc *session_vnc,
void grd_session_vnc_ungrab_socket (GrdSessionVnc *session_vnc, void grd_session_vnc_ungrab_socket (GrdSessionVnc *session_vnc,
GrdVncSocketGrabFunc grab_func); GrdVncSocketGrabFunc grab_func);
@ -1183,10 +1185,10 @@ index e0601c3..5caa9f4 100644
#endif /* GRD_SESSION_VNC_H */ #endif /* GRD_SESSION_VNC_H */
-- --
2.25.1 2.26.2
From 7bdf190a3a69cecfe8027ee499b5029cfb12f3da Mon Sep 17 00:00:00 2001 From 966b2ddbd1c03c9e20dc66e5ea9a2dfb39ba4bfa Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com> From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
Date: Wed, 27 Nov 2019 11:05:13 +0100 Date: Wed, 27 Nov 2019 11:05:13 +0100
Subject: [PATCH 4/6] vnc/tls: Add some logging Subject: [PATCH 4/6] vnc/tls: Add some logging
@ -1260,10 +1262,10 @@ index ec4758e..ac6c35f 100644
{ {
g_warning ("TLS handshake failed: %s", error->message); g_warning ("TLS handshake failed: %s", error->message);
-- --
2.25.1 2.26.2
From 15a28c9f383b260e9b1cef37a663bff7d2efa255 Mon Sep 17 00:00:00 2001 From e01d27dc9911f4d7ecfd232c7e389f4dabfd87de Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com> From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
Date: Wed, 27 Nov 2019 11:07:40 +0100 Date: Wed, 27 Nov 2019 11:07:40 +0100
Subject: [PATCH 5/6] vnc/tls: Dispatch also when data is pending outside of Subject: [PATCH 5/6] vnc/tls: Dispatch also when data is pending outside of
@ -1276,14 +1278,14 @@ epoll(). Deal with this by adding a custom source that dispatches as
long as there is data to read in those buffers. long as there is data to read in those buffers.
--- ---
src/grd-session-vnc.h | 2 + src/grd-session-vnc.h | 2 +
src/grd-vnc-tls.c | 92 ++++++++++++++++++++++++++++++++++++++++--- src/grd-vnc-tls.c | 90 ++++++++++++++++++++++++++++++++++++++++---
2 files changed, 88 insertions(+), 6 deletions(-) 2 files changed, 86 insertions(+), 6 deletions(-)
diff --git a/src/grd-session-vnc.h b/src/grd-session-vnc.h diff --git a/src/grd-session-vnc.h b/src/grd-session-vnc.h
index 5caa9f4..db1c7f3 100644 index 58f635c..0d01ad3 100644
--- a/src/grd-session-vnc.h --- a/src/grd-session-vnc.h
+++ b/src/grd-session-vnc.h +++ b/src/grd-session-vnc.h
@@ -68,6 +68,8 @@ void grd_session_vnc_grab_socket (GrdSessionVnc *session_vnc, @@ -72,6 +72,8 @@ void grd_session_vnc_grab_socket (GrdSessionVnc *session_vnc,
void grd_session_vnc_ungrab_socket (GrdSessionVnc *session_vnc, void grd_session_vnc_ungrab_socket (GrdSessionVnc *session_vnc,
GrdVncSocketGrabFunc grab_func); GrdVncSocketGrabFunc grab_func);
@ -1293,7 +1295,7 @@ index 5caa9f4..db1c7f3 100644
GrdVncServer * grd_session_vnc_get_vnc_server (GrdSessionVnc *session_vnc); GrdVncServer * grd_session_vnc_get_vnc_server (GrdSessionVnc *session_vnc);
diff --git a/src/grd-vnc-tls.c b/src/grd-vnc-tls.c diff --git a/src/grd-vnc-tls.c b/src/grd-vnc-tls.c
index ac6c35f..8f65225 100644 index ac6c35f..312b6b9 100644
--- a/src/grd-vnc-tls.c --- a/src/grd-vnc-tls.c
+++ b/src/grd-vnc-tls.c +++ b/src/grd-vnc-tls.c
@@ -41,6 +41,12 @@ typedef enum _GrdTlsHandshakeState @@ -41,6 +41,12 @@ typedef enum _GrdTlsHandshakeState
@ -1318,12 +1320,7 @@ index ac6c35f..8f65225 100644
} GrdVncTlsSession; } GrdVncTlsSession;
static gboolean static gboolean
@@ -296,16 +304,14 @@ grd_vnc_tls_peek_at_socket (rfbClientPtr rfb_client, @@ -299,13 +307,9 @@ grd_vnc_tls_peek_at_socket (rfbClientPtr rfb_client,
peekable_len = MIN (len, tls_session->peek_buffer_len);
memcpy (buf, tls_session->peek_buffer, peekable_len);
+ fprintf(stderr, ":::: %s:%d %s() - peeked %d bytes, can peek %d bytes\n", __FILE__, __LINE__, __func__,
+ peekable_len, tls_session->peek_buffer_len);
return peekable_len; return peekable_len;
} }
@ -1339,7 +1336,7 @@ index ac6c35f..8f65225 100644
if (tls_session->peek_buffer_len > 0) if (tls_session->peek_buffer_len > 0)
return TRUE; return TRUE;
@@ -315,6 +321,16 @@ grd_vnc_tls_has_pending_on_socket (rfbClientPtr rfb_client) @@ -315,6 +319,16 @@ grd_vnc_tls_has_pending_on_socket (rfbClientPtr rfb_client)
return FALSE; return FALSE;
} }
@ -1356,7 +1353,7 @@ index ac6c35f..8f65225 100644
static int static int
grd_vnc_tls_write_to_socket (rfbClientPtr rfb_client, grd_vnc_tls_write_to_socket (rfbClientPtr rfb_client,
const char *buf, const char *buf,
@@ -403,6 +419,62 @@ tls_handshake_grab_func (GrdSessionVnc *session_vnc, @@ -403,6 +417,62 @@ tls_handshake_grab_func (GrdSessionVnc *session_vnc,
return TRUE; return TRUE;
} }
@ -1419,7 +1416,7 @@ index ac6c35f..8f65225 100644
static void static void
rfb_tls_security_handler (rfbClientPtr rfb_client) rfb_tls_security_handler (rfbClientPtr rfb_client)
{ {
@@ -429,6 +501,14 @@ rfb_tls_security_handler (rfbClientPtr rfb_client) @@ -429,6 +499,14 @@ rfb_tls_security_handler (rfbClientPtr rfb_client)
rfb_client->hasPendingOnSocket = grd_vnc_tls_has_pending_on_socket; rfb_client->hasPendingOnSocket = grd_vnc_tls_has_pending_on_socket;
rfb_client->writeToSocket = grd_vnc_tls_write_to_socket; rfb_client->writeToSocket = grd_vnc_tls_write_to_socket;
@ -1435,10 +1432,10 @@ index ac6c35f..8f65225 100644
} }
-- --
2.25.1 2.26.2
From a85de2328db0a0d3412f13a5c9f3a0c2676b6239 Mon Sep 17 00:00:00 2001 From 682f3b4a8e985f00a00e761a086a15cb5e2b9b04 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com> From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
Date: Wed, 27 Nov 2019 16:48:00 +0100 Date: Wed, 27 Nov 2019 16:48:00 +0100
Subject: [PATCH 6/6] session-vnc: Set our own password handling function up Subject: [PATCH 6/6] session-vnc: Set our own password handling function up
@ -1457,7 +1454,7 @@ password prompt.
1 file changed, 2 insertions(+), 6 deletions(-) 1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/src/grd-session-vnc.c b/src/grd-session-vnc.c diff --git a/src/grd-session-vnc.c b/src/grd-session-vnc.c
index e26f145..740e68c 100644 index 29c94a1..ebe1540 100644
--- a/src/grd-session-vnc.c --- a/src/grd-session-vnc.c
+++ b/src/grd-session-vnc.c +++ b/src/grd-session-vnc.c
@@ -91,11 +91,6 @@ grd_session_vnc_pause (GrdSessionVnc *session_vnc); @@ -91,11 +91,6 @@ grd_session_vnc_pause (GrdSessionVnc *session_vnc);
@ -1472,7 +1469,7 @@ index e26f145..740e68c 100644
static void static void
swap_uint8 (uint8_t *a, swap_uint8 (uint8_t *a,
uint8_t *b) uint8_t *b)
@@ -300,7 +295,6 @@ handle_new_client (rfbClientPtr rfb_client) @@ -310,7 +305,6 @@ handle_new_client (rfbClientPtr rfb_client)
grd_session_vnc_pause (session_vnc); grd_session_vnc_pause (session_vnc);
return RFB_CLIENT_ON_HOLD; return RFB_CLIENT_ON_HOLD;
case GRD_VNC_AUTH_METHOD_PASSWORD: case GRD_VNC_AUTH_METHOD_PASSWORD:
@ -1480,7 +1477,7 @@ index e26f145..740e68c 100644
/* /*
* authPasswdData needs to be non NULL in libvncserver to trigger * authPasswdData needs to be non NULL in libvncserver to trigger
* password authentication. * password authentication.
@@ -584,6 +578,8 @@ init_vnc_session (GrdSessionVnc *session_vnc) @@ -594,6 +588,8 @@ init_vnc_session (GrdSessionVnc *session_vnc)
rfb_screen->frameBuffer = g_malloc0 (screen_width * screen_height * 4); rfb_screen->frameBuffer = g_malloc0 (screen_width * screen_height * 4);
memset (rfb_screen->frameBuffer, 0x1f, screen_width * screen_height * 4); memset (rfb_screen->frameBuffer, 0x1f, screen_width * screen_height * 4);
@ -1490,5 +1487,5 @@ index e26f145..740e68c 100644
rfbProcessEvents (rfb_screen, 0); rfbProcessEvents (rfb_screen, 0);
} }
-- --
2.25.1 2.26.2

View File

@ -1 +1 @@
SHA512 (gnome-remote-desktop-0.1.8.tar.xz) = 83e7d9e356c7121d6d102e2f0159f3ff20d039d705dd1ffa7c582a90aa2f433aa6f0153b972f1f2a4da928f842bfb7a950e7ba4b8ff6fda1deb8cf7792114315 SHA512 (gnome-remote-desktop-0.1.9.tar.xz) = 6ac2962c824634cd5322785b6d251e899ea38668010b18b1b50124497895d9c00752904abf01490e27b74e1661aeae39d83fbbd77b841329b1e0fd381c3ea440