From 2853ce5812aa8f03f677516e64d5dcff1e6e01ab Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Mon, 9 Jul 2012 21:33:10 -0400 Subject: worker: add reauthentication support This commit adds reauthentication support for screensavers and user switching to use. 1) It adds a "verification mode" argument to the GdmSession constructor that tweaks the behavior of how the session worker acts to fit login or unlock scenarios better. 2) It adds a way for programs to open a communication channel for user verification to already runnings sessions (so reauthentication happens in the context of the session). --- daemon/gdm-session-worker-job.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'daemon/gdm-session-worker-job.c') diff --git a/daemon/gdm-session-worker-job.c b/daemon/gdm-session-worker-job.c index 35a506af..1aa67876 100644 --- a/daemon/gdm-session-worker-job.c +++ b/daemon/gdm-session-worker-job.c @@ -52,6 +52,7 @@ struct GdmSessionWorkerJobPrivate { char *command; GPid pid; + gboolean for_reauth; guint child_watch_id; @@ -61,6 +62,7 @@ struct GdmSessionWorkerJobPrivate enum { PROP_0, PROP_SERVER_ADDRESS, + PROP_FOR_REAUTH, }; enum { @@ -194,6 +196,10 @@ get_job_environment (GdmSessionWorkerJob *job) g_hash_table_insert (hash, g_strdup ("GDM_SESSION_DBUS_ADDRESS"), g_strdup (job->priv->server_address)); + if (job->priv->for_reauth) { + g_hash_table_insert (hash, g_strdup ("GDM_SESSION_FOR_REAUTH"), g_strdup ("1")); + } + g_hash_table_foreach (hash, (GHFunc)listify_hash, env); g_hash_table_destroy (hash); @@ -349,6 +355,15 @@ gdm_session_worker_job_set_server_address (GdmSessionWorkerJob *session_worker_j session_worker_job->priv->server_address = g_strdup (address); } +void +gdm_session_worker_job_set_for_reauth (GdmSessionWorkerJob *session_worker_job, + gboolean for_reauth) +{ + g_return_if_fail (GDM_IS_SESSION_WORKER_JOB (session_worker_job)); + + session_worker_job->priv->for_reauth = for_reauth; +} + static void gdm_session_worker_job_set_property (GObject *object, guint prop_id, @@ -363,6 +378,9 @@ gdm_session_worker_job_set_property (GObject *object, case PROP_SERVER_ADDRESS: gdm_session_worker_job_set_server_address (self, g_value_get_string (value)); break; + case PROP_FOR_REAUTH: + gdm_session_worker_job_set_for_reauth (self, g_value_get_boolean (value)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -383,6 +401,9 @@ gdm_session_worker_job_get_property (GObject *object, case PROP_SERVER_ADDRESS: g_value_set_string (value, self->priv->server_address); break; + case PROP_FOR_REAUTH: + g_value_set_boolean (value, self->priv->for_reauth); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -422,6 +443,13 @@ gdm_session_worker_job_class_init (GdmSessionWorkerJobClass *klass) "server address", NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); + g_object_class_install_property (object_class, + PROP_FOR_REAUTH, + g_param_spec_boolean ("for-reauth", + "for reauth", + "for reauth", + FALSE, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); signals [STARTED] = g_signal_new ("started", G_OBJECT_CLASS_TYPE (object_class), -- cgit v1.2.1