|
|
ef3d3d |
From a45940c9eb4ac9874e4bd2d6374b0d855d8954fe Mon Sep 17 00:00:00 2001
|
|
|
ef3d3d |
From: "Jasper St. Pierre" <jstpierre@mecheye.net>
|
|
|
ef3d3d |
Date: Thu, 13 Feb 2014 14:52:49 -0500
|
|
|
ef3d3d |
Subject: [PATCH 1/4] display: Clean up get_timed_login_details
|
|
|
ef3d3d |
|
|
|
ef3d3d |
Make it properly log itself as a GdmDisplay method, and use
|
|
|
ef3d3d |
local variables to ensure that callers can pass NULL.
|
|
|
ef3d3d |
---
|
|
|
ef3d3d |
daemon/gdm-display.c | 34 ++++++++++++++++++++++++++--------
|
|
|
ef3d3d |
1 file changed, 26 insertions(+), 8 deletions(-)
|
|
|
ef3d3d |
|
|
|
ef3d3d |
diff --git a/daemon/gdm-display.c b/daemon/gdm-display.c
|
|
|
ef3d3d |
index 352dd92..5d06036 100644
|
|
|
ef3d3d |
--- a/daemon/gdm-display.c
|
|
|
ef3d3d |
+++ b/daemon/gdm-display.c
|
|
|
ef3d3d |
@@ -426,20 +426,38 @@ gdm_display_real_get_timed_login_details (GdmDisplay *display,
|
|
|
ef3d3d |
|
|
|
ef3d3d |
gboolean
|
|
|
ef3d3d |
gdm_display_get_timed_login_details (GdmDisplay *display,
|
|
|
ef3d3d |
- gboolean *enabled,
|
|
|
ef3d3d |
- char **username,
|
|
|
ef3d3d |
- int *delay,
|
|
|
ef3d3d |
+ gboolean *out_enabled,
|
|
|
ef3d3d |
+ char **out_username,
|
|
|
ef3d3d |
+ int *out_delay,
|
|
|
ef3d3d |
GError **error)
|
|
|
ef3d3d |
{
|
|
|
ef3d3d |
+ gboolean enabled;
|
|
|
ef3d3d |
+ char *username;
|
|
|
ef3d3d |
+ int delay;
|
|
|
ef3d3d |
+
|
|
|
ef3d3d |
g_return_val_if_fail (GDM_IS_DISPLAY (display), FALSE);
|
|
|
ef3d3d |
|
|
|
ef3d3d |
- GDM_DISPLAY_GET_CLASS (display)->get_timed_login_details (display, enabled, username, delay);
|
|
|
ef3d3d |
+ GDM_DISPLAY_GET_CLASS (display)->get_timed_login_details (display, &enabled, &username, &delay);
|
|
|
ef3d3d |
|
|
|
ef3d3d |
- g_debug ("GdmSlave: Got timed login details for display %s: %d '%s' %d",
|
|
|
ef3d3d |
+ g_debug ("GdmDisplay: Got timed login details for display %s: %d '%s' %d",
|
|
|
ef3d3d |
display->priv->x11_display_name,
|
|
|
ef3d3d |
- *enabled,
|
|
|
ef3d3d |
- *username ? *username : "(null)",
|
|
|
ef3d3d |
- *delay);
|
|
|
ef3d3d |
+ enabled,
|
|
|
ef3d3d |
+ username,
|
|
|
ef3d3d |
+ delay);
|
|
|
ef3d3d |
+
|
|
|
ef3d3d |
+ if (out_enabled) {
|
|
|
ef3d3d |
+ *out_enabled = enabled;
|
|
|
ef3d3d |
+ }
|
|
|
ef3d3d |
+
|
|
|
ef3d3d |
+ if (out_username) {
|
|
|
ef3d3d |
+ *out_username = username;
|
|
|
ef3d3d |
+ } else {
|
|
|
ef3d3d |
+ g_free (username);
|
|
|
ef3d3d |
+ }
|
|
|
ef3d3d |
+
|
|
|
ef3d3d |
+ if (out_delay) {
|
|
|
ef3d3d |
+ *out_delay = delay;
|
|
|
ef3d3d |
+ }
|
|
|
ef3d3d |
|
|
|
ef3d3d |
return TRUE;
|
|
|
ef3d3d |
}
|
|
|
ef3d3d |
--
|
|
|
ef3d3d |
1.8.3.1
|
|
|
ef3d3d |
|
|
|
ef3d3d |
|
|
|
ef3d3d |
From ab639086db4f694722fa1c83046bfc503e790894 Mon Sep 17 00:00:00 2001
|
|
|
ef3d3d |
From: Vadim Rutkovsky <vrutkovs@redhat.com>
|
|
|
ef3d3d |
Date: Fri, 30 May 2014 20:33:49 +0200
|
|
|
ef3d3d |
Subject: [PATCH 2/4] Add debug messages for timed login
|
|
|
ef3d3d |
|
|
|
ef3d3d |
---
|
|
|
ef3d3d |
daemon/gdm-session.c | 1 +
|
|
|
ef3d3d |
daemon/gdm-simple-slave.c | 2 ++
|
|
|
ef3d3d |
2 files changed, 3 insertions(+)
|
|
|
ef3d3d |
|
|
|
ef3d3d |
diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c
|
|
|
ef3d3d |
index 4a749d3..6a7d570 100644
|
|
|
ef3d3d |
--- a/daemon/gdm-session.c
|
|
|
ef3d3d |
+++ b/daemon/gdm-session.c
|
|
|
ef3d3d |
@@ -2604,6 +2604,7 @@ gdm_session_request_timed_login (GdmSession *self,
|
|
|
ef3d3d |
const char *username,
|
|
|
ef3d3d |
int delay)
|
|
|
ef3d3d |
{
|
|
|
ef3d3d |
+ g_debug ("GdmSession: requesting timed login");
|
|
|
ef3d3d |
if (self->priv->greeter_interface != NULL) {
|
|
|
ef3d3d |
gdm_dbus_greeter_emit_timed_login_requested (self->priv->greeter_interface,
|
|
|
ef3d3d |
username,
|
|
|
ef3d3d |
diff --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c
|
|
|
ef3d3d |
index d83216b..f08f7ad 100644
|
|
|
ef3d3d |
--- a/daemon/gdm-simple-slave.c
|
|
|
ef3d3d |
+++ b/daemon/gdm-simple-slave.c
|
|
|
ef3d3d |
@@ -721,6 +721,7 @@ on_ready_to_request_timed_login (GdmSession *session,
|
|
|
ef3d3d |
GSimpleAsyncResult *result,
|
|
|
ef3d3d |
gpointer *user_data)
|
|
|
ef3d3d |
{
|
|
|
ef3d3d |
+ g_debug ("GdmSimpleSlave: ready to request timed login");
|
|
|
ef3d3d |
int delay = GPOINTER_TO_INT (user_data);
|
|
|
ef3d3d |
GCancellable *cancellable;
|
|
|
ef3d3d |
char *username;
|
|
|
ef3d3d |
@@ -754,6 +755,7 @@ on_ready_to_request_timed_login (GdmSession *session,
|
|
|
ef3d3d |
static gboolean
|
|
|
ef3d3d |
on_wait_for_greeter_timeout (GSimpleAsyncResult *result)
|
|
|
ef3d3d |
{
|
|
|
ef3d3d |
+ g_debug ("GdmSimpleSlave: wait for greeter timeout");
|
|
|
ef3d3d |
g_simple_async_result_complete (result);
|
|
|
ef3d3d |
|
|
|
ef3d3d |
return FALSE;
|
|
|
ef3d3d |
--
|
|
|
ef3d3d |
1.8.3.1
|
|
|
ef3d3d |
|
|
|
ef3d3d |
|
|
|
ef3d3d |
From ad879ccbfb4bfc0908b0ca3d256c42d034ae16c7 Mon Sep 17 00:00:00 2001
|
|
|
ef3d3d |
From: Ray Strode <rstrode@redhat.com>
|
|
|
ef3d3d |
Date: Thu, 5 Jun 2014 17:01:48 -0400
|
|
|
ef3d3d |
Subject: [PATCH 3/4] manager: close up timed login race
|
|
|
ef3d3d |
|
|
|
ef3d3d |
Previously we would emit the timed-login-requested signal after the
|
|
|
ef3d3d |
client connects, which might be before it was listening for the
|
|
|
ef3d3d |
signal.
|
|
|
ef3d3d |
|
|
|
ef3d3d |
Now we only emit the signal in direct response to a GetTimedLoginDetails
|
|
|
ef3d3d |
call, which we make implicitly when the appropiate proxy interface is
|
|
|
ef3d3d |
set up.
|
|
|
ef3d3d |
|
|
|
ef3d3d |
https://bugzilla.gnome.org/show_bug.cgi?id=680348
|
|
|
ef3d3d |
---
|
|
|
ef3d3d |
daemon/gdm-session.c | 44 ++++++++++++++++++-----
|
|
|
ef3d3d |
daemon/gdm-session.h | 2 +-
|
|
|
ef3d3d |
daemon/gdm-session.xml | 5 +++
|
|
|
ef3d3d |
daemon/gdm-simple-slave.c | 92 +----------------------------------------------
|
|
|
ef3d3d |
gui/libgdm/gdm-client.c | 23 ++++++++++++
|
|
|
ef3d3d |
5 files changed, 65 insertions(+), 101 deletions(-)
|
|
|
ef3d3d |
|
|
|
ef3d3d |
diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c
|
|
|
ef3d3d |
index 6a7d570..e2e357f 100644
|
|
|
ef3d3d |
--- a/daemon/gdm-session.c
|
|
|
ef3d3d |
+++ b/daemon/gdm-session.c
|
|
|
ef3d3d |
@@ -89,6 +89,10 @@ struct _GdmSessionPrivate
|
|
|
ef3d3d |
char *selected_user;
|
|
|
ef3d3d |
char *user_x11_authority_file;
|
|
|
ef3d3d |
|
|
|
ef3d3d |
+ char *timed_login_username;
|
|
|
ef3d3d |
+ int timed_login_delay;
|
|
|
ef3d3d |
+ GList *pending_timed_login_invocations;
|
|
|
ef3d3d |
+
|
|
|
ef3d3d |
GHashTable *conversations;
|
|
|
ef3d3d |
|
|
|
ef3d3d |
GdmSessionConversation *session_conversation;
|
|
|
ef3d3d |
@@ -1319,6 +1323,27 @@ gdm_session_handle_client_start_session_when_ready (GdmDBusGreeter *greet
|
|
|
ef3d3d |
}
|
|
|
ef3d3d |
|
|
|
ef3d3d |
static gboolean
|
|
|
ef3d3d |
+gdm_session_handle_get_timed_login_details (GdmDBusGreeter *greeter_interface,
|
|
|
ef3d3d |
+ GDBusMethodInvocation *invocation,
|
|
|
ef3d3d |
+ GdmSession *self)
|
|
|
ef3d3d |
+{
|
|
|
ef3d3d |
+
|
|
|
ef3d3d |
+ if (self->priv->greeter_interface != NULL) {
|
|
|
ef3d3d |
+ gdm_dbus_greeter_complete_get_timed_login_details (greeter_interface,
|
|
|
ef3d3d |
+ invocation,
|
|
|
ef3d3d |
+ self->priv->timed_login_username != NULL,
|
|
|
ef3d3d |
+ self->priv->timed_login_username != NULL? self->priv->timed_login_username : "",
|
|
|
ef3d3d |
+ self->priv->timed_login_delay);
|
|
|
ef3d3d |
+ if (self->priv->timed_login_username != NULL) {
|
|
|
ef3d3d |
+ gdm_dbus_greeter_emit_timed_login_requested (self->priv->greeter_interface,
|
|
|
ef3d3d |
+ self->priv->timed_login_username,
|
|
|
ef3d3d |
+ self->priv->timed_login_delay);
|
|
|
ef3d3d |
+ }
|
|
|
ef3d3d |
+ }
|
|
|
ef3d3d |
+ return TRUE;
|
|
|
ef3d3d |
+}
|
|
|
ef3d3d |
+
|
|
|
ef3d3d |
+static gboolean
|
|
|
ef3d3d |
gdm_session_handle_client_begin_auto_login (GdmDBusGreeter *greeter_interface,
|
|
|
ef3d3d |
GDBusMethodInvocation *invocation,
|
|
|
ef3d3d |
const char *username,
|
|
|
ef3d3d |
@@ -1395,6 +1420,10 @@ export_greeter_interface (GdmSession *self,
|
|
|
ef3d3d |
"handle-start-session-when-ready",
|
|
|
ef3d3d |
G_CALLBACK (gdm_session_handle_client_start_session_when_ready),
|
|
|
ef3d3d |
self);
|
|
|
ef3d3d |
+ g_signal_connect (greeter_interface,
|
|
|
ef3d3d |
+ "handle-get-timed-login-details",
|
|
|
ef3d3d |
+ G_CALLBACK (gdm_session_handle_get_timed_login_details),
|
|
|
ef3d3d |
+ self);
|
|
|
ef3d3d |
|
|
|
ef3d3d |
g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (greeter_interface),
|
|
|
ef3d3d |
connection,
|
|
|
ef3d3d |
@@ -2600,16 +2629,13 @@ gdm_session_reset (GdmSession *self)
|
|
|
ef3d3d |
}
|
|
|
ef3d3d |
|
|
|
ef3d3d |
void
|
|
|
ef3d3d |
-gdm_session_request_timed_login (GdmSession *self,
|
|
|
ef3d3d |
- const char *username,
|
|
|
ef3d3d |
- int delay)
|
|
|
ef3d3d |
+gdm_session_set_timed_login_details (GdmSession *self,
|
|
|
ef3d3d |
+ const char *username,
|
|
|
ef3d3d |
+ int delay)
|
|
|
ef3d3d |
{
|
|
|
ef3d3d |
- g_debug ("GdmSession: requesting timed login");
|
|
|
ef3d3d |
- if (self->priv->greeter_interface != NULL) {
|
|
|
ef3d3d |
- gdm_dbus_greeter_emit_timed_login_requested (self->priv->greeter_interface,
|
|
|
ef3d3d |
- username,
|
|
|
ef3d3d |
- delay);
|
|
|
ef3d3d |
- }
|
|
|
ef3d3d |
+ g_debug ("GdmSession: timed login details %s %d", username, delay);
|
|
|
ef3d3d |
+ self->priv->timed_login_username = g_strdup (username);
|
|
|
ef3d3d |
+ self->priv->timed_login_delay = delay;
|
|
|
ef3d3d |
}
|
|
|
ef3d3d |
|
|
|
ef3d3d |
gboolean
|
|
|
ef3d3d |
diff --git a/daemon/gdm-session.h b/daemon/gdm-session.h
|
|
|
ef3d3d |
index 8b93e2c..14a1721 100644
|
|
|
ef3d3d |
--- a/daemon/gdm-session.h
|
|
|
ef3d3d |
+++ b/daemon/gdm-session.h
|
|
|
ef3d3d |
@@ -158,7 +158,7 @@ void gdm_session_select_user (GdmSession *session,
|
|
|
ef3d3d |
const char *username);
|
|
|
ef3d3d |
void gdm_session_cancel (GdmSession *session);
|
|
|
ef3d3d |
void gdm_session_reset (GdmSession *session);
|
|
|
ef3d3d |
-void gdm_session_request_timed_login (GdmSession *session,
|
|
|
ef3d3d |
+void gdm_session_set_timed_login_details (GdmSession *session,
|
|
|
ef3d3d |
const char *username,
|
|
|
ef3d3d |
int delay);
|
|
|
ef3d3d |
gboolean gdm_session_client_is_connected (GdmSession *session);
|
|
|
ef3d3d |
diff --git a/daemon/gdm-session.xml b/daemon/gdm-session.xml
|
|
|
ef3d3d |
index cf3103a..756346d 100644
|
|
|
ef3d3d |
--- a/daemon/gdm-session.xml
|
|
|
ef3d3d |
+++ b/daemon/gdm-session.xml
|
|
|
ef3d3d |
@@ -88,6 +88,11 @@
|
|
|
ef3d3d |
<method name="BeginAutoLogin">
|
|
|
ef3d3d |
<arg name="username" direction="in" type="s"/>
|
|
|
ef3d3d |
</method>
|
|
|
ef3d3d |
+ <method name="GetTimedLoginDetails">
|
|
|
ef3d3d |
+ <arg name="enabled" direction="out" type="b"/>
|
|
|
ef3d3d |
+ <arg name="username" direction="out" type="s"/>
|
|
|
ef3d3d |
+ <arg name="delay" direction="out" type="i"/>
|
|
|
ef3d3d |
+ </method>
|
|
|
ef3d3d |
<method name="StartSessionWhenReady">
|
|
|
ef3d3d |
<arg name="service_name" direction="in" type="s"/>
|
|
|
ef3d3d |
<arg name="should_start_session" direction="in" type="b"/>
|
|
|
ef3d3d |
diff --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c
|
|
|
ef3d3d |
index f08f7ad..e0e82c7 100644
|
|
|
ef3d3d |
--- a/daemon/gdm-simple-slave.c
|
|
|
ef3d3d |
+++ b/daemon/gdm-simple-slave.c
|
|
|
ef3d3d |
@@ -717,51 +717,6 @@ on_session_client_ready_for_session_to_start (GdmSession *session,
|
|
|
ef3d3d |
}
|
|
|
ef3d3d |
|
|
|
ef3d3d |
static void
|
|
|
ef3d3d |
-on_ready_to_request_timed_login (GdmSession *session,
|
|
|
ef3d3d |
- GSimpleAsyncResult *result,
|
|
|
ef3d3d |
- gpointer *user_data)
|
|
|
ef3d3d |
-{
|
|
|
ef3d3d |
- g_debug ("GdmSimpleSlave: ready to request timed login");
|
|
|
ef3d3d |
- int delay = GPOINTER_TO_INT (user_data);
|
|
|
ef3d3d |
- GCancellable *cancellable;
|
|
|
ef3d3d |
- char *username;
|
|
|
ef3d3d |
-
|
|
|
ef3d3d |
- cancellable = g_object_get_data (G_OBJECT (result),
|
|
|
ef3d3d |
- "cancellable");
|
|
|
ef3d3d |
- if (g_cancellable_is_cancelled (cancellable)) {
|
|
|
ef3d3d |
- return;
|
|
|
ef3d3d |
- }
|
|
|
ef3d3d |
-
|
|
|
ef3d3d |
- username = g_simple_async_result_get_source_tag (result);
|
|
|
ef3d3d |
-
|
|
|
ef3d3d |
- gdm_session_request_timed_login (session, username, delay);
|
|
|
ef3d3d |
-
|
|
|
ef3d3d |
- g_object_weak_unref (G_OBJECT (session),
|
|
|
ef3d3d |
- (GWeakNotify)
|
|
|
ef3d3d |
- g_cancellable_cancel,
|
|
|
ef3d3d |
- cancellable);
|
|
|
ef3d3d |
- g_object_weak_unref (G_OBJECT (session),
|
|
|
ef3d3d |
- (GWeakNotify)
|
|
|
ef3d3d |
- g_object_unref,
|
|
|
ef3d3d |
- cancellable);
|
|
|
ef3d3d |
- g_object_weak_unref (G_OBJECT (session),
|
|
|
ef3d3d |
- (GWeakNotify)
|
|
|
ef3d3d |
- g_free,
|
|
|
ef3d3d |
- username);
|
|
|
ef3d3d |
-
|
|
|
ef3d3d |
- g_free (username);
|
|
|
ef3d3d |
-}
|
|
|
ef3d3d |
-
|
|
|
ef3d3d |
-static gboolean
|
|
|
ef3d3d |
-on_wait_for_greeter_timeout (GSimpleAsyncResult *result)
|
|
|
ef3d3d |
-{
|
|
|
ef3d3d |
- g_debug ("GdmSimpleSlave: wait for greeter timeout");
|
|
|
ef3d3d |
- g_simple_async_result_complete (result);
|
|
|
ef3d3d |
-
|
|
|
ef3d3d |
- return FALSE;
|
|
|
ef3d3d |
-}
|
|
|
ef3d3d |
-
|
|
|
ef3d3d |
-static void
|
|
|
ef3d3d |
on_session_client_connected (GdmSession *session,
|
|
|
ef3d3d |
GCredentials *credentials,
|
|
|
ef3d3d |
GPid pid_of_client,
|
|
|
ef3d3d |
@@ -790,53 +745,8 @@ on_session_client_connected (GdmSession *session,
|
|
|
ef3d3d |
return;
|
|
|
ef3d3d |
}
|
|
|
ef3d3d |
|
|
|
ef3d3d |
- /* temporary hack to fix timed login
|
|
|
ef3d3d |
- * http://bugzilla.gnome.org/680348
|
|
|
ef3d3d |
- */
|
|
|
ef3d3d |
if (delay > 0) {
|
|
|
ef3d3d |
- GSimpleAsyncResult *result;
|
|
|
ef3d3d |
- GCancellable *cancellable;
|
|
|
ef3d3d |
- guint timeout_id;
|
|
|
ef3d3d |
- gpointer source_tag;
|
|
|
ef3d3d |
-
|
|
|
ef3d3d |
- delay = MAX (delay, 4);
|
|
|
ef3d3d |
-
|
|
|
ef3d3d |
- cancellable = g_cancellable_new ();
|
|
|
ef3d3d |
- source_tag = g_strdup (username);
|
|
|
ef3d3d |
- result = g_simple_async_result_new (G_OBJECT (session),
|
|
|
ef3d3d |
- (GAsyncReadyCallback)
|
|
|
ef3d3d |
- on_ready_to_request_timed_login,
|
|
|
ef3d3d |
- GINT_TO_POINTER (delay),
|
|
|
ef3d3d |
- source_tag);
|
|
|
ef3d3d |
- g_simple_async_result_set_check_cancellable (result, cancellable);
|
|
|
ef3d3d |
- g_object_set_data (G_OBJECT (result),
|
|
|
ef3d3d |
- "cancellable",
|
|
|
ef3d3d |
- cancellable);
|
|
|
ef3d3d |
-
|
|
|
ef3d3d |
- timeout_id = g_timeout_add_seconds_full (delay - 2,
|
|
|
ef3d3d |
- G_PRIORITY_DEFAULT,
|
|
|
ef3d3d |
- (GSourceFunc)
|
|
|
ef3d3d |
- on_wait_for_greeter_timeout,
|
|
|
ef3d3d |
- g_object_ref (result),
|
|
|
ef3d3d |
- (GDestroyNotify)
|
|
|
ef3d3d |
- g_object_unref);
|
|
|
ef3d3d |
- g_cancellable_connect (cancellable,
|
|
|
ef3d3d |
- G_CALLBACK (g_source_remove),
|
|
|
ef3d3d |
- GINT_TO_POINTER (timeout_id),
|
|
|
ef3d3d |
- NULL);
|
|
|
ef3d3d |
-
|
|
|
ef3d3d |
- g_object_weak_ref (G_OBJECT (session),
|
|
|
ef3d3d |
- (GWeakNotify)
|
|
|
ef3d3d |
- g_cancellable_cancel,
|
|
|
ef3d3d |
- cancellable);
|
|
|
ef3d3d |
- g_object_weak_ref (G_OBJECT (session),
|
|
|
ef3d3d |
- (GWeakNotify)
|
|
|
ef3d3d |
- g_object_unref,
|
|
|
ef3d3d |
- cancellable);
|
|
|
ef3d3d |
- g_object_weak_ref (G_OBJECT (session),
|
|
|
ef3d3d |
- (GWeakNotify)
|
|
|
ef3d3d |
- g_free,
|
|
|
ef3d3d |
- source_tag);
|
|
|
ef3d3d |
+ gdm_session_set_timed_login_details (session, username, delay);
|
|
|
ef3d3d |
}
|
|
|
ef3d3d |
|
|
|
ef3d3d |
g_free (username);
|
|
|
ef3d3d |
diff --git a/gui/libgdm/gdm-client.c b/gui/libgdm/gdm-client.c
|
|
|
ef3d3d |
index 4542c3e..e1188e5 100644
|
|
|
ef3d3d |
--- a/gui/libgdm/gdm-client.c
|
|
|
ef3d3d |
+++ b/gui/libgdm/gdm-client.c
|
|
|
ef3d3d |
@@ -794,6 +794,26 @@ gdm_client_get_user_verifier_finish (GdmClient *client,
|
|
|
ef3d3d |
}
|
|
|
ef3d3d |
|
|
|
ef3d3d |
static void
|
|
|
ef3d3d |
+on_timed_login_details_got (GdmGreeter *greeter,
|
|
|
ef3d3d |
+ GAsyncResult *result)
|
|
|
ef3d3d |
+{
|
|
|
ef3d3d |
+ gdm_greeter_call_get_timed_login_details_finish (greeter, NULL, NULL, NULL, result, NULL);
|
|
|
ef3d3d |
+}
|
|
|
ef3d3d |
+
|
|
|
ef3d3d |
+static void
|
|
|
ef3d3d |
+query_for_timed_login_requested_signal (GdmGreeter *greeter)
|
|
|
ef3d3d |
+{
|
|
|
ef3d3d |
+ /* This just makes sure a timed-login-requested signal gets fired
|
|
|
ef3d3d |
+ * off if appropriate.
|
|
|
ef3d3d |
+ */
|
|
|
ef3d3d |
+ gdm_greeter_call_get_timed_login_details (greeter,
|
|
|
ef3d3d |
+ NULL,
|
|
|
ef3d3d |
+ (GAsyncReadyCallback)
|
|
|
ef3d3d |
+ on_timed_login_details_got,
|
|
|
ef3d3d |
+ NULL);
|
|
|
ef3d3d |
+}
|
|
|
ef3d3d |
+
|
|
|
ef3d3d |
+static void
|
|
|
ef3d3d |
on_greeter_proxy_created (GObject *source,
|
|
|
ef3d3d |
GAsyncResult *result,
|
|
|
ef3d3d |
GSimpleAsyncResult *operation_result)
|
|
|
ef3d3d |
@@ -813,6 +833,8 @@ on_greeter_proxy_created (GObject *source,
|
|
|
ef3d3d |
(GDestroyNotify)
|
|
|
ef3d3d |
g_object_unref);
|
|
|
ef3d3d |
g_simple_async_result_complete_in_idle (operation_result);
|
|
|
ef3d3d |
+
|
|
|
ef3d3d |
+ query_for_timed_login_requested_signal (greeter);
|
|
|
ef3d3d |
}
|
|
|
ef3d3d |
|
|
|
ef3d3d |
static void
|
|
|
ef3d3d |
@@ -980,6 +1002,7 @@ gdm_client_get_greeter_sync (GdmClient *client,
|
|
|
ef3d3d |
(GWeakNotify)
|
|
|
ef3d3d |
g_clear_object,
|
|
|
ef3d3d |
&client->priv->connection);
|
|
|
ef3d3d |
+ query_for_timed_login_requested_signal (client->priv->greeter);
|
|
|
ef3d3d |
}
|
|
|
ef3d3d |
|
|
|
ef3d3d |
return client->priv->greeter;
|
|
|
ef3d3d |
--
|
|
|
ef3d3d |
1.8.3.1
|
|
|
ef3d3d |
|
|
|
ef3d3d |
|
|
|
ef3d3d |
From 35d66c9d4cf54d3e480c399b045468547a0818a8 Mon Sep 17 00:00:00 2001
|
|
|
ef3d3d |
From: Philippe Troin <phil@fifi.org>
|
|
|
ef3d3d |
Date: Tue, 2 Sep 2014 15:28:17 -0400
|
|
|
ef3d3d |
Subject: [PATCH 4/4] daemon: allow multiple time logins to work
|
|
|
ef3d3d |
|
|
|
ef3d3d |
GDM currently lumps timed login with autologin when deciding whether or
|
|
|
ef3d3d |
not to skip it, if it's already happened once this boot.
|
|
|
ef3d3d |
|
|
|
ef3d3d |
That's the wrong behavior, and indeed will create a confused experience,
|
|
|
ef3d3d |
because it's not what the login screen provided by gnome-shell
|
|
|
ef3d3d |
expects.
|
|
|
ef3d3d |
|
|
|
ef3d3d |
This commit allows timed login to work after the user logs out.
|
|
|
ef3d3d |
|
|
|
ef3d3d |
https://bugzilla.gnome.org/show_bug.cgi?id=732774
|
|
|
ef3d3d |
---
|
|
|
ef3d3d |
daemon/gdm-simple-slave.c | 7 ++++---
|
|
|
ef3d3d |
1 file changed, 4 insertions(+), 3 deletions(-)
|
|
|
ef3d3d |
|
|
|
ef3d3d |
diff --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c
|
|
|
ef3d3d |
index e0e82c7..5057eb4 100644
|
|
|
ef3d3d |
--- a/daemon/gdm-simple-slave.c
|
|
|
ef3d3d |
+++ b/daemon/gdm-simple-slave.c
|
|
|
ef3d3d |
@@ -650,13 +650,14 @@ static void
|
|
|
ef3d3d |
start_autologin_conversation_if_necessary (GdmSimpleSlave *slave)
|
|
|
ef3d3d |
{
|
|
|
ef3d3d |
gboolean enabled;
|
|
|
ef3d3d |
+ int delay = 0;
|
|
|
ef3d3d |
|
|
|
ef3d3d |
- if (g_file_test (GDM_RAN_ONCE_MARKER_FILE, G_FILE_TEST_EXISTS)) {
|
|
|
ef3d3d |
+ gdm_slave_get_timed_login_details (GDM_SLAVE (slave), &enabled, NULL, &delay);
|
|
|
ef3d3d |
+
|
|
|
ef3d3d |
+ if (delay == 0 && g_file_test (GDM_RAN_ONCE_MARKER_FILE, G_FILE_TEST_EXISTS)) {
|
|
|
ef3d3d |
return;
|
|
|
ef3d3d |
}
|
|
|
ef3d3d |
|
|
|
ef3d3d |
- gdm_slave_get_timed_login_details (GDM_SLAVE (slave), &enabled, NULL, NULL);
|
|
|
ef3d3d |
-
|
|
|
ef3d3d |
if (!enabled) {
|
|
|
ef3d3d |
return;
|
|
|
ef3d3d |
}
|
|
|
ef3d3d |
--
|
|
|
ef3d3d |
1.8.3.1
|
|
|
ef3d3d |
|