@ -1,4 +1,4 @@
From 0e754e3a90f486c031da535656584673016107a3 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>
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-user.c | 3 +
src/grd-settings.c | 18 +
src/grd-vnc-server.c | 49 ++
src/grd-settings.c | 28 + +
src/grd-settings.h | 2 +
src/grd-vnc-server.c | 45 ++
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, 673 insertions(+), 26 deletions(-)
11 files changed, 678 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 995863ce..40733a6e 100644
index 5e9ad04..9bbd5fc 100644
--- a/meson.build
+++ b/meson.build
@@ - 62,6 +62 ,7 @@ endif
@@ - 40,6 +40 ,7 @@ endif
if have_vnc
libvncclient_dep = dependency('libvncclient')
libvncserver_dep = dependency('libvncserver')
libvncclient_dep = dependency('libvncclient')
+ gnutls_dep = dependency('gnutls')
endif
prefix = get_option('prefix' )
cdata = configuration_data( )
diff --git a/src/grd-enums.h b/src/grd-enums.h
index 028bdf9a..47a1d921 100644
index ffab821..4333863 100644
--- a/src/grd-enums.h
+++ b/src/grd-enums.h
@@ - 33,6 +33,12 @@ typedef enum
@@ - 27,4 +27,10 @@ typedef enum
GRD_VNC_AUTH_METHOD_PASSWORD
} GrdVncAuthMethod;
@ -50,14 +50,12 @@ index 028bdf9a..47a1d921 100644
+ GRD_VNC_ENCRYPTION_TLS_ANON = 1 << 1,
+} GrdVncEncryption;
+
typedef enum
{
GRD_VNC_SCREEN_SHARE_MODE_MIRROR_PRIMARY,
#endif /* GRD_ENUMS_H */
diff --git a/src/grd-session-vnc.c b/src/grd-session-vnc.c
index 0 ca76e89..e13ac013 100644
index 0e520dc..0c189fd 100644
--- a/src/grd-session-vnc.c
+++ b/src/grd-session-vnc.c
@@ -4 6,7 +46 ,9 @@ struct _GrdSessionVnc
@@ -4 5,7 +45 ,9 @@ struct _GrdSessionVnc
{
GrdSession parent;
@ -67,7 +65,7 @@ index 0ca76e89..e13ac013 100644
GSource *source;
rfbScreenInfoPtr rfb_screen;
rfbClientPtr rfb_client;
@@ - 608,6 +610 ,12 @@ check_rfb_password (rfbClientPtr rfb_client,
@@ - 540,6 +542 ,12 @@ check_rfb_password (rfbClientPtr rfb_client,
}
}
@ -80,7 +78,7 @@ index 0ca76e89..e13ac013 100644
int
grd_session_vnc_get_stride_for_width (GrdSessionVnc *session_vnc,
int width)
@@ - 615,6 +623 ,18 @@ grd_session_vnc_get_stride_for_width (GrdSessionVnc *session_vnc,
@@ - 547,6 +555 ,18 @@ grd_session_vnc_get_stride_for_width (GrdSessionVnc *session_vnc,
return width * BGRX_BYTES_PER_PIXEL;
}
@ -99,7 +97,7 @@ index 0ca76e89..e13ac013 100644
static void
init_vnc_session (GrdSessionVnc *session_vnc)
{
@@ - 689,44 +709 ,85 @@ init_vnc_session (GrdSessionVnc *session_vnc)
@@ - 590,44 +610 ,85 @@ init_vnc_session (GrdSessionVnc *session_vnc)
rfbProcessEvents (rfb_screen, 0);
}
@ -210,7 +208,7 @@ index 0ca76e89..e13ac013 100644
}
return G_SOURCE_CONTINUE;
@@ - 739,7 +800 ,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);
session_vnc->source = g_socket_create_source (socket,
@ -222,23 +220,18 @@ index 0ca76e89..e13ac013 100644
NULL);
g_source_set_callback (session_vnc->source,
(GSourceFunc) handle_socket_data,
@@ - 780,6 +844,7 @@ grd_session_vnc_new (GrdVncServer *vnc_server,
@@ - 666,8 +730,10 @@ 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);
@@ - 806,6 +872 ,8 @@ grd_session_vnc_dispose (GObject *object)
@@ -682,6 +748,8 @@ grd_session_vnc_dispose (GObject *object)
g_assert (!session_vnc->rfb_screen);
@ -248,12 +241,12 @@ index 0ca76e89..e13ac013 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 be79cf4a..ffc8d27a 100644
index a532567..4e7b33d 100644
--- a/src/grd-session-vnc.h
+++ b/src/grd-session-vnc.h
@@ -3 7,6 +37 ,9 @@ G_DECLARE_FINAL_TYPE (GrdSessionVnc,
@@ -3 6,6 +36 ,9 @@ G_DECLARE_FINAL_TYPE (GrdSessionVnc,
GRD, SESSION_VNC,
GrdSession)
GrdSession);
+typedef gboolean (* GrdVncSocketGrabFunc) (GrdSessionVnc *session_vnc,
+ GError **error);
@ -261,7 +254,7 @@ index be79cf4a..ffc8d27a 100644
GrdSessionVnc *grd_session_vnc_new (GrdVncServer *vnc_server,
GSocketConnection *connection);
@@ -6 3,6 +66 ,20 @@ void grd_session_vnc_set_client_clipboard_text (GrdSessionVnc *session_vnc,
@@ -6 2,6 +65 ,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);
@ -282,80 +275,94 @@ index be79cf4a..ffc8d27a 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 fba1d714..f3475010 100644
index d2f31d2..12d8693 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
@@ -60,6 +60,7 @@ struct _GrdSettings
gboolean view_only;
GrdVncScreenShareMode screen_share_mode;
GrdVncAuthMethod auth_method;
int port;
+ GrdVncEncryption encryption;
} vnc;
} GrdSettingsPrivate ;
};
@@ -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);
@@ -242,6 +243,12 @@ grd_settings_get_vnc_auth_method (GrdSettings *settings)
return settings->vnc.auth_method;
}
@@ -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);
+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");
}
+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);
}
@@ -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));
+ 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);
}
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 877272d2..59a13db5 100644
index a6d95cb..f9c68db 100644
--- a/src/grd-vnc-server.c
+++ b/src/grd-vnc-server.c
@@ -24,6 +24,7 @@
@@ -24, 11 +24,13 @@
#include "grd-vnc-server.h"
@ -363,15 +370,13 @@ index 877272d2..59a13db5 100644
#include <gio/gio.h>
#include <rfb/rfb.h>
@@ -31,6 +32,7 @@
#include "grd-debug.h"
#include "grd-context.h"
#include "grd-session-vnc.h"
#include "grd-utils.h"
+#include "grd-vnc-tls.h"
enum
{
@@ -130,6 +132,45 @@ on_incoming (GSocketService *service,
@@ -130,6 +132,43 @@ on_incoming (GSocketService *service,
return TRUE;
}
@ -383,9 +388,7 @@ index 877272d2..59a13db5 100644
+ GrdVncEncryption encryption;
+
+ tls_security_handler = grd_vnc_tls_get_security_handler ();
+ g_object_get (G_OBJECT (settings),
+ "vnc-encryption", &encryption,
+ NULL);
+ encryption = grd_settings_get_vnc_encryption (settings);
+
+ if (encryption == (GRD_VNC_ENCRYPTION_NONE | GRD_VNC_ENCRYPTION_TLS_ANON))
+ {
@ -417,19 +420,18 @@ index 877272d2..59a13db5 100644
gboolean
grd_vnc_server_start (GrdVncServer *vnc_server,
GError **error)
@@ -241,11 +282,19 @@ grd_vnc_server_dispose (GObject *object)
static void
@@ -220,12 +259,18 @@ 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_get_debug_flags () & GRD_DEBUG_VNC)
if (grd_context_ get_debug_flags (vnc_server->context ) & GRD_DEBUG_VNC)
rfbLogEnable (1);
else
rfbLogEnable (0);
+ g_signal_connect (settings, " notify:: vnc-encryption",
+ g_signal_connect (settings, " vnc-encryption-changed ",
+ G_CALLBACK (on_vnc_encryption_changed),
+ vnc_server);
+ sync_encryption_settings (vnc_server);
@ -439,7 +441,7 @@ index 877272d2..59a13db5 100644
diff --git a/src/grd-vnc-tls.c b/src/grd-vnc-tls.c
new file mode 100644
index 0000000 0 ..ec4758e0
index 0000000 ..ec4758e
--- /dev/null
+++ b/src/grd-vnc-tls.c
@@ -0,0 +1,444 @@
@ -889,7 +891,7 @@ index 00000000..ec4758e0
+}
diff --git a/src/grd-vnc-tls.h b/src/grd-vnc-tls.h
new file mode 100644
index 0000000 0 ..135ef8c7
index 0000000 ..135ef8c
--- /dev/null
+++ b/src/grd-vnc-tls.h
@@ -0,0 +1,28 @@
@ -922,10 +924,10 @@ index 00000000..135ef8c7
+
+#endif /* GRD_VNC_TLS_H */
diff --git a/src/meson.build b/src/meson.build
index 914e2cc1..4e820c59 100644
index 843746d..133cc60 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ - 188,10 +188 ,13 @@ if have_vnc
@@ - 72,10 +72 ,13 @@ if have_vnc
'grd-vnc-pipewire-stream.h',
'grd-vnc-server.c',
'grd-vnc-server.h',
@ -940,11 +942,11 @@ index 914e2cc1..4e820c59 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 c3d583c1..8a736c82 100644
index 4b6e593..0086d99 100644
--- a/src/org.gnome.desktop.remote-desktop.gschema.xml.in
+++ b/src/org.gnome.desktop.remote-desktop.gschema.xml.in
@@ - 148,5 +148 ,15 @@
configuration updates.
@@ - 49,5 +49 ,15 @@
* password - by requiring the remote client to provide a known password
</description>
</key>
+ <key name='encryption' flags='org.gnome.desktop.remote-desktop.GrdVncEncryption'>
@ -960,10 +962,10 @@ index c3d583c1..8a736c82 100644
</schema>
</schemalist>
--
2.44.0
2.29.2
From 6e5f6deab459acdd1e7785ab6975932f2815548 f Mon Sep 17 00:00:00 2001
From 552e9c9add722e953a8da22bd54ba0fef7a9d6a 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
@ -976,10 +978,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 e13ac013..30820d7 d 100644
index 0c189fd..596896 d 100644
--- a/src/grd-session-vnc.c
+++ b/src/grd-session-vnc.c
@@ -4 2,14 +42 ,27 @@
@@ -4 1,14 +41 ,27 @@
#define BGRX_SAMPLES_PER_PIXEL 3
#define BGRX_BYTES_PER_PIXEL 4
@ -1007,8 +1009,8 @@ index e13ac013..30820d7d 100644
rfbScreenInfoPtr rfb_screen;
rfbClientPtr rfb_client;
@@ - 81,7 +94 ,7 @@ struct _GrdSessionVnc
G_DEFINE_TYPE (GrdSessionVnc, grd_session_vnc, GRD_TYPE_SESSION)
@@ - 76,7 +89 ,7 @@ struct _GrdSessionVnc
G_DEFINE_TYPE (GrdSessionVnc, grd_session_vnc, GRD_TYPE_SESSION);
static void
-grd_session_vnc_detach_source (GrdSessionVnc *session_vnc);
@ -1016,7 +1018,7 @@ index e13ac013..30820d7d 100644
static gboolean
close_session_idle (gpointer user_data);
@@ -2 48,7 +261 ,8 @@ handle_client_gone (rfbClientPtr rfb_client)
@@ -2 35,7 +248 ,8 @@ handle_client_gone (rfbClientPtr rfb_client)
g_debug ("VNC client gone");
@ -1026,16 +1028,16 @@ index e13ac013..30820d7d 100644
maybe_queue_close_session_idle (session_vnc);
session_vnc->rfb_client = NULL;
}
@@ -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 );
@@ -3 04,7 +318 ,7 @@ handle_new_client (rfbClientPtr rfb_client)
session_vnc->prompt_cancellable,
prompt_response_callback,
session_vnc );
- 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;
@@ - 601,7 +615 ,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)
{
grd_session_start (GRD_SESSION (session_vnc));
@ -1044,8 +1046,8 @@ index e13ac013..30820d7d 100644
return TRUE;
}
else
@@ - 821,6 +835 ,36 @@ grd_session_vnc_detach_source (GrdSessionVnc *session_vnc)
g_clear_pointer (&session_vnc->source, g_source_unref );
@@ - 718,6 +732 ,36 @@ grd_session_vnc_detach_source (GrdSessionVnc *session_vnc)
g_clear_pointer (&session_vnc->source, g_source_destroy );
}
+gboolean
@ -1078,10 +1080,10 @@ index e13ac013..30820d7d 100644
+ g_signal_emit (session_vnc, signals[RESUMED], 0);
+}
+
static void
on_view_only_changed (GrdSettings *settings ,
GParamSpec *pspec,
@@ - 859,6 +903 ,7 @@ grd_session_vnc_new (GrdVncServer *vnc_server,
GrdSessionVnc *
grd_session_vnc_new (GrdVncServer *vnc_server ,
GSocketConnection *connection)
@@ - 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_attach_source (session_vnc);
@ -1089,16 +1091,16 @@ index e13ac013..30820d7d 100644
init_vnc_session (session_vnc);
@@ - 893,7 +938 ,7 @@ grd_session_vnc_stop (GrdSession *session)
g_clear_object (&session_vnc->stream);
}
@@ - 764,7 +809 ,7 @@ grd_session_vnc_stop (GrdSession *session)
g_clear_object (&session_vnc->pipewire_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);
@@ - 984,8 +1029,8 @@ on_stream_ready (GrdStream *stream ,
@@ - 817,8 +862,8 @@ grd_session_vnc_stream_ready (GrdSession *session ,
G_CALLBACK (on_pipewire_stream_closed),
session_vnc);
@ -1109,10 +1111,10 @@ index e13ac013..30820d7d 100644
}
static void
@@ - 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;
@@ - 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 ;
+
+ signals[PAUSED] = g_signal_new ("paused",
+ G_TYPE_FROM_CLASS (klass),
@ -1128,10 +1130,10 @@ index e13ac013..30820d7d 100644
+ G_TYPE_NONE, 0);
}
--
2.44.0
2.29.2
From 00f4fdfc676361f5f71e6f6b346c11cb7088b836 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>
Date: Wed, 27 Nov 2019 11:03:46 +0100
Subject: [PATCH 3/7] session-vnc: Add grd_session_vnc_dispatch() helper
@ -1144,10 +1146,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 30820d7d..3ee06f79 100644
index 596896d..06b2cf7 100644
--- a/src/grd-session-vnc.c
+++ b/src/grd-session-vnc.c
@@ - 771,6 +771 ,21 @@ vnc_socket_grab_func (GrdSessionVnc *session_vnc,
@@ - 672,6 +672 ,21 @@ vnc_socket_grab_func (GrdSessionVnc *session_vnc,
return TRUE;
}
@ -1169,7 +1171,7 @@ index 30820d7d..3ee06f79 100644
static gboolean
handle_socket_data (GSocket *socket,
GIOCondition condition,
@@ - 787,16 +802 ,7 @@ handle_socket_data (GSocket *socket,
@@ - 688,16 +703 ,7 @@ handle_socket_data (GSocket *socket,
}
else if (condition & G_IO_IN)
{
@ -1188,10 +1190,10 @@ index 30820d7d..3ee06f79 100644
else
{
diff --git a/src/grd-session-vnc.h b/src/grd-session-vnc.h
index ffc8d27a..a86d61d2 100644
index 4e7b33d..cf275af 100644
--- a/src/grd-session-vnc.h
+++ b/src/grd-session-vnc.h
@@ - 80,6 +80 ,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,
GrdVncSocketGrabFunc grab_func);
@ -1201,10 +1203,10 @@ index ffc8d27a..a86d61d2 100644
#endif /* GRD_SESSION_VNC_H */
--
2.44.0
2.29.2
From 69efe6df5e9e8548c0241a612980af31f1dc5c5a 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>
Date: Wed, 27 Nov 2019 11:05:13 +0100
Subject: [PATCH 4/7] vnc/tls: Add some logging
@ -1216,7 +1218,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 0 ..ac6c35f6 100644
index ec4758e ..ac6c35f 100644
--- a/src/grd-vnc-tls.c
+++ b/src/grd-vnc-tls.c
@@ -67,6 +67,7 @@ grd_vnc_tls_context_new (void)
@ -1278,10 +1280,10 @@ index ec4758e0..ac6c35f6 100644
{
g_warning ("TLS handshake failed: %s", error->message);
--
2.44.0
2.29.2
From 2a11c4f47165b62409f4428b9de1bda59c6ebb2f 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>
Date: Wed, 27 Nov 2019 11:07:40 +0100
Subject: [PATCH 5/7] vnc/tls: Dispatch also when data is pending outside of
@ -1298,10 +1300,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 a86d61d2..5db388b0 100644
index cf275af..efc0038 100644
--- a/src/grd-session-vnc.h
+++ b/src/grd-session-vnc.h
@@ - 80,6 +80 ,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,
GrdVncSocketGrabFunc grab_func);
@ -1311,7 +1313,7 @@ index a86d61d2..5db388b0 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 6 ..312b6b92 100644
index ac6c35f ..312b6b9 100644
--- a/src/grd-vnc-tls.c
+++ b/src/grd-vnc-tls.c
@@ -41,6 +41,12 @@ typedef enum _GrdTlsHandshakeState
@ -1448,10 +1450,10 @@ index ac6c35f6..312b6b92 100644
}
--
2.44.0
2.29.2
From 1ed580b541ab5c3b815d8e29cf3aa71f1de0b 649 Mon Sep 17 00:00:00 2001
From fae9653965ddcc3d5684a056d9bdf46ef439d 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
@ -1470,10 +1472,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 3ee06f79..6e118d88 100644
index 06b2cf7..7a4c6b3 100644
--- a/src/grd-session-vnc.c
+++ b/src/grd-session-vnc.c
@@ -9 9,11 +99 ,6 @@ grd_session_vnc_pause (GrdSessionVnc *session_vnc);
@@ -9 4,11 +94 ,6 @@ grd_session_vnc_pause (GrdSessionVnc *session_vnc);
static gboolean
close_session_idle (gpointer user_data);
@ -1485,7 +1487,7 @@ index 3ee06f79..6e118d88 100644
static void
swap_uint8 (uint8_t *a,
uint8_t *b)
@@ -3 55,7 +350 ,6 @@ handle_new_client (rfbClientPtr rfb_client)
@@ -3 21,7 +316 ,6 @@ handle_new_client (rfbClientPtr rfb_client)
grd_session_vnc_pause (session_vnc);
return RFB_CLIENT_ON_HOLD;
case GRD_VNC_AUTH_METHOD_PASSWORD:
@ -1493,9 +1495,9 @@ index 3ee06f79..6e118d88 100644
/*
* authPasswdData needs to be non NULL in libvncserver to trigger
* password authentication.
@@ - 719,6 +713 ,8 @@ init_vnc_session (GrdSessionVnc *session_vnc)
session_vnc->monitor_config->connectors = connectors ;
}
@@ - 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);
+ rfb_screen->passwordCheck = check_rfb_password;
+
@ -1503,10 +1505,10 @@ index 3ee06f79..6e118d88 100644
rfbProcessEvents (rfb_screen, 0);
}
--
2.44.0
2.29.2
From 9b7b729d9f945fcb2942c74d8ab7a9b62d6cf4b d Mon Sep 17 00:00:00 2001
From 1ae1286b2cc868045f93c02b7a990638ca94b26 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
@ -1524,10 +1526,10 @@ dropped.
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/grd-session-vnc.h b/src/grd-session-vnc.h
index 5db388b0..c4f4e8d 4 100644
index efc0038..f3a631 4 100644
--- a/src/grd-session-vnc.h
+++ b/src/grd-session-vnc.h
@@ -6 8,7 +68 ,8 @@ int grd_session_vnc_get_stride_for_width (GrdSessionVnc *session_vnc,
@@ -6 7,7 +67 ,8 @@ int grd_session_vnc_get_stride_for_width (GrdSessionVnc *session_vnc,
int grd_session_vnc_get_fd (GrdSessionVnc *session_vnc);
@ -1538,5 +1540,5 @@ index 5db388b0..c4f4e8d4 100644
gboolean grd_session_vnc_is_client_gone (GrdSessionVnc *session_vnc);
--
2.44.0
2.29.2