diff options
author | Ray Strode <rstrode@redhat.com> | 2012-07-09 21:33:10 -0400 |
---|---|---|
committer | Ray Strode <rstrode@redhat.com> | 2012-07-17 04:14:56 -0400 |
commit | 2853ce5812aa8f03f677516e64d5dcff1e6e01ab (patch) | |
tree | 9287b11efc20a033ca2d57a99d7046c607163e18 /daemon/gdm-session-worker-job.c | |
parent | 4f86de30a115a77cf61b4652fef53f9f0517fc0b (diff) | |
download | gdm-2853ce5812aa8f03f677516e64d5dcff1e6e01ab.tar.gz |
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).
Diffstat (limited to 'daemon/gdm-session-worker-job.c')
-rw-r--r-- | daemon/gdm-session-worker-job.c | 28 |
1 files changed, 28 insertions, 0 deletions
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), |