@ -1,4 +1,4 @@
From 8676ef6c32557234d08acb13d7524df5fa1f4bb2 Mon Sep 17 00:00:00 2001
From 0e754e3a90f486c031da535656584673016107a3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
Date: Thu, 14 Jun 2018 12:21:37 +0200
Subject: [PATCH 1/7] vnc: Add anonymous TLS encryption support
@ -13,34 +13,34 @@ VNC connection.
src/grd-enums.h | 6 +
src/grd-session-vnc.c | 120 ++++-
src/grd-session-vnc.h | 17 +
src/grd-settings.c | 28 + +
src/grd-settings.h | 2 +
src/grd-vnc-server.c | 45 ++
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 +
11 files changed, 678 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 5e9ad04..9bbd5fc 100644
index 995863ce..40733a6e 100644
--- a/meson.build
+++ b/meson.build
@@ - 40,6 +40 ,7 @@ endif
@@ - 62,6 +62 ,7 @@ endif
if have_vnc
libvncserver_dep = dependency('libvncserver')
libvncclient_dep = dependency('libvncclient')
libvncserver_dep = dependency('libvncserver')
+ gnutls_dep = dependency('gnutls')
endif
cdata = configuration_data( )
prefix = get_option('prefix' )
diff --git a/src/grd-enums.h b/src/grd-enums.h
index ffab821..4333863 100644
index 028bdf9a..47a1d921 100644
--- a/src/grd-enums.h
+++ b/src/grd-enums.h
@@ - 27,4 +27,10 @@ typedef enum
@@ - 33,6 +33,12 @@ typedef enum
GRD_VNC_AUTH_METHOD_PASSWORD
} GrdVncAuthMethod;
@ -50,12 +50,14 @@ index ffab821..4333863 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 0e520dc..0c189fd 100644
index 0 ca76e89..e13ac013 100644
--- a/src/grd-session-vnc.c
+++ b/src/grd-session-vnc.c
@@ -4 5,7 +45 ,9 @@ struct _GrdSessionVnc
@@ -4 6,7 +46 ,9 @@ struct _GrdSessionVnc
{
GrdSession parent;
@ -65,7 +67,7 @@ index 0e520dc..0c189fd 100644
GSource *source;
rfbScreenInfoPtr rfb_screen;
rfbClientPtr rfb_client;
@@ - 540,6 +542 ,12 @@ check_rfb_password (rfbClientPtr rfb_client,
@@ - 608,6 +610 ,12 @@ check_rfb_password (rfbClientPtr rfb_client,
}
}
@ -78,7 +80,7 @@ index 0e520dc..0c189fd 100644
int
grd_session_vnc_get_stride_for_width (GrdSessionVnc *session_vnc,
int width)
@@ - 547,6 +555 ,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;
}
@ -97,7 +99,7 @@ index 0e520dc..0c189fd 100644
static void
init_vnc_session (GrdSessionVnc *session_vnc)
{
@@ - 590,44 +610 ,85 @@ init_vnc_session (GrdSessionVnc *session_vnc)
@@ - 689,44 +709 ,85 @@ init_vnc_session (GrdSessionVnc *session_vnc)
rfbProcessEvents (rfb_screen, 0);
}
@ -208,7 +210,7 @@ index 0e520dc..0c189fd 100644
}
return G_SOURCE_CONTINUE;
@@ - 640,7 +701 ,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,
@ -220,18 +222,23 @@ index 0e520dc..0c189fd 100644
NULL);
g_source_set_callback (session_vnc->source,
(GSourceFunc) handle_socket_data,
@@ - 666,8 +730,10 @@ grd_session_vnc_new (GrdVncServer *vnc_server,
@@ - 780,6 +844,7 @@ grd_session_vnc_new (GrdVncServer *vnc_server,
"context", context,
NULL);
+ session_vnc->vnc_server = vnc_server;
session_vnc->connection = g_object_ref (connection);
settings = grd_context_get_settings (context);
@@ -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);
@@ -682,6 +748,8 @@ grd_session_vnc_dispose (GObject *object)
@@ - 806,6 +872 ,8 @@ grd_session_vnc_dispose (GObject *object)
g_assert (!session_vnc->rfb_screen);
@ -241,12 +248,12 @@ index 0e520dc..0c189fd 100644
G_OBJECT_CLASS (grd_session_vnc_parent_class)->dispose (object);
diff --git a/src/grd-session-vnc.h b/src/grd-session-vnc.h
index a532567..4e7b33d 100644
index be79cf4a..ffc8d27a 100644
--- a/src/grd-session-vnc.h
+++ b/src/grd-session-vnc.h
@@ -3 6,6 +36 ,9 @@ G_DECLARE_FINAL_TYPE (GrdSessionVnc,
@@ -3 7,6 +37 ,9 @@ G_DECLARE_FINAL_TYPE (GrdSessionVnc,
GRD, SESSION_VNC,
GrdSession);
GrdSession)
+typedef gboolean (* GrdVncSocketGrabFunc) (GrdSessionVnc *session_vnc,
+ GError **error);
@ -254,7 +261,7 @@ index a532567..4e7b33d 100644
GrdSessionVnc *grd_session_vnc_new (GrdVncServer *vnc_server,
GSocketConnection *connection);
@@ -6 2,6 +65 ,20 @@ void grd_session_vnc_set_client_clipboard_text (GrdSessionVnc *session_vnc,
@@ -6 3,6 +66 ,20 @@ void grd_session_vnc_set_client_clipboard_text (GrdSessionVnc *session_vnc,
int grd_session_vnc_get_stride_for_width (GrdSessionVnc *session_vnc,
int width);
@ -275,94 +282,80 @@ index a532567..4e7b33d 100644
+GrdVncServer * grd_session_vnc_get_vnc_server (GrdSessionVnc *session_vnc);
+
#endif /* GRD_SESSION_VNC_H */
diff --git a/src/grd-settings-user.c b/src/grd-settings-user.c
index 20b81a94..34115078 100644
--- a/src/grd-settings-user.c
+++ b/src/grd-settings-user.c
@@ -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 d2f31d2..12d8693 100644
index fba1d714..f3475010 100644
--- a/src/grd-settings.c
+++ b/src/grd-settings.c
@@ -60,6 +60,7 @@ struct _GrdSettings
@@ -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;
int port;
+ GrdVncEncryption encryption;
} vnc;
};
@@ -242,6 +243,12 @@ grd_settings_get_vnc_auth_method (GrdSettings *settings)
return settings->vnc.auth_method;
}
+GrdVncEncryption
+grd_settings_get_vnc_encryption (GrdSettings *settings)
+{
+ return settings->vnc.encryption;
+}
+
static void
update_rdp_tls_cert (GrdSettings *settings)
{
@@ -277,6 +284,13 @@ update_vnc_auth_method (GrdSettings *settings)
"auth-method");
}
} GrdSettingsPrivate;
+static void
+update_vnc_encryption (GrdSettings *settings)
+{
+ settings->vnc.encryption = g_settings_get_flags (settings->vnc.settings,
+ "encryption");
+}
+
static void
on_rdp_settings_changed (GSettings *rdp_settings,
const char *key,
@@ -314,6 +328,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);
+ }
}
static void
@@ -345,6 +364,8 @@ grd_settings_init (GrdSettings *settings)
settings->rdp.port = GRD_RDP_SERVER_PORT;
settings->vnc.port = GRD_VNC_SERVER_PORT;
+
+ update_vnc_encryption (settings);
}
static void
@@ -389,4 +410,11 @@ grd_settings_class_init (GrdSettingsClass *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);
@@ -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));
}
diff --git a/src/grd-settings.h b/src/grd-settings.h
index e12e47e..b940fdb 100644
--- a/src/grd-settings.h
+++ b/src/grd-settings.h
@@ -64,4 +64,6 @@ gboolean grd_settings_get_vnc_view_only (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 a6d95cb..f9c68db 100644
index 877272d2..59a13db5 100644
--- a/src/grd-vnc-server.c
+++ b/src/grd-vnc-server.c
@@ -24, 11 +24,13 @@
@@ -24,6 +24,7 @@
#include "grd-vnc-server.h"
@ -370,13 +363,15 @@ index a6d95cb..f9c68db 100644
#include <gio/gio.h>
#include <rfb/rfb.h>
#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
@@ -130,6 +132,43 @@ on_incoming (GSocketService *service,
{
@@ -130,6 +132,45 @@ on_incoming (GSocketService *service,
return TRUE;
}
@ -388,7 +383,9 @@ index a6d95cb..f9c68db 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))
+ {
@ -420,18 +417,19 @@ index a6d95cb..f9c68db 100644
gboolean
grd_vnc_server_start (GrdVncServer *vnc_server,
GError **error)
@@ -220,12 +259,18 @@ static void
@@ -241,11 +282,19 @@ grd_vnc_server_dispose (GObject *object)
static void
grd_vnc_server_constructed (GObject *object)
{
GrdVncServer *vnc_server = GRD_VNC_SERVER (object);
+ GrdVncServer *vnc_server = GRD_VNC_SERVER (object);
+ GrdSettings *settings = grd_context_get_settings (vnc_server->context);
if (grd_context_ get_debug_flags (vnc_server->context ) & GRD_DEBUG_VNC)
+
if (grd_get_debug_flags () & GRD_DEBUG_VNC)
rfbLogEnable (1);
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);
@ -441,7 +439,7 @@ index a6d95cb..f9c68db 100644
diff --git a/src/grd-vnc-tls.c b/src/grd-vnc-tls.c
new file mode 100644
index 0000000 ..ec4758e
index 0000000 0 ..ec4758e0
--- /dev/null
+++ b/src/grd-vnc-tls.c
@@ -0,0 +1,444 @@
@ -891,7 +889,7 @@ index 0000000..ec4758e
+}
diff --git a/src/grd-vnc-tls.h b/src/grd-vnc-tls.h
new file mode 100644
index 0000000 ..135ef8c
index 0000000 0 ..135ef8c7
--- /dev/null
+++ b/src/grd-vnc-tls.h
@@ -0,0 +1,28 @@
@ -924,10 +922,10 @@ index 0000000..135ef8c
+
+#endif /* GRD_VNC_TLS_H */
diff --git a/src/meson.build b/src/meson.build
index 843746d..133cc60 100644
index 914e2cc1..4e820c59 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ - 72,10 +72 ,13 @@ if have_vnc
@@ - 188,10 +188 ,13 @@ if have_vnc
'grd-vnc-pipewire-stream.h',
'grd-vnc-server.c',
'grd-vnc-server.h',
@ -942,11 +940,11 @@ index 843746d..133cc60 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 4b6e593..0086d99 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
@@ - 49,5 +49 ,15 @@
* password - by requiring the remote client to provide a known password
@@ - 148,5 +148 ,15 @@
configuration updates.
</description>
</key>
+ <key name='encryption' flags='org.gnome.desktop.remote-desktop.GrdVncEncryption'>
@ -962,10 +960,10 @@ index 4b6e593..0086d99 100644
</schema>
</schemalist>
--
2.29.2
2.44.0
From 552e9c9add722e953a8da22bd54ba0fef7a9d6a f Mon Sep 17 00:00:00 2001
From 6e5f6deab459acdd1e7785ab6975932f2815548 f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
Date: Wed, 27 Nov 2019 11:02:09 +0100
Subject: [PATCH 2/7] session-vnc: Add paused/resumed signals
@ -978,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 0c189fd..596896 d 100644
index e13ac013..30820d7 d 100644
--- a/src/grd-session-vnc.c
+++ b/src/grd-session-vnc.c
@@ -4 1,14 +41 ,27 @@
@@ -4 2,14 +42 ,27 @@
#define BGRX_SAMPLES_PER_PIXEL 3
#define BGRX_BYTES_PER_PIXEL 4
@ -1009,8 +1007,8 @@ index 0c189fd..596896d 100644
rfbScreenInfoPtr rfb_screen;
rfbClientPtr rfb_client;
@@ - 76,7 +89 ,7 @@ struct _GrdSessionVnc
G_DEFINE_TYPE (GrdSessionVnc, grd_session_vnc, GRD_TYPE_SESSION);
@@ - 81,7 +94 ,7 @@ struct _GrdSessionVnc
G_DEFINE_TYPE (GrdSessionVnc, grd_session_vnc, GRD_TYPE_SESSION)
static void
-grd_session_vnc_detach_source (GrdSessionVnc *session_vnc);
@ -1018,7 +1016,7 @@ index 0c189fd..596896d 100644
static gboolean
close_session_idle (gpointer user_data);
@@ -2 35,7 +248 ,8 @@ handle_client_gone (rfbClientPtr rfb_client)
@@ -2 48,7 +261 ,8 @@ handle_client_gone (rfbClientPtr rfb_client)
g_debug ("VNC client gone");
@ -1028,16 +1026,16 @@ index 0c189fd..596896d 100644
maybe_queue_close_session_idle (session_vnc);
session_vnc->rfb_client = NULL;
}
@@ -3 04,7 +318 ,7 @@ handle_new_client (rfbClientPtr rfb_client)
session_vnc->prompt_cancellable,
prompt_response_callback,
session_vnc );
@@ -3 38,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;
@@ - 533,7 +547 ,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));
@ -1046,8 +1044,8 @@ index 0c189fd..596896d 100644
return TRUE;
}
else
@@ - 718,6 +732 ,36 @@ grd_session_vnc_detach_source (GrdSessionVnc *session_vnc)
g_clear_pointer (&session_vnc->source, g_source_destroy );
@@ - 821,6 +835 ,36 @@ grd_session_vnc_detach_source (GrdSessionVnc *session_vnc)
g_clear_pointer (&session_vnc->source, g_source_unref );
}
+gboolean
@ -1080,10 +1078,10 @@ index 0c189fd..596896d 100644
+ g_signal_emit (session_vnc, signals[RESUMED], 0);
+}
+
GrdSessionVnc *
grd_session_vnc_new (GrdVncServer *vnc_server ,
GSocketConnection *connection)
@@ - 735,6 +779 ,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);
@ -1091,16 +1089,16 @@ index 0c189fd..596896d 100644
init_vnc_session (session_vnc);
@@ - 764,7 +809 ,7 @@ grd_session_vnc_stop (GrdSession *session)
g_clear_object (&session_vnc->pipewire_stream);
@@ - 893,7 +938 ,7 @@ grd_session_vnc_stop (GrdSession *session)
g_clear_object (&session_vnc->stream);
}
- grd_session_vnc_detach_source (session_vnc);
+ grd_session_vnc_pause (session_vnc);
g_clear_object (&session_vnc->connection);
g_clear_object (&session_vnc->clipboard_vnc);
@@ - 817,8 +862,8 @@ grd_session_vnc_stream_ready (GrdSession *session ,
@@ - 984,8 +1029,8 @@ on_stream_ready (GrdStream *stream ,
G_CALLBACK (on_pipewire_stream_closed),
session_vnc);
@ -1111,10 +1109,10 @@ index 0c189fd..596896d 100644
}
static void
@@ - 837,4 +882 ,17 @@ grd_session_vnc_class_init (GrdSessionVncClass *klass)
session_class->stop = grd_session_vnc_stop ;
session_class->stream_ready = grd_session_vnc_stream_ready ;
@@ - 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_c reate d = grd_session_vnc_on_ stream_c reate d;
+
+ signals[PAUSED] = g_signal_new ("paused",
+ G_TYPE_FROM_CLASS (klass),
@ -1130,10 +1128,10 @@ index 0c189fd..596896d 100644
+ G_TYPE_NONE, 0);
}
--
2.29.2
2.44.0
From 3b33524046d299111cc150cc8d6d100f1e516485 Mon Sep 17 00:00:00 2001
From 00f4fdfc676361f5f71e6f6b346c11cb7088b836 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
Date: Wed, 27 Nov 2019 11:03:46 +0100
Subject: [PATCH 3/7] session-vnc: Add grd_session_vnc_dispatch() helper
@ -1146,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 596896d..06b2cf7 100644
index 30820d7d..3ee06f79 100644
--- a/src/grd-session-vnc.c
+++ b/src/grd-session-vnc.c
@@ - 672,6 +672 ,21 @@ vnc_socket_grab_func (GrdSessionVnc *session_vnc,
@@ - 771,6 +771 ,21 @@ vnc_socket_grab_func (GrdSessionVnc *session_vnc,
return TRUE;
}
@ -1171,7 +1169,7 @@ index 596896d..06b2cf7 100644
static gboolean
handle_socket_data (GSocket *socket,
GIOCondition condition,
@@ - 688,16 +703 ,7 @@ handle_socket_data (GSocket *socket,
@@ - 787,16 +802 ,7 @@ handle_socket_data (GSocket *socket,
}
else if (condition & G_IO_IN)
{
@ -1190,10 +1188,10 @@ index 596896d..06b2cf7 100644
else
{
diff --git a/src/grd-session-vnc.h b/src/grd-session-vnc.h
index 4e7b33d..cf275af 100644
index ffc8d27a..a86d61d2 100644
--- a/src/grd-session-vnc.h
+++ b/src/grd-session-vnc.h
@@ - 79,6 +79 ,8 @@ void grd_session_vnc_grab_socket (GrdSessionVnc *session_vnc,
@@ - 80,6 +80 ,8 @@ void grd_session_vnc_grab_socket (GrdSessionVnc *session_vnc,
void grd_session_vnc_ungrab_socket (GrdSessionVnc *session_vnc,
GrdVncSocketGrabFunc grab_func);
@ -1203,10 +1201,10 @@ index 4e7b33d..cf275af 100644
#endif /* GRD_SESSION_VNC_H */
--
2.29.2
2.44.0
From 3945af78cea858033d954bb1b071269687bdea85 Mon Sep 17 00:00:00 2001
From 69efe6df5e9e8548c0241a612980af31f1dc5c5a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
Date: Wed, 27 Nov 2019 11:05:13 +0100
Subject: [PATCH 4/7] vnc/tls: Add some logging
@ -1218,7 +1216,7 @@ protocol rather than the session itself.
1 file changed, 9 insertions(+)
diff --git a/src/grd-vnc-tls.c b/src/grd-vnc-tls.c
index ec4758e ..ac6c35f 100644
index ec4758e 0 ..ac6c35f6 100644
--- a/src/grd-vnc-tls.c
+++ b/src/grd-vnc-tls.c
@@ -67,6 +67,7 @@ grd_vnc_tls_context_new (void)
@ -1280,10 +1278,10 @@ index ec4758e..ac6c35f 100644
{
g_warning ("TLS handshake failed: %s", error->message);
--
2.29.2
2.44.0
From f5330797678f4c4db4a3fa19cebd30dd4d6bbb8c Mon Sep 17 00:00:00 2001
From 2a11c4f47165b62409f4428b9de1bda59c6ebb2f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
Date: Wed, 27 Nov 2019 11:07:40 +0100
Subject: [PATCH 5/7] vnc/tls: Dispatch also when data is pending outside of
@ -1300,10 +1298,10 @@ long as there is data to read in those buffers.
2 files changed, 86 insertions(+), 6 deletions(-)
diff --git a/src/grd-session-vnc.h b/src/grd-session-vnc.h
index cf275af..efc0038 100644
index a86d61d2..5db388b0 100644
--- a/src/grd-session-vnc.h
+++ b/src/grd-session-vnc.h
@@ - 79,6 +79 ,8 @@ void grd_session_vnc_grab_socket (GrdSessionVnc *session_vnc,
@@ - 80,6 +80 ,8 @@ void grd_session_vnc_grab_socket (GrdSessionVnc *session_vnc,
void grd_session_vnc_ungrab_socket (GrdSessionVnc *session_vnc,
GrdVncSocketGrabFunc grab_func);
@ -1313,7 +1311,7 @@ index cf275af..efc0038 100644
GrdVncServer * grd_session_vnc_get_vnc_server (GrdSessionVnc *session_vnc);
diff --git a/src/grd-vnc-tls.c b/src/grd-vnc-tls.c
index ac6c35f ..312b6b9 100644
index ac6c35f 6 ..312b6b92 100644
--- a/src/grd-vnc-tls.c
+++ b/src/grd-vnc-tls.c
@@ -41,6 +41,12 @@ typedef enum _GrdTlsHandshakeState
@ -1450,10 +1448,10 @@ index ac6c35f..312b6b9 100644
}
--
2.29.2
2.44.0
From fae9653965ddcc3d5684a056d9bdf46ef439d 649 Mon Sep 17 00:00:00 2001
From 1ed580b541ab5c3b815d8e29cf3aa71f1de0b 649 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
Date: Wed, 27 Nov 2019 16:48:00 +0100
Subject: [PATCH 6/7] session-vnc: Set our own password handling function up
@ -1472,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 06b2cf7..7a4c6b3 100644
index 3ee06f79..6e118d88 100644
--- a/src/grd-session-vnc.c
+++ b/src/grd-session-vnc.c
@@ -9 4,11 +94 ,6 @@ grd_session_vnc_pause (GrdSessionVnc *session_vnc);
@@ -9 9,11 +99 ,6 @@ grd_session_vnc_pause (GrdSessionVnc *session_vnc);
static gboolean
close_session_idle (gpointer user_data);
@ -1487,7 +1485,7 @@ index 06b2cf7..7a4c6b3 100644
static void
swap_uint8 (uint8_t *a,
uint8_t *b)
@@ -3 21,7 +316 ,6 @@ handle_new_client (rfbClientPtr rfb_client)
@@ -3 55,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:
@ -1495,9 +1493,9 @@ index 06b2cf7..7a4c6b3 100644
/*
* authPasswdData needs to be non NULL in libvncserver to trigger
* password authentication.
@@ - 620,6 +614 ,8 @@ init_vnc_session (GrdSessionVnc *session_vnc)
rfb_screen->frameBuffer = g_malloc0 (screen_width * screen_height * 4) ;
memset (rfb_screen->frameBuffer, 0x1f, screen_width * screen_height * 4);
@@ - 719,6 +713 ,8 @@ init_vnc_session (GrdSessionVnc *session_vnc)
session_vnc->monitor_config->connectors = connectors ;
}
+ rfb_screen->passwordCheck = check_rfb_password;
+
@ -1505,10 +1503,10 @@ index 06b2cf7..7a4c6b3 100644
rfbProcessEvents (rfb_screen, 0);
}
--
2.29.2
2.44.0
From 1ae1286b2cc868045f93c02b7a990638ca94b26 d Mon Sep 17 00:00:00 2001
From 9b7b729d9f945fcb2942c74d8ab7a9b62d6cf4b d 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
@ -1526,10 +1524,10 @@ dropped.
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/grd-session-vnc.h b/src/grd-session-vnc.h
index efc0038..f3a631 4 100644
index 5db388b0..c4f4e8d 4 100644
--- a/src/grd-session-vnc.h
+++ b/src/grd-session-vnc.h
@@ -6 7,7 +67 ,8 @@ int grd_session_vnc_get_stride_for_width (GrdSessionVnc *session_vnc,
@@ -6 8,7 +68 ,8 @@ int grd_session_vnc_get_stride_for_width (GrdSessionVnc *session_vnc,
int grd_session_vnc_get_fd (GrdSessionVnc *session_vnc);
@ -1540,5 +1538,5 @@ index efc0038..f3a6314 100644
gboolean grd_session_vnc_is_client_gone (GrdSessionVnc *session_vnc);
--
2.29.2
2.44.0