diff options
author | Ray Strode <rstrode@redhat.com> | 2014-04-10 08:56:10 -0400 |
---|---|---|
committer | Ray Strode <rstrode@redhat.com> | 2014-04-10 13:23:22 -0400 |
commit | 559fa86ea593fcc89a23e76f41e0cd4520383698 (patch) | |
tree | 66881cb02582f4dc37665ee4645d20156c8c2bb9 | |
parent | e546e4dc6649a4fdf9065322420a28fa7e666782 (diff) | |
download | gdm-559fa86ea593fcc89a23e76f41e0cd4520383698.tar.gz |
session: introduce new client-rejected signal
If a client gets rejected because it's not allowed to connect
to a particular session, we really need to inform the owner
of the session object so it can do any clean up it needs to do,
if necessary.
https://bugzilla.gnome.org/show_bug.cgi?id=727982
-rw-r--r-- | daemon/gdm-session.c | 24 | ||||
-rw-r--r-- | daemon/gdm-session.h | 1 |
2 files changed, 25 insertions, 0 deletions
diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c index 723aecd9..805072b5 100644 --- a/daemon/gdm-session.c +++ b/daemon/gdm-session.c @@ -143,6 +143,7 @@ enum { SETUP_COMPLETE, CANCELLED, HOSTNAME_SELECTED, + CLIENT_REJECTED, CLIENT_CONNECTED, CLIENT_DISCONNECTED, CLIENT_READY_FOR_SESSION_TO_START, @@ -1563,6 +1564,7 @@ allow_user_function (GDBusAuthObserver *observer, GdmSession *self) { uid_t client_uid; + GPid pid_of_client; client_uid = g_credentials_get_unix_user (credentials, NULL); if (client_uid == self->priv->allowed_user) { @@ -1571,6 +1573,15 @@ allow_user_function (GDBusAuthObserver *observer, g_debug ("GdmSession: User not allowed"); + pid_of_client = g_credentials_get_unix_pid (credentials, NULL); + g_signal_emit (G_OBJECT (self), + signals [CLIENT_REJECTED], + 0, + credentials, + (guint) + pid_of_client); + + return FALSE; } @@ -3259,6 +3270,19 @@ gdm_session_class_init (GdmSessionClass *session_class) G_TYPE_NONE, 0); + signals [CLIENT_REJECTED] = + g_signal_new ("client-rejected", + GDM_TYPE_SESSION, + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (GdmSessionClass, client_rejected), + NULL, + NULL, + NULL, + G_TYPE_NONE, + 2, + G_TYPE_CREDENTIALS, + G_TYPE_UINT); + signals [CLIENT_CONNECTED] = g_signal_new ("client-connected", GDM_TYPE_SESSION, diff --git a/daemon/gdm-session.h b/daemon/gdm-session.h index 8bc8a576..fe2eb538 100644 --- a/daemon/gdm-session.h +++ b/daemon/gdm-session.h @@ -78,6 +78,7 @@ typedef struct gboolean client_is_ready); void (* cancelled) (GdmSession *session); + void (* client_rejected) (GdmSession *session); void (* client_connected) (GdmSession *session); void (* client_disconnected) (GdmSession *session); void (* disconnected) (GdmSession *session); |