Bump to 40.beta

This commit is contained in:
Jonas Ådahl 2021-03-04 23:03:04 +01:00
parent 0fcc3d4d82
commit 611daca9e5
4 changed files with 159 additions and 105 deletions

1
.gitignore vendored
View File

@ -1 +1,2 @@
/gnome-remote-desktop-0.1.*.tar.xz /gnome-remote-desktop-0.1.*.tar.xz
/gnome-remote-desktop-40.beta.tar.xz

View File

@ -1,22 +1,16 @@
%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.9 Version: 40.0~beta
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://download.gnome.org/sources/gnome-remote-desktop/0.1/gnome-remote-desktop-0.1.9.tar.xz Source0: https://download.gnome.org/sources/gnome-remote-desktop/40/gnome-remote-desktop-40.beta.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)
Patch1: gnutls-anontls.patch Patch0: gnutls-anontls.patch
# Copy using the right destination stride
Patch2: 0001-vnc-Copy-pixels-using-the-right-destination-stride.patch
BuildRequires: git BuildRequires: git
BuildRequires: gcc BuildRequires: gcc
@ -28,6 +22,9 @@ 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(freerdp2)
BuildRequires: pkgconfig(winpr2)
BuildRequires: pkgconfig(fuse3)
BuildRequires: pkgconfig(xkbcommon)
BuildRequires: pkgconfig(libsecret-1) BuildRequires: pkgconfig(libsecret-1)
BuildRequires: pkgconfig(libnotify) BuildRequires: pkgconfig(libnotify)
BuildRequires: pkgconfig(gnutls) BuildRequires: pkgconfig(gnutls)
@ -43,7 +40,7 @@ GNOME desktop environment.
%prep %prep
%autosetup -S git %autosetup -S git -n %{name}-40.beta
%build %build
@ -77,6 +74,9 @@ GNOME desktop environment.
%changelog %changelog
* Thu Mar 04 2021 Jonas Ådahl <jadahl@redhat.com> - 40.0~beta-1
- Bump to 40.beta
* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 0.1.9-3 * Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 0.1.9-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild

View File

@ -1,7 +1,7 @@
From 546151b4e15fd45901f38172435cd9aa63893727 Mon Sep 17 00:00:00 2001 From 8676ef6c32557234d08acb13d7524df5fa1f4bb2 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/7] vnc: Add anonymous TLS encryption support
Add support for encrypting the VNC connection using anonymous TLS. In Add support for encrypting the VNC connection using anonymous TLS. In
effect this means that the channel is encrypted using TLS but that no effect this means that the channel is encrypted using TLS but that no
@ -11,31 +11,31 @@ VNC connection.
--- ---
meson.build | 1 + meson.build | 1 +
src/grd-enums.h | 6 + src/grd-enums.h | 6 +
src/grd-session-vnc.c | 98 +++- src/grd-session-vnc.c | 120 ++++-
src/grd-session-vnc.h | 15 + src/grd-session-vnc.h | 17 +
src/grd-settings.c | 28 ++ src/grd-settings.c | 28 ++
src/grd-settings.h | 2 + src/grd-settings.h | 2 +
src/grd-vnc-server.c | 45 ++ src/grd-vnc-server.c | 45 ++
src/grd-vnc-tls.c | 444 ++++++++++++++++++ src/grd-vnc-tls.c | 444 ++++++++++++++++++
src/grd-vnc-tls.h | 28 ++ src/grd-vnc-tls.h | 28 ++
src/meson.build | 5 +- src/meson.build | 3 +
...nome.desktop.remote-desktop.gschema.xml.in | 10 + ...nome.desktop.remote-desktop.gschema.xml.in | 10 +
11 files changed, 666 insertions(+), 16 deletions(-) 11 files changed, 678 insertions(+), 26 deletions(-)
create mode 100644 src/grd-vnc-tls.c create mode 100644 src/grd-vnc-tls.c
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 af423a4..813c97f 100644 index 5e9ad04..9bbd5fc 100644
--- a/meson.build --- a/meson.build
+++ b/meson.build +++ b/meson.build
@@ -20,6 +20,7 @@ libvncclient_dep = dependency('libvncclient') @@ -40,6 +40,7 @@ endif
libsecret_dep = dependency('libsecret-1') if have_vnc
libnotify_dep = dependency('libnotify') libvncserver_dep = dependency('libvncserver')
winpr_dep = dependency('winpr2', version: freerdp_req) libvncclient_dep = dependency('libvncclient')
+gnutls_dep = dependency('gnutls') + gnutls_dep = dependency('gnutls')
endif
cdata = configuration_data() cdata = configuration_data()
cdata.set_quoted('GETTEXT_PACKAGE', 'gnome-remote-desktop')
diff --git a/src/grd-enums.h b/src/grd-enums.h diff --git a/src/grd-enums.h b/src/grd-enums.h
index ffab821..4333863 100644 index ffab821..4333863 100644
--- a/src/grd-enums.h --- a/src/grd-enums.h
@ -52,10 +52,10 @@ 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 a06d34d..d014315 100644 index 0e520dc..0c189fd 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 @@ -45,7 +45,9 @@ struct _GrdSessionVnc
{ {
GrdSession parent; GrdSession parent;
@ -65,7 +65,7 @@ index a06d34d..d014315 100644
GSource *source; GSource *source;
rfbScreenInfoPtr rfb_screen; rfbScreenInfoPtr rfb_screen;
rfbClientPtr rfb_client; rfbClientPtr rfb_client;
@@ -518,12 +520,30 @@ check_rfb_password (rfbClientPtr rfb_client, @@ -540,6 +542,12 @@ check_rfb_password (rfbClientPtr rfb_client,
} }
} }
@ -76,9 +76,10 @@ index a06d34d..d014315 100644
+} +}
+ +
int int
grd_session_vnc_get_framebuffer_stride (GrdSessionVnc *session_vnc) grd_session_vnc_get_stride_for_width (GrdSessionVnc *session_vnc,
{ int width)
return session_vnc->rfb_screen->paddedWidthInBytes; @@ -547,6 +555,18 @@ grd_session_vnc_get_stride_for_width (GrdSessionVnc *session_vnc,
return width * BGRX_BYTES_PER_PIXEL;
} }
+rfbClientPtr +rfbClientPtr
@ -96,7 +97,7 @@ index a06d34d..d014315 100644
static void static void
init_vnc_session (GrdSessionVnc *session_vnc) init_vnc_session (GrdSessionVnc *session_vnc)
{ {
@@ -564,33 +584,74 @@ init_vnc_session (GrdSessionVnc *session_vnc) @@ -590,44 +610,85 @@ init_vnc_session (GrdSessionVnc *session_vnc)
rfbProcessEvents (rfb_screen, 0); rfbProcessEvents (rfb_screen, 0);
} }
@ -131,6 +132,17 @@ index a06d34d..d014315 100644
+ session_vnc->pending_framebuffer_width, + session_vnc->pending_framebuffer_width,
+ session_vnc->pending_framebuffer_height); + session_vnc->pending_framebuffer_height);
+ session_vnc->pending_framebuffer_resize = FALSE; + session_vnc->pending_framebuffer_resize = FALSE;
+
+ /**
+ * This is a workaround. libvncserver is unable to handle clipboard
+ * changes early and either disconnects the client or crashes g-r-d
+ * if it receives rfbSendServerCutText too early altough the
+ * authentification process is already done.
+ * Doing this after resizing the framebuffer, seems to work fine,
+ * so enable the clipboard here and not when the remote desktop
+ * session proxy is acquired.
+ */
+ grd_clipboard_vnc_maybe_enable_clipboard (session_vnc->clipboard_vnc);
+ } + }
+ } + }
+ +
@ -172,6 +184,17 @@ index a06d34d..d014315 100644
- session_vnc->pending_framebuffer_width, - session_vnc->pending_framebuffer_width,
- session_vnc->pending_framebuffer_height); - session_vnc->pending_framebuffer_height);
- session_vnc->pending_framebuffer_resize = FALSE; - session_vnc->pending_framebuffer_resize = FALSE;
-
- /**
- * This is a workaround. libvncserver is unable to handle clipboard
- * changes early and either disconnects the client or crashes g-r-d
- * if it receives rfbSendServerCutText too early altough the
- * authentification process is already done.
- * Doing this after resizing the framebuffer, seems to work fine,
- * so enable the clipboard here and not when the remote desktop
- * session proxy is acquired.
- */
- grd_clipboard_vnc_maybe_enable_clipboard (session_vnc->clipboard_vnc);
- } - }
+ grd_session_stop (session); + grd_session_stop (session);
} }
@ -185,7 +208,7 @@ index a06d34d..d014315 100644
} }
return G_SOURCE_CONTINUE; return G_SOURCE_CONTINUE;
@@ -603,7 +664,10 @@ grd_session_vnc_attach_source (GrdSessionVnc *session_vnc) @@ -640,7 +701,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 +220,7 @@ index a06d34d..d014315 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,
@@ -629,8 +693,10 @@ grd_session_vnc_new (GrdVncServer *vnc_server, @@ -666,8 +730,10 @@ grd_session_vnc_new (GrdVncServer *vnc_server,
"context", context, "context", context,
NULL); NULL);
@ -208,7 +231,7 @@ index a06d34d..d014315 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);
@@ -645,6 +711,8 @@ grd_session_vnc_dispose (GObject *object) @@ -682,6 +748,8 @@ grd_session_vnc_dispose (GObject *object)
g_assert (!session_vnc->rfb_screen); g_assert (!session_vnc->rfb_screen);
@ -218,7 +241,7 @@ index a06d34d..d014315 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 07678c8..bba3d56 100644 index a532567..4e7b33d 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,14 +254,14 @@ index 07678c8..bba3d56 100644
GrdSessionVnc *grd_session_vnc_new (GrdVncServer *vnc_server, GrdSessionVnc *grd_session_vnc_new (GrdVncServer *vnc_server,
GSocketConnection *connection); GSocketConnection *connection);
@@ -55,8 +58,20 @@ void grd_session_vnc_move_cursor (GrdSessionVnc *session_vnc, @@ -62,6 +65,20 @@ void grd_session_vnc_set_client_clipboard_text (GrdSessionVnc *session_vnc,
int x, int grd_session_vnc_get_stride_for_width (GrdSessionVnc *session_vnc,
int y); int width);
+int grd_session_vnc_get_fd (GrdSessionVnc *session_vnc); +int grd_session_vnc_get_fd (GrdSessionVnc *session_vnc);
+ +
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); 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);
@ -253,7 +276,7 @@ index 07678c8..bba3d56 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 3af87be..f37f2da 100644 index d2f31d2..12d8693 100644
--- a/src/grd-settings.c --- a/src/grd-settings.c
+++ b/src/grd-settings.c +++ b/src/grd-settings.c
@@ -60,6 +60,7 @@ struct _GrdSettings @@ -60,6 +60,7 @@ struct _GrdSettings
@ -264,7 +287,7 @@ index 3af87be..f37f2da 100644
} vnc; } vnc;
}; };
@@ -232,6 +233,12 @@ grd_settings_get_vnc_auth_method (GrdSettings *settings) @@ -242,6 +243,12 @@ grd_settings_get_vnc_auth_method (GrdSettings *settings)
return settings->vnc.auth_method; return settings->vnc.auth_method;
} }
@ -277,7 +300,7 @@ index 3af87be..f37f2da 100644
static void static void
update_rdp_tls_cert (GrdSettings *settings) update_rdp_tls_cert (GrdSettings *settings)
{ {
@@ -267,6 +274,13 @@ update_vnc_auth_method (GrdSettings *settings) @@ -277,6 +284,13 @@ update_vnc_auth_method (GrdSettings *settings)
"auth-method"); "auth-method");
} }
@ -291,7 +314,7 @@ index 3af87be..f37f2da 100644
static void static void
on_rdp_settings_changed (GSettings *rdp_settings, on_rdp_settings_changed (GSettings *rdp_settings,
const char *key, const char *key,
@@ -304,6 +318,11 @@ on_vnc_settings_changed (GSettings *vnc_settings, @@ -314,6 +328,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);
} }
@ -303,7 +326,7 @@ index 3af87be..f37f2da 100644
} }
static void static void
@@ -335,6 +354,8 @@ grd_settings_init (GrdSettings *settings) @@ -345,6 +364,8 @@ grd_settings_init (GrdSettings *settings)
settings->rdp.port = GRD_RDP_SERVER_PORT; settings->rdp.port = GRD_RDP_SERVER_PORT;
settings->vnc.port = GRD_VNC_SERVER_PORT; settings->vnc.port = GRD_VNC_SERVER_PORT;
@ -312,7 +335,7 @@ index 3af87be..f37f2da 100644
} }
static void static void
@@ -379,4 +400,11 @@ grd_settings_class_init (GrdSettingsClass *klass) @@ -389,4 +410,11 @@ grd_settings_class_init (GrdSettingsClass *klass)
0, 0,
NULL, NULL, NULL, NULL, NULL, NULL,
G_TYPE_NONE, 0); G_TYPE_NONE, 0);
@ -901,10 +924,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 1b6425d..17579b1 100644 index 843746d..133cc60 100644
--- a/src/meson.build --- a/src/meson.build
+++ b/src/meson.build +++ b/src/meson.build
@@ -33,6 +33,8 @@ daemon_sources = files([ @@ -72,10 +72,13 @@ if have_vnc
'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',
@ -912,17 +935,12 @@ index 1b6425d..17579b1 100644
+ 'grd-vnc-tls.h', + 'grd-vnc-tls.h',
]) ])
gen_daemon_sources = [] deps += [
@@ -66,7 +68,8 @@ executable('gnome-remote-desktop-daemon',
libvncserver_dep, libvncserver_dep,
libsecret_dep, + gnutls_dep,
libnotify_dep, ]
- winpr_dep], endif
+ winpr_dep,
+ gnutls_dep],
include_directories: [configinc],
install: true,
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 4b6e593..0086d99 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
@ -944,13 +962,13 @@ index 4b6e593..0086d99 100644
</schema> </schema>
</schemalist> </schemalist>
-- --
2.26.2 2.29.2
From 2e46518f421fd8704770bb6742accfacba3570aa Mon Sep 17 00:00:00 2001 From 552e9c9add722e953a8da22bd54ba0fef7a9d6af 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/7] session-vnc: Add paused/resumed signals
Paused is when the socket sourec is detached, and resumed when attached. Paused is when the socket sourec is detached, and resumed when attached.
Meant to be used by the TLS channel security to a attach/detach Meant to be used by the TLS channel security to a attach/detach
@ -960,10 +978,10 @@ 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 d014315..7edd407 100644 index 0c189fd..596896d 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 @@ @@ -41,14 +41,27 @@
#define BGRX_SAMPLES_PER_PIXEL 3 #define BGRX_SAMPLES_PER_PIXEL 3
#define BGRX_BYTES_PER_PIXEL 4 #define BGRX_BYTES_PER_PIXEL 4
@ -991,7 +1009,7 @@ index d014315..7edd407 100644
rfbScreenInfoPtr rfb_screen; rfbScreenInfoPtr rfb_screen;
rfbClientPtr rfb_client; rfbClientPtr rfb_client;
@@ -73,7 +86,7 @@ struct _GrdSessionVnc @@ -76,7 +89,7 @@ struct _GrdSessionVnc
G_DEFINE_TYPE (GrdSessionVnc, grd_session_vnc, GRD_TYPE_SESSION); G_DEFINE_TYPE (GrdSessionVnc, grd_session_vnc, GRD_TYPE_SESSION);
static void static void
@ -1000,7 +1018,7 @@ index d014315..7edd407 100644
static gboolean static gboolean
close_session_idle (gpointer user_data); close_session_idle (gpointer user_data);
@@ -224,7 +237,8 @@ handle_client_gone (rfbClientPtr rfb_client) @@ -235,7 +248,8 @@ handle_client_gone (rfbClientPtr rfb_client)
g_debug ("VNC client gone"); g_debug ("VNC client gone");
@ -1010,7 +1028,7 @@ index d014315..7edd407 100644
maybe_queue_close_session_idle (session_vnc); maybe_queue_close_session_idle (session_vnc);
session_vnc->rfb_client = NULL; session_vnc->rfb_client = NULL;
} }
@@ -293,7 +307,7 @@ handle_new_client (rfbClientPtr rfb_client) @@ -304,7 +318,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);
@ -1019,7 +1037,7 @@ index d014315..7edd407 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;
@@ -511,7 +525,7 @@ check_rfb_password (rfbClientPtr rfb_client, @@ -533,7 +547,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));
@ -1028,7 +1046,7 @@ index d014315..7edd407 100644
return TRUE; return TRUE;
} }
else else
@@ -681,6 +695,36 @@ grd_session_vnc_detach_source (GrdSessionVnc *session_vnc) @@ -718,6 +732,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);
} }
@ -1065,7 +1083,7 @@ index d014315..7edd407 100644
GrdSessionVnc * GrdSessionVnc *
grd_session_vnc_new (GrdVncServer *vnc_server, grd_session_vnc_new (GrdVncServer *vnc_server,
GSocketConnection *connection) GSocketConnection *connection)
@@ -698,6 +742,7 @@ grd_session_vnc_new (GrdVncServer *vnc_server, @@ -735,6 +779,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);
@ -1073,7 +1091,7 @@ index d014315..7edd407 100644
init_vnc_session (session_vnc); init_vnc_session (session_vnc);
@@ -727,7 +772,7 @@ grd_session_vnc_stop (GrdSession *session) @@ -764,7 +809,7 @@ grd_session_vnc_stop (GrdSession *session)
g_clear_object (&session_vnc->pipewire_stream); g_clear_object (&session_vnc->pipewire_stream);
@ -1081,8 +1099,8 @@ index d014315..7edd407 100644
+ grd_session_vnc_pause (session_vnc); + grd_session_vnc_pause (session_vnc);
g_clear_object (&session_vnc->connection); g_clear_object (&session_vnc->connection);
g_clear_pointer (&session_vnc->rfb_screen->frameBuffer, g_free); g_clear_object (&session_vnc->clipboard_vnc);
@@ -783,8 +828,8 @@ grd_session_vnc_stream_ready (GrdSession *session, @@ -817,8 +862,8 @@ grd_session_vnc_stream_ready (GrdSession *session,
G_CALLBACK (on_pipewire_stream_closed), G_CALLBACK (on_pipewire_stream_closed),
session_vnc); session_vnc);
@ -1093,7 +1111,7 @@ index d014315..7edd407 100644
} }
static void static void
@@ -803,4 +848,17 @@ grd_session_vnc_class_init (GrdSessionVncClass *klass) @@ -837,4 +882,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;
@ -1112,13 +1130,13 @@ index d014315..7edd407 100644
+ G_TYPE_NONE, 0); + G_TYPE_NONE, 0);
} }
-- --
2.26.2 2.29.2
From b59c36ccf73939d32ccf5ab4eb47460a9fe415f3 Mon Sep 17 00:00:00 2001 From 3b33524046d299111cc150cc8d6d100f1e516485 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/7] session-vnc: Add grd_session_vnc_dispatch() helper
To be used by the TLS channel security to dispatch when there is data To be used by the TLS channel security to dispatch when there is data
available that is not visible to the socket source. available that is not visible to the socket source.
@ -1128,10 +1146,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 7edd407..29c94a1 100644 index 596896d..06b2cf7 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
@@ -635,6 +635,21 @@ vnc_socket_grab_func (GrdSessionVnc *session_vnc, @@ -672,6 +672,21 @@ vnc_socket_grab_func (GrdSessionVnc *session_vnc,
return TRUE; return TRUE;
} }
@ -1153,7 +1171,7 @@ index 7edd407..29c94a1 100644
static gboolean static gboolean
handle_socket_data (GSocket *socket, handle_socket_data (GSocket *socket,
GIOCondition condition, GIOCondition condition,
@@ -651,16 +666,7 @@ handle_socket_data (GSocket *socket, @@ -688,16 +703,7 @@ handle_socket_data (GSocket *socket,
} }
else if (condition & G_IO_IN) else if (condition & G_IO_IN)
{ {
@ -1172,10 +1190,10 @@ index 7edd407..29c94a1 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 bba3d56..58f635c 100644 index 4e7b33d..cf275af 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
@@ -72,6 +72,8 @@ void grd_session_vnc_grab_socket (GrdSessionVnc *session_vnc, @@ -79,6 +79,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);
@ -1185,13 +1203,13 @@ index bba3d56..58f635c 100644
#endif /* GRD_SESSION_VNC_H */ #endif /* GRD_SESSION_VNC_H */
-- --
2.26.2 2.29.2
From 966b2ddbd1c03c9e20dc66e5ea9a2dfb39ba4bfa Mon Sep 17 00:00:00 2001 From 3945af78cea858033d954bb1b071269687bdea85 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/7] vnc/tls: Add some logging
Uses the log utility from libvncserver as it is related to the RFB Uses the log utility from libvncserver as it is related to the RFB
protocol rather than the session itself. protocol rather than the session itself.
@ -1262,13 +1280,13 @@ index ec4758e..ac6c35f 100644
{ {
g_warning ("TLS handshake failed: %s", error->message); g_warning ("TLS handshake failed: %s", error->message);
-- --
2.26.2 2.29.2
From e01d27dc9911f4d7ecfd232c7e389f4dabfd87de Mon Sep 17 00:00:00 2001 From f5330797678f4c4db4a3fa19cebd30dd4d6bbb8c 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/7] vnc/tls: Dispatch also when data is pending outside of
the socket the socket
gnutls may have data available in its buffers, and we have our own peek gnutls may have data available in its buffers, and we have our own peek
@ -1282,10 +1300,10 @@ long as there is data to read in those buffers.
2 files changed, 86 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 58f635c..0d01ad3 100644 index cf275af..efc0038 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
@@ -72,6 +72,8 @@ void grd_session_vnc_grab_socket (GrdSessionVnc *session_vnc, @@ -79,6 +79,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);
@ -1432,13 +1450,13 @@ index ac6c35f..312b6b9 100644
} }
-- --
2.26.2 2.29.2
From 682f3b4a8e985f00a00e761a086a15cb5e2b9b04 Mon Sep 17 00:00:00 2001 From fae9653965ddcc3d5684a056d9bdf46ef439d649 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/7] session-vnc: Set our own password handling function up
front front
libvncserver decides whether to register a auth security handler libvncserver decides whether to register a auth security handler
@ -1454,10 +1472,10 @@ 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 29c94a1..ebe1540 100644 index 06b2cf7..7a4c6b3 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); @@ -94,11 +94,6 @@ grd_session_vnc_pause (GrdSessionVnc *session_vnc);
static gboolean static gboolean
close_session_idle (gpointer user_data); close_session_idle (gpointer user_data);
@ -1469,7 +1487,7 @@ index 29c94a1..ebe1540 100644
static void static void
swap_uint8 (uint8_t *a, swap_uint8 (uint8_t *a,
uint8_t *b) uint8_t *b)
@@ -310,7 +305,6 @@ handle_new_client (rfbClientPtr rfb_client) @@ -321,7 +316,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:
@ -1477,7 +1495,7 @@ index 29c94a1..ebe1540 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.
@@ -594,6 +588,8 @@ init_vnc_session (GrdSessionVnc *session_vnc) @@ -620,6 +614,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);
@ -1487,5 +1505,40 @@ index 29c94a1..ebe1540 100644
rfbProcessEvents (rfb_screen, 0); rfbProcessEvents (rfb_screen, 0);
} }
-- --
2.26.2 2.29.2
From 1ae1286b2cc868045f93c02b7a990638ca94b26d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
Date: Mon, 12 Oct 2020 17:34:30 +0200
Subject: [PATCH 7/7] vnc: Copy pixels using the right destination stride
We're copying the pixels in a separate thread managed by PipeWire, and
in this thread, accessing the VNC framebuffer dimension and stride is
racy. Instead of fetching the dimension directly, pass the expected
width and get the stride it will eventually have.
Already before this patch, when the copied pixel end up on the main
thread and the dimension still doesn't match up, the frame will be
dropped.
---
src/grd-session-vnc.h | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/grd-session-vnc.h b/src/grd-session-vnc.h
index efc0038..f3a6314 100644
--- a/src/grd-session-vnc.h
+++ b/src/grd-session-vnc.h
@@ -67,7 +67,8 @@ int grd_session_vnc_get_stride_for_width (GrdSessionVnc *session_vnc,
int grd_session_vnc_get_fd (GrdSessionVnc *session_vnc);
-int grd_session_vnc_get_framebuffer_stride (GrdSessionVnc *session_vnc);
+int grd_session_vnc_get_stride_for_width (GrdSessionVnc *session_vnc,
+ int width);
gboolean grd_session_vnc_is_client_gone (GrdSessionVnc *session_vnc);
--
2.29.2

View File

@ -1 +1 @@
SHA512 (gnome-remote-desktop-0.1.9.tar.xz) = 6ac2962c824634cd5322785b6d251e899ea38668010b18b1b50124497895d9c00752904abf01490e27b74e1661aeae39d83fbbd77b841329b1e0fd381c3ea440 SHA512 (gnome-remote-desktop-40.beta.tar.xz) = 42ae56ec87229c77cd1b9e4e741e86131b4016fb99052c842531f56a612b8d828c8d8050d0a296c0a57ea06fc98425c15aeee04ff9e0eed2c975534140cc9a3e