[gtk-frdp/gtk-frdp-0-1] frdp-session: Fix interactive authentication
- From: Felipe Borges <felipeborges src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk-frdp/gtk-frdp-0-1] frdp-session: Fix interactive authentication
- Date: Thu, 2 Sep 2021 09:51:55 +0000 (UTC)
commit 62659b094065e333c4db9a5c3e125609351ad0d7
Author: Felipe Borges <felipeborges gnome org>
Date: Thu Sep 2 11:28:11 2021 +0200
frdp-session: Fix interactive authentication
src/frdp-session.c | 80 ++++++++++++++++++++++++++++++++----------------------
1 file changed, 47 insertions(+), 33 deletions(-)
---
diff --git a/src/frdp-session.c b/src/frdp-session.c
index 213d2e4..2301652 100644
--- a/src/frdp-session.c
+++ b/src/frdp-session.c
@@ -99,7 +99,10 @@ frdp_session_update_mouse_pointer (FrdpSession *self)
GdkDisplay *display;
GdkWindow *window;
- window = gtk_widget_get_parent_window(priv->display);
+ window = gtk_widget_get_window (priv->display);
+ if (window == NULL)
+ return;
+
display = gtk_widget_get_display(priv->display);
if (priv->show_cursor && priv->cursor_null) {
cairo_surface_t *surface;
@@ -207,7 +210,6 @@ fail:
static void
frdp_Pointer_Free (rdpContext* context, rdpPointer* pointer)
{
- frdpContext *fcontext = (frdpContext*) context;
frdpPointer *fpointer = (frdpPointer*) pointer;
if (fpointer && fpointer->data) {
@@ -236,21 +238,20 @@ frdp_Pointer_SetNull (rdpContext* context)
{
frdpContext *fcontext = (frdpContext*) context;
FrdpSessionPrivate *priv = fcontext->self->priv;
- unsigned char *data;
- cairo_surface_t *surface;
priv->cursor = NULL;
priv->cursor_null = TRUE;
frdp_session_update_mouse_pointer (fcontext->self);
- return TRUE;
+
+ return TRUE;
}
static BOOL
frdp_Pointer_SetDefault (rdpContext* context)
{
frdpContext *fcontext = (frdpContext*) context;
- FrdpSessionPrivate *priv = fcontext->self->priv;
+ FrdpSessionPrivate *priv = fcontext->self->priv;
priv->cursor = NULL;
priv->cursor_null = FALSE;
@@ -261,9 +262,7 @@ frdp_Pointer_SetDefault (rdpContext* context)
static BOOL
frdp_Pointer_SetPosition (rdpContext* context, UINT32 x, UINT32 y)
{
- frdpContext *fcontext = (frdpContext*) context;
- /* TODO */
- return TRUE;
+ return TRUE;
}
static void
@@ -496,7 +495,25 @@ idle_close (gpointer user_data)
{
FrdpSession *self = (FrdpSession*) user_data;
+ self->priv->is_connected = FALSE;
+
+ if (self->priv->update_id > 0) {
+ g_source_remove (self->priv->update_id);
+ self->priv->update_id = 0;
+ }
+
+ if (self->priv->freerdp_session != NULL) {
+ freerdp_disconnect (self->priv->freerdp_session);
+ freerdp_context_free (self->priv->freerdp_session);
+ g_clear_pointer (&self->priv->freerdp_session, freerdp_free);
+ }
+
+ g_clear_pointer (&self->priv->hostname, g_free);
+ g_clear_pointer (&self->priv->username, g_free);
+ g_clear_pointer (&self->priv->password, g_free);
+
g_signal_emit (self, signals[RDP_DISCONNECTED], 0);
+ g_debug ("RDP client disconnected");
return FALSE;
}
@@ -567,6 +584,16 @@ frdp_session_init_freerdp (FrdpSession *self)
settings->AllowFontSmoothing = TRUE;
settings->AllowUnanouncedOrdersFromServer = TRUE;
+
+ /* Security settings */
+ settings->RdpSecurity = TRUE;
+ settings->TlsSecurity = TRUE;
+ settings->NlaSecurity = TRUE;
+ settings->EncryptionMethods = ENCRYPTION_METHOD_40BIT | ENCRYPTION_METHOD_128BIT | ENCRYPTION_METHOD_FIPS;
+ settings->EncryptionLevel = ENCRYPTION_LEVEL_CLIENT_COMPATIBLE;
+ settings->UseRdpSecurityLayer = FALSE;
+
+ settings->NegotiateSecurityLayer = TRUE;
}
static void
@@ -589,7 +616,10 @@ frdp_session_connect_thread (GTask *task,
case FREERDP_ERROR_CONNECT_FAILED:
case FREERDP_ERROR_SERVER_DENIED_CONNECTION:
case FREERDP_ERROR_CONNECT_NO_OR_MISSING_CREDENTIALS:
+ case FREERDP_ERROR_CONNECT_LOGON_FAILURE:
case STATUS_LOGON_FAILURE:
+ case STATUS_PASSWORD_EXPIRED:
+ case FREERDP_ERROR_CONNECT_ACCOUNT_EXPIRED:
case FREERDP_ERROR_CONNECT_TRANSPORT_FAILED:
g_signal_emit (self,
signals[RDP_AUTH_FAILURE], 0,
@@ -698,20 +728,8 @@ static void
frdp_session_finalize (GObject *object)
{
FrdpSession *self = (FrdpSession*) object;
- /* TODO: free the world! */
-
- if (self->priv->freerdp_session) {
- freerdp_disconnect (self->priv->freerdp_session);
- freerdp_context_free (self->priv->freerdp_session);
- g_clear_pointer (&self->priv->freerdp_session, freerdp_free);
- }
- if (frdp_session_is_open (self))
- frdp_session_close (self);
-
- g_clear_pointer (&self->priv->hostname, g_free);
- g_clear_pointer (&self->priv->username, g_free);
- g_clear_pointer (&self->priv->password, g_free);
+ idle_close (self);
G_OBJECT_CLASS (frdp_session_parent_class)->finalize (object);
}
@@ -773,6 +791,11 @@ frdp_session_class_init (FrdpSessionClass *klass)
TRUE,
G_PARAM_READWRITE));
+ signals[RDP_CONNECTED] = g_signal_new ("rdp-connected",
+ FRDP_TYPE_SESSION,
+ G_SIGNAL_RUN_FIRST,
+ 0, NULL, NULL, NULL,
+ G_TYPE_NONE, 0);
signals[RDP_DISCONNECTED] = g_signal_new ("rdp-disconnected",
FRDP_TYPE_SESSION,
G_SIGNAL_RUN_FIRST,
@@ -843,18 +866,9 @@ frdp_session_is_open (FrdpSession *self)
void
frdp_session_close (FrdpSession *self)
{
- if (self->priv->update_id > 0) {
- g_source_remove (self->priv->update_id);
- self->priv->update_id = 0;
- }
-
- if (self->priv->freerdp_session != NULL) {
- gdi_free (self->priv->freerdp_session);
-
- self->priv->is_connected = FALSE;
+ idle_close (self);
- g_debug ("Closing RDP session");
- }
+ g_debug ("Closing RDP session");
}
void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]