From 884620465e9062874c3dec40800f137f4e016444 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Mon, 25 Mar 2024 23:09:20 +0100 Subject: [PATCH] Bump version to 46.0 --- .gitignore | 1 + gnome-remote-desktop.spec | 45 ++++-- gnutls-anontls.patch | 309 +++++++++++++++++--------------------- sources | 2 +- 4 files changed, 170 insertions(+), 187 deletions(-) diff --git a/.gitignore b/.gitignore index 882fd93..067ec62 100644 --- a/.gitignore +++ b/.gitignore @@ -29,3 +29,4 @@ /gnome-remote-desktop-45.rc.tar.xz /gnome-remote-desktop-45.0.tar.xz /gnome-remote-desktop-45.1.tar.xz +/gnome-remote-desktop-46.0.tar.xz diff --git a/gnome-remote-desktop.spec b/gnome-remote-desktop.spec index 40bed8c..ead47a5 100644 --- a/gnome-remote-desktop.spec +++ b/gnome-remote-desktop.spec @@ -1,4 +1,7 @@ -%global systemd_unit gnome-remote-desktop.service +%global systemd_unit_handover gnome-remote-desktop-handover.service +%global systemd_unit_headless gnome-remote-desktop-headless.service +%global systemd_unit_system gnome-remote-desktop.service +%global systemd_unit_user gnome-remote-desktop.service %global tarball_version %%(echo %{version} | tr '~' '.') @@ -9,8 +12,8 @@ %global pipewire_version 0.3.49 Name: gnome-remote-desktop -Version: 45.1 -Release: 4%{?dist} +Version: 46.0 +Release: 1%{?dist} Summary: GNOME Remote Desktop screen share service License: GPL-2.0-or-later @@ -26,12 +29,15 @@ BuildRequires: meson >= 0.47.0 BuildRequires: systemd-rpm-macros BuildRequires: pkgconfig(cairo) BuildRequires: pkgconfig(epoxy) +BuildRequires: pkgconfig(dbus-1) BuildRequires: pkgconfig(ffnvcodec) %if %{with rdp} BuildRequires: pkgconfig(fdk-aac) -BuildRequires: pkgconfig(freerdp2) +BuildRequires: pkgconfig(freerdp3) BuildRequires: pkgconfig(fuse3) -BuildRequires: pkgconfig(winpr2) +BuildRequires: pkgconfig(opus) +BuildRequires: pkgconfig(polkit-gobject-1) +BuildRequires: pkgconfig(winpr3) %endif BuildRequires: pkgconfig(gbm) BuildRequires: pkgconfig(glib-2.0) >= 2.68 @@ -71,10 +77,8 @@ GNOME desktop environment. %meson \ %if %{with rdp} -Drdp=true \ - -Dfdk_aac=true \ %else -Drdp=false \ - -Dfdk_aac=false \ %endif %if %{with vnc} -Dvnc=true \ @@ -93,15 +97,24 @@ GNOME desktop environment. %post -%systemd_user_post %{systemd_unit} +%systemd_system_post %{systemd_unit_system} +%systemd_user_post %{systemd_unit_handover} +%systemd_user_post %{systemd_unit_headless} +%systemd_user_post %{systemd_unit_user} %preun -%systemd_user_preun %{systemd_unit} +%systemd_system_preun %{systemd_unit_system} +%systemd_user_preun %{systemd_unit_handover} +%systemd_user_preun %{systemd_unit_headless} +%systemd_user_preun %{systemd_unit_user} %postun -%systemd_user_postun_with_restart %{systemd_unit} +%systemd_system_postun_with_restart %{systemd_unit_system} +%systemd_user_postun_with_restart %{systemd_unit_handover} +%systemd_user_postun_with_restart %{systemd_unit_headless} +%systemd_user_postun_with_restart %{systemd_unit_user} %files -f %{name}.lang @@ -109,9 +122,19 @@ GNOME desktop environment. %doc README.md %{_bindir}/grdctl %{_libexecdir}/gnome-remote-desktop-daemon -%{_userunitdir}/%{systemd_unit} +%{_userunitdir}/%{systemd_unit_user} +%{_userunitdir}/%{systemd_unit_headless} +%{_userunitdir}/%{systemd_unit_handover} +%{_unitdir}/%{systemd_unit_system} +%{_datadir}/applications/org.gnome.RemoteDesktop.Handover.desktop +%{_datadir}/dbus-1/system-services/org.gnome.RemoteDesktop.service +%{_datadir}/dbus-1/system.d/org.gnome.RemoteDesktop.conf %{_datadir}/glib-2.0/schemas/org.gnome.desktop.remote-desktop.gschema.xml %{_datadir}/glib-2.0/schemas/org.gnome.desktop.remote-desktop.enums.xml +%{_datadir}/polkit-1/actions/org.gnome.remotedesktop.configure-system-daemon.policy +%{_sysusersdir}/gnome-remote-desktop-sysusers.conf +%{_tmpfilesdir}/gnome-remote-desktop-tmpfiles.conf + %if %{with rdp} %{_datadir}/gnome-remote-desktop/ %endif diff --git a/gnutls-anontls.patch b/gnutls-anontls.patch index 66947d3..56d91f6 100644 --- a/gnutls-anontls.patch +++ b/gnutls-anontls.patch @@ -1,4 +1,4 @@ -From e2a39fbf7b1a90aee818790ad847c20f59351adc Mon Sep 17 00:00:00 2001 +From 0e754e3a90f486c031da535656584673016107a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Thu, 14 Jun 2018 12:21:37 +0200 Subject: [PATCH 1/7] vnc: Add anonymous TLS encryption support @@ -13,23 +13,22 @@ VNC connection. src/grd-enums.h | 6 + src/grd-session-vnc.c | 120 ++++- src/grd-session-vnc.h | 17 + - src/grd-settings-user.c | 28 ++ - src/grd-settings.c | 6 + - src/grd-settings.h | 4 + - src/grd-vnc-server.c | 47 ++ + src/grd-settings-user.c | 3 + + src/grd-settings.c | 18 + + src/grd-vnc-server.c | 49 ++ src/grd-vnc-tls.c | 444 ++++++++++++++++++ src/grd-vnc-tls.h | 28 ++ src/meson.build | 3 + ...nome.desktop.remote-desktop.gschema.xml.in | 10 + - 12 files changed, 688 insertions(+), 26 deletions(-) + 11 files changed, 673 insertions(+), 26 deletions(-) create mode 100644 src/grd-vnc-tls.c create mode 100644 src/grd-vnc-tls.h diff --git a/meson.build b/meson.build -index af607a47..a827c356 100644 +index 995863ce..40733a6e 100644 --- a/meson.build +++ b/meson.build -@@ -63,6 +63,7 @@ endif +@@ -62,6 +62,7 @@ endif if have_vnc libvncclient_dep = dependency('libvncclient') libvncserver_dep = dependency('libvncserver') @@ -38,12 +37,12 @@ index af607a47..a827c356 100644 prefix = get_option('prefix') diff --git a/src/grd-enums.h b/src/grd-enums.h -index 44b181d6..de0d0f86 100644 +index 028bdf9a..47a1d921 100644 --- a/src/grd-enums.h +++ b/src/grd-enums.h -@@ -39,4 +39,10 @@ typedef enum - GRD_VNC_SCREEN_SHARE_MODE_EXTEND, - } GrdVncScreenShareMode; +@@ -33,6 +33,12 @@ typedef enum + GRD_VNC_AUTH_METHOD_PASSWORD + } GrdVncAuthMethod; +typedef enum +{ @@ -51,12 +50,14 @@ index 44b181d6..de0d0f86 100644 + GRD_VNC_ENCRYPTION_TLS_ANON = 1 << 1, +} GrdVncEncryption; + - #endif /* GRD_ENUMS_H */ + typedef enum + { + GRD_VNC_SCREEN_SHARE_MODE_MIRROR_PRIMARY, diff --git a/src/grd-session-vnc.c b/src/grd-session-vnc.c -index de1c26d7..a82952ae 100644 +index 0ca76e89..e13ac013 100644 --- a/src/grd-session-vnc.c +++ b/src/grd-session-vnc.c -@@ -45,7 +45,9 @@ struct _GrdSessionVnc +@@ -46,7 +46,9 @@ struct _GrdSessionVnc { GrdSession parent; @@ -66,7 +67,7 @@ index de1c26d7..a82952ae 100644 GSource *source; rfbScreenInfoPtr rfb_screen; rfbClientPtr rfb_client; -@@ -588,6 +590,12 @@ check_rfb_password (rfbClientPtr rfb_client, +@@ -608,6 +610,12 @@ check_rfb_password (rfbClientPtr rfb_client, } } @@ -79,7 +80,7 @@ index de1c26d7..a82952ae 100644 int grd_session_vnc_get_stride_for_width (GrdSessionVnc *session_vnc, int width) -@@ -595,6 +603,18 @@ grd_session_vnc_get_stride_for_width (GrdSessionVnc *session_vnc, +@@ -615,6 +623,18 @@ grd_session_vnc_get_stride_for_width (GrdSessionVnc *session_vnc, return width * BGRX_BYTES_PER_PIXEL; } @@ -98,7 +99,7 @@ index de1c26d7..a82952ae 100644 static void init_vnc_session (GrdSessionVnc *session_vnc) { -@@ -669,44 +689,85 @@ init_vnc_session (GrdSessionVnc *session_vnc) +@@ -689,44 +709,85 @@ init_vnc_session (GrdSessionVnc *session_vnc) rfbProcessEvents (rfb_screen, 0); } @@ -209,7 +210,7 @@ index de1c26d7..a82952ae 100644 } return G_SOURCE_CONTINUE; -@@ -719,7 +780,10 @@ grd_session_vnc_attach_source (GrdSessionVnc *session_vnc) +@@ -739,7 +800,10 @@ grd_session_vnc_attach_source (GrdSessionVnc *session_vnc) socket = g_socket_connection_get_socket (session_vnc->connection); session_vnc->source = g_socket_create_source (socket, @@ -221,7 +222,7 @@ index de1c26d7..a82952ae 100644 NULL); g_source_set_callback (session_vnc->source, (GSourceFunc) handle_socket_data, -@@ -750,11 +814,13 @@ grd_session_vnc_new (GrdVncServer *vnc_server, +@@ -780,6 +844,7 @@ grd_session_vnc_new (GrdVncServer *vnc_server, "context", context, NULL); @@ -229,13 +230,15 @@ index de1c26d7..a82952ae 100644 session_vnc->connection = g_object_ref (connection); settings = grd_context_get_settings (context); - session_vnc->screen_share_mode = grd_settings_get_vnc_screen_share_mode (settings); +@@ -792,6 +857,7 @@ grd_session_vnc_new (GrdVncServer *vnc_server, + G_CALLBACK (on_view_only_changed), + session_vnc); + grd_session_vnc_grab_socket (session_vnc, vnc_socket_grab_func); grd_session_vnc_attach_source (session_vnc); init_vnc_session (session_vnc); -@@ -769,6 +835,8 @@ grd_session_vnc_dispose (GObject *object) +@@ -806,6 +872,8 @@ grd_session_vnc_dispose (GObject *object) g_assert (!session_vnc->rfb_screen); @@ -280,126 +283,79 @@ index be79cf4a..ffc8d27a 100644 + #endif /* GRD_SESSION_VNC_H */ diff --git a/src/grd-settings-user.c b/src/grd-settings-user.c -index 42bf31dd..5f6a87dd 100644 +index 20b81a94..34115078 100644 --- a/src/grd-settings-user.c +++ b/src/grd-settings-user.c -@@ -66,6 +66,7 @@ struct _GrdSettingsUser +@@ -79,6 +79,9 @@ grd_settings_user_constructed (GObject *object) + g_settings_bind (settings->vnc_settings, "auth-method", + settings, "vnc-auth-method", + G_SETTINGS_BIND_DEFAULT); ++ g_settings_bind (settings->vnc_settings, "encryption", ++ settings, "vnc-encryption", ++ G_SETTINGS_BIND_DEFAULT); + + switch (grd_settings_get_runtime_mode (GRD_SETTINGS (settings))) + { +diff --git a/src/grd-settings.c b/src/grd-settings.c +index fba1d714..f3475010 100644 +--- a/src/grd-settings.c ++++ b/src/grd-settings.c +@@ -58,6 +58,7 @@ enum + PROP_RDP_SERVER_CERT_PATH, + PROP_RDP_SERVER_KEY_PATH, + PROP_VNC_AUTH_METHOD, ++ PROP_VNC_ENCRYPTION, + }; + + typedef struct _GrdSettingsPrivate +@@ -84,6 +85,7 @@ typedef struct _GrdSettingsPrivate gboolean view_only; GrdVncScreenShareMode screen_share_mode; GrdVncAuthMethod auth_method; + GrdVncEncryption encryption; } vnc; - }; + } GrdSettingsPrivate; -@@ -138,6 +139,13 @@ update_vnc_auth_method (GrdSettingsUser *settings) - "auth-method"); - } - -+static void -+update_vnc_encryption (GrdSettingsUser *settings) -+{ -+ settings->vnc.encryption = g_settings_get_flags (settings->vnc.settings, -+ "encryption"); -+} -+ - static gboolean - grd_settings_user_is_rdp_enabled (GrdSettings *settings) - { -@@ -192,6 +200,12 @@ grd_settings_user_get_vnc_auth_method (GrdSettings *settings) - return GRD_SETTINGS_USER (settings)->vnc.auth_method; - } - -+static GrdVncEncryption -+grd_settings_user_get_encryption (GrdSettings *settings) -+{ -+ return GRD_SETTINGS_USER (settings)->vnc.encryption; -+} -+ - GrdSettingsUser * - grd_settings_user_new (GrdContext *context) - { -@@ -273,6 +287,11 @@ on_vnc_settings_changed (GSettings *vnc_settings, - update_vnc_auth_method (settings); - g_signal_emit (settings, signals[VNC_AUTH_METHOD_CHANGED], 0); +@@ -425,6 +427,9 @@ grd_settings_get_property (GObject *object, + else + g_value_set_enum (value, priv->vnc.auth_method); + break; ++ case PROP_VNC_ENCRYPTION: ++ g_value_set_flags (value, priv->vnc.encryption); ++ break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } -+ else if (strcmp (key, "encryption") == 0) -+ { -+ update_vnc_encryption (settings); -+ g_signal_emit (settings, signals[VNC_ENCRYPTION_CHANGED], 0); -+ } +@@ -562,6 +567,9 @@ grd_settings_set_property (GObject *object, + case PROP_VNC_AUTH_METHOD: + priv->vnc.auth_method = g_value_get_enum (value); + break; ++ case PROP_VNC_ENCRYPTION: ++ priv->vnc.encryption = g_value_get_flags (value); ++ break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + } +@@ -743,4 +751,14 @@ grd_settings_class_init (GrdSettingsClass *klass) + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT | + G_PARAM_STATIC_STRINGS)); ++ g_object_class_install_property (object_class, ++ PROP_VNC_ENCRYPTION, ++ g_param_spec_flags ("vnc-encryption", ++ "vnc encryption", ++ "vnc encryption", ++ GRD_TYPE_VNC_ENCRYPTION, ++ GRD_VNC_ENCRYPTION_TLS_ANON, ++ G_PARAM_READWRITE | ++ G_PARAM_CONSTRUCT | ++ G_PARAM_STATIC_STRINGS)); } - - static void -@@ -294,6 +313,7 @@ grd_settings_user_init (GrdSettingsUser *settings) - update_vnc_view_only (settings); - update_vnc_screen_share_mode (settings); - update_vnc_auth_method (settings); -+ update_vnc_encryption (settings); - } - - static void -@@ -313,6 +333,7 @@ grd_settings_user_class_init (GrdSettingsUserClass *klass) - settings_class->get_rdp_server_key = grd_settings_user_get_rdp_server_key; - settings_class->get_rdp_server_cert = grd_settings_user_get_rdp_server_cert; - settings_class->get_vnc_auth_method = grd_settings_user_get_vnc_auth_method; -+ settings_class->get_vnc_encryption = grd_settings_user_get_encryption; - - signals[RDP_ENABLED_CHANGED] = - g_signal_new ("rdp-enabled-changed", -@@ -377,4 +398,11 @@ grd_settings_user_class_init (GrdSettingsUserClass *klass) - 0, - NULL, NULL, NULL, - G_TYPE_NONE, 0); -+ signals[VNC_ENCRYPTION_CHANGED] = -+ g_signal_new ("vnc-encryption-changed", -+ G_TYPE_FROM_CLASS (klass), -+ G_SIGNAL_RUN_LAST, -+ 0, -+ NULL, NULL, NULL, -+ G_TYPE_NONE, 0); - } -diff --git a/src/grd-settings.c b/src/grd-settings.c -index 1cd4bea5..cd1dda1f 100644 ---- a/src/grd-settings.c -+++ b/src/grd-settings.c -@@ -230,6 +230,12 @@ grd_settings_get_vnc_auth_method (GrdSettings *settings) - return GRD_SETTINGS_GET_CLASS (settings)->get_vnc_auth_method (settings); - } - -+GrdVncEncryption -+grd_settings_get_vnc_encryption (GrdSettings *settings) -+{ -+ return GRD_SETTINGS_GET_CLASS (settings)->get_vnc_encryption (settings); -+} -+ - static void - grd_settings_finalize (GObject *object) - { -diff --git a/src/grd-settings.h b/src/grd-settings.h -index 9e36ff9d..51f0f1c3 100644 ---- a/src/grd-settings.h -+++ b/src/grd-settings.h -@@ -56,6 +56,8 @@ struct _GrdSettingsClass - char * (* get_rdp_server_key) (GrdSettings *settings); - - GrdVncAuthMethod (* get_vnc_auth_method) (GrdSettings *settings); -+ -+ GrdVncEncryption (* get_vnc_encryption) (GrdSettings *settings); - }; - - int grd_settings_get_rdp_port (GrdSettings *settings); -@@ -94,4 +96,6 @@ char *grd_settings_get_rdp_server_key (GrdSettings *settings); - - GrdVncAuthMethod grd_settings_get_vnc_auth_method (GrdSettings *settings); - -+GrdVncEncryption grd_settings_get_vnc_encryption (GrdSettings *settings); -+ - #endif /* GRD_SETTINGS_H */ diff --git a/src/grd-vnc-server.c b/src/grd-vnc-server.c -index 70efab12..9280dfb5 100644 +index 877272d2..59a13db5 100644 --- a/src/grd-vnc-server.c +++ b/src/grd-vnc-server.c -@@ -24,12 +24,14 @@ +@@ -24,6 +24,7 @@ #include "grd-vnc-server.h" @@ -407,14 +363,15 @@ index 70efab12..9280dfb5 100644 #include #include - #include "grd-context.h" +@@ -31,6 +32,7 @@ #include "grd-debug.h" #include "grd-session-vnc.h" + #include "grd-utils.h" +#include "grd-vnc-tls.h" enum { -@@ -129,6 +131,43 @@ on_incoming (GSocketService *service, +@@ -130,6 +132,45 @@ on_incoming (GSocketService *service, return TRUE; } @@ -426,7 +383,9 @@ index 70efab12..9280dfb5 100644 + GrdVncEncryption encryption; + + tls_security_handler = grd_vnc_tls_get_security_handler (); -+ encryption = grd_settings_get_vnc_encryption (settings); ++ g_object_get (G_OBJECT (settings), ++ "vnc-encryption", &encryption, ++ NULL); + + if (encryption == (GRD_VNC_ENCRYPTION_NONE | GRD_VNC_ENCRYPTION_TLS_ANON)) + { @@ -458,7 +417,7 @@ index 70efab12..9280dfb5 100644 gboolean grd_vnc_server_start (GrdVncServer *vnc_server, GError **error) -@@ -216,11 +255,19 @@ grd_vnc_server_dispose (GObject *object) +@@ -241,11 +282,19 @@ grd_vnc_server_dispose (GObject *object) static void grd_vnc_server_constructed (GObject *object) { @@ -470,7 +429,7 @@ index 70efab12..9280dfb5 100644 else rfbLogEnable (0); -+ g_signal_connect (settings, "vnc-encryption-changed", ++ g_signal_connect (settings, "notify::vnc-encryption", + G_CALLBACK (on_vnc_encryption_changed), + vnc_server); + sync_encryption_settings (vnc_server); @@ -963,10 +922,10 @@ index 00000000..135ef8c7 + +#endif /* GRD_VNC_TLS_H */ diff --git a/src/meson.build b/src/meson.build -index ac07455b..654caccb 100644 +index 914e2cc1..4e820c59 100644 --- a/src/meson.build +++ b/src/meson.build -@@ -161,10 +161,13 @@ if have_vnc +@@ -188,10 +188,13 @@ if have_vnc 'grd-vnc-pipewire-stream.h', 'grd-vnc-server.c', 'grd-vnc-server.h', @@ -981,10 +940,10 @@ index ac07455b..654caccb 100644 endif diff --git a/src/org.gnome.desktop.remote-desktop.gschema.xml.in b/src/org.gnome.desktop.remote-desktop.gschema.xml.in -index 5b39a5de..c6dc2ab5 100644 +index c3d583c1..8a736c82 100644 --- a/src/org.gnome.desktop.remote-desktop.gschema.xml.in +++ b/src/org.gnome.desktop.remote-desktop.gschema.xml.in -@@ -116,5 +116,15 @@ +@@ -148,5 +148,15 @@ configuration updates. @@ -1001,10 +960,10 @@ index 5b39a5de..c6dc2ab5 100644 -- -2.40.0 +2.44.0 -From e0192db09adddb551e4dbfeb17c281fb5815d7be Mon Sep 17 00:00:00 2001 +From 6e5f6deab459acdd1e7785ab6975932f2815548f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Wed, 27 Nov 2019 11:02:09 +0100 Subject: [PATCH 2/7] session-vnc: Add paused/resumed signals @@ -1017,10 +976,10 @@ out-of-socket source. 1 file changed, 65 insertions(+), 7 deletions(-) diff --git a/src/grd-session-vnc.c b/src/grd-session-vnc.c -index a82952ae..1fd3b778 100644 +index e13ac013..30820d7d 100644 --- a/src/grd-session-vnc.c +++ b/src/grd-session-vnc.c -@@ -41,14 +41,27 @@ +@@ -42,14 +42,27 @@ #define BGRX_SAMPLES_PER_PIXEL 3 #define BGRX_BYTES_PER_PIXEL 4 @@ -1048,7 +1007,7 @@ index a82952ae..1fd3b778 100644 rfbScreenInfoPtr rfb_screen; rfbClientPtr rfb_client; -@@ -79,7 +92,7 @@ struct _GrdSessionVnc +@@ -81,7 +94,7 @@ struct _GrdSessionVnc G_DEFINE_TYPE (GrdSessionVnc, grd_session_vnc, GRD_TYPE_SESSION) static void @@ -1057,7 +1016,7 @@ index a82952ae..1fd3b778 100644 static gboolean close_session_idle (gpointer user_data); -@@ -246,7 +259,8 @@ handle_client_gone (rfbClientPtr rfb_client) +@@ -248,7 +261,8 @@ handle_client_gone (rfbClientPtr rfb_client) g_debug ("VNC client gone"); @@ -1067,16 +1026,16 @@ index a82952ae..1fd3b778 100644 maybe_queue_close_session_idle (session_vnc); session_vnc->rfb_client = NULL; } -@@ -315,7 +329,7 @@ handle_new_client (rfbClientPtr rfb_client) - session_vnc->prompt_cancellable, - prompt_response_callback, - session_vnc); +@@ -338,7 +352,7 @@ handle_new_client (rfbClientPtr rfb_client) + { + case GRD_VNC_AUTH_METHOD_PROMPT: + show_sharing_desktop_prompt (session_vnc, rfb_client->host); - grd_session_vnc_detach_source (session_vnc); + grd_session_vnc_pause (session_vnc); return RFB_CLIENT_ON_HOLD; case GRD_VNC_AUTH_METHOD_PASSWORD: session_vnc->rfb_screen->passwordCheck = check_rfb_password; -@@ -581,7 +595,7 @@ check_rfb_password (rfbClientPtr rfb_client, +@@ -601,7 +615,7 @@ check_rfb_password (rfbClientPtr rfb_client, if (memcmp (challenge_encrypted, response_encrypted, len) == 0) { grd_session_start (GRD_SESSION (session_vnc)); @@ -1085,7 +1044,7 @@ index a82952ae..1fd3b778 100644 return TRUE; } else -@@ -801,6 +815,36 @@ grd_session_vnc_detach_source (GrdSessionVnc *session_vnc) +@@ -821,6 +835,36 @@ grd_session_vnc_detach_source (GrdSessionVnc *session_vnc) g_clear_pointer (&session_vnc->source, g_source_unref); } @@ -1119,10 +1078,10 @@ index a82952ae..1fd3b778 100644 + g_signal_emit (session_vnc, signals[RESUMED], 0); +} + - GrdSessionVnc * - grd_session_vnc_new (GrdVncServer *vnc_server, - GSocketConnection *connection) -@@ -822,6 +866,7 @@ grd_session_vnc_new (GrdVncServer *vnc_server, + static void + on_view_only_changed (GrdSettings *settings, + GParamSpec *pspec, +@@ -859,6 +903,7 @@ grd_session_vnc_new (GrdVncServer *vnc_server, grd_session_vnc_grab_socket (session_vnc, vnc_socket_grab_func); grd_session_vnc_attach_source (session_vnc); @@ -1130,7 +1089,7 @@ index a82952ae..1fd3b778 100644 init_vnc_session (session_vnc); -@@ -856,7 +901,7 @@ grd_session_vnc_stop (GrdSession *session) +@@ -893,7 +938,7 @@ grd_session_vnc_stop (GrdSession *session) g_clear_object (&session_vnc->stream); } @@ -1139,7 +1098,7 @@ index a82952ae..1fd3b778 100644 g_clear_object (&session_vnc->connection); g_clear_object (&session_vnc->clipboard_vnc); -@@ -941,8 +986,8 @@ on_stream_ready (GrdStream *stream, +@@ -984,8 +1029,8 @@ on_stream_ready (GrdStream *stream, G_CALLBACK (on_pipewire_stream_closed), session_vnc); @@ -1150,7 +1109,7 @@ index a82952ae..1fd3b778 100644 } static void -@@ -977,4 +1022,17 @@ grd_session_vnc_class_init (GrdSessionVncClass *klass) +@@ -1020,4 +1065,17 @@ grd_session_vnc_class_init (GrdSessionVncClass *klass) session_class->remote_desktop_session_started = grd_session_vnc_remote_desktop_session_started; session_class->on_stream_created = grd_session_vnc_on_stream_created; @@ -1169,10 +1128,10 @@ index a82952ae..1fd3b778 100644 + G_TYPE_NONE, 0); } -- -2.40.0 +2.44.0 -From 9a36ce45052d05a0e0e4ab70beba704b321875a6 Mon Sep 17 00:00:00 2001 +From 00f4fdfc676361f5f71e6f6b346c11cb7088b836 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Wed, 27 Nov 2019 11:03:46 +0100 Subject: [PATCH 3/7] session-vnc: Add grd_session_vnc_dispatch() helper @@ -1185,10 +1144,10 @@ available that is not visible to the socket source. 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/grd-session-vnc.c b/src/grd-session-vnc.c -index 1fd3b778..8366e661 100644 +index 30820d7d..3ee06f79 100644 --- a/src/grd-session-vnc.c +++ b/src/grd-session-vnc.c -@@ -751,6 +751,21 @@ vnc_socket_grab_func (GrdSessionVnc *session_vnc, +@@ -771,6 +771,21 @@ vnc_socket_grab_func (GrdSessionVnc *session_vnc, return TRUE; } @@ -1210,7 +1169,7 @@ index 1fd3b778..8366e661 100644 static gboolean handle_socket_data (GSocket *socket, GIOCondition condition, -@@ -767,16 +782,7 @@ handle_socket_data (GSocket *socket, +@@ -787,16 +802,7 @@ handle_socket_data (GSocket *socket, } else if (condition & G_IO_IN) { @@ -1242,10 +1201,10 @@ index ffc8d27a..a86d61d2 100644 #endif /* GRD_SESSION_VNC_H */ -- -2.40.0 +2.44.0 -From 685f376a6b331d91e2bb34e8484682974db149a5 Mon Sep 17 00:00:00 2001 +From 69efe6df5e9e8548c0241a612980af31f1dc5c5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Wed, 27 Nov 2019 11:05:13 +0100 Subject: [PATCH 4/7] vnc/tls: Add some logging @@ -1319,10 +1278,10 @@ index ec4758e0..ac6c35f6 100644 { g_warning ("TLS handshake failed: %s", error->message); -- -2.40.0 +2.44.0 -From eebd752d3df83d6ae2df79782dbb8b4a80083608 Mon Sep 17 00:00:00 2001 +From 2a11c4f47165b62409f4428b9de1bda59c6ebb2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Wed, 27 Nov 2019 11:07:40 +0100 Subject: [PATCH 5/7] vnc/tls: Dispatch also when data is pending outside of @@ -1489,10 +1448,10 @@ index ac6c35f6..312b6b92 100644 } -- -2.40.0 +2.44.0 -From 9f41a7aba0f24a3253a1483a290364e887345b42 Mon Sep 17 00:00:00 2001 +From 1ed580b541ab5c3b815d8e29cf3aa71f1de0b649 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Wed, 27 Nov 2019 16:48:00 +0100 Subject: [PATCH 6/7] session-vnc: Set our own password handling function up @@ -1511,10 +1470,10 @@ password prompt. 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/grd-session-vnc.c b/src/grd-session-vnc.c -index 8366e661..baf7520c 100644 +index 3ee06f79..6e118d88 100644 --- a/src/grd-session-vnc.c +++ b/src/grd-session-vnc.c -@@ -97,11 +97,6 @@ grd_session_vnc_pause (GrdSessionVnc *session_vnc); +@@ -99,11 +99,6 @@ grd_session_vnc_pause (GrdSessionVnc *session_vnc); static gboolean close_session_idle (gpointer user_data); @@ -1526,7 +1485,7 @@ index 8366e661..baf7520c 100644 static void swap_uint8 (uint8_t *a, uint8_t *b) -@@ -332,7 +327,6 @@ handle_new_client (rfbClientPtr rfb_client) +@@ -355,7 +350,6 @@ handle_new_client (rfbClientPtr rfb_client) grd_session_vnc_pause (session_vnc); return RFB_CLIENT_ON_HOLD; case GRD_VNC_AUTH_METHOD_PASSWORD: @@ -1534,7 +1493,7 @@ index 8366e661..baf7520c 100644 /* * authPasswdData needs to be non NULL in libvncserver to trigger * password authentication. -@@ -699,6 +693,8 @@ init_vnc_session (GrdSessionVnc *session_vnc) +@@ -719,6 +713,8 @@ init_vnc_session (GrdSessionVnc *session_vnc) session_vnc->monitor_config->connectors = connectors; } @@ -1544,10 +1503,10 @@ index 8366e661..baf7520c 100644 rfbProcessEvents (rfb_screen, 0); } -- -2.40.0 +2.44.0 -From ea9f0e491c6fd34cc6eda0104d017eba1a671023 Mon Sep 17 00:00:00 2001 +From 9b7b729d9f945fcb2942c74d8ab7a9b62d6cf4bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Mon, 12 Oct 2020 17:34:30 +0200 Subject: [PATCH 7/7] vnc: Copy pixels using the right destination stride @@ -1579,5 +1538,5 @@ index 5db388b0..c4f4e8d4 100644 gboolean grd_session_vnc_is_client_gone (GrdSessionVnc *session_vnc); -- -2.40.0 +2.44.0 diff --git a/sources b/sources index 9c1592b..e73ca62 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (gnome-remote-desktop-45.1.tar.xz) = 4572fefa03ee433783c822cf0405bd17b645f3aa08e8d88c04165859fd30643d612e5d7516a64ded8c1a0d2007026d6df877930b5ea127d7e1e939c1bb60f379 +SHA512 (gnome-remote-desktop-46.0.tar.xz) = 780f9fd9fdb1f388e386048825ee5dfb9060d4005f0742075186779e8818d9bac4b3c3702b2a5bad347a1245fb82796b21fdad6df9d1206e9529f90cafe73f38