[gdm] manager: split get_timed_login_details_for_display into two functions



commit d1e1959bfa7758a119d4caeb354951687f9cf433
Author: Ray Strode <rstrode redhat com>
Date:   Tue Mar 17 09:22:17 2015 -0400

    manager: split get_timed_login_details_for_display into two functions
    
    The function is only ever called in two distinct ways:
    
    1) to check about timed login
    2) to check about automatic login.
    
    Since it's used in completely distinct ways and has somewhat distinct
    implementations for each, split it up into two functions for clarity.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=746492

 daemon/gdm-manager.c |  142 ++++++++++++++++++++++++++++++-------------------
 1 files changed, 87 insertions(+), 55 deletions(-)
---
diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c
index 367cdcf..204e40d 100644
--- a/daemon/gdm-manager.c
+++ b/daemon/gdm-manager.c
@@ -1445,17 +1445,37 @@ manager_interface_init (GdmDBusManagerIface *interface)
         interface->handle_open_reauthentication_channel = gdm_manager_handle_open_reauthentication_channel;
 }
 
-static void
+static gboolean
+display_is_on_seat0 (GdmDisplay *display)
+{
+        gboolean is_on_seat0 = TRUE;
+
+#ifdef WITH_SYSTEMD
+        if (LOGIND_RUNNING()) {
+                char *seat_id = NULL;
+
+                g_object_get (G_OBJECT (display), "seat-id", &seat_id, NULL);
+
+                if (g_strcmp0 (seat_id, "seat0") != 0) {
+                        is_on_seat0 = FALSE;
+                }
+
+                g_free (seat_id);
+        }
+#endif
+        return is_on_seat0;
+}
+
+static gboolean
 get_timed_login_details_for_display (GdmManager *manager,
                                      GdmDisplay *display,
-                                     gboolean   *enabledp,
                                      char      **usernamep,
                                      int        *delayp)
 {
         gboolean res;
         gboolean enabled;
         gboolean allow_timed_login = FALSE;
-        char    *seat_id;
+
         int      delay;
         char    *username = NULL;
 
@@ -1469,32 +1489,10 @@ get_timed_login_details_for_display (GdmManager *manager,
                 goto out;
         }
 
-        g_object_get (G_OBJECT (display), "seat-id", &seat_id, NULL);
-
-#ifdef WITH_SYSTEMD
-        /* FIXME: More careful thought needs to happen before we
-         * can support auto/timed login on auxilliary seats
-         */
-        if (LOGIND_RUNNING()) {
-                if (g_strcmp0 (seat_id, "seat0") != 0) {
-                        goto out;
-                }
-        }
-#endif
-
-        res = gdm_settings_direct_get_boolean (GDM_KEY_AUTO_LOGIN_ENABLE, &enabled);
-        if (res && enabled) {
-            res = gdm_settings_direct_get_string (GDM_KEY_AUTO_LOGIN_USER, &username);
-        }
-
-        if (enabled && res && username != NULL && username[0] != '\0') {
+        if (display_is_on_seat0 (display)) {
                 goto out;
         }
 
-        g_free (username);
-        username = NULL;
-        enabled = FALSE;
-
         res = gdm_settings_direct_get_boolean (GDM_KEY_TIMED_LOGIN_ENABLE, &enabled);
         if (res && ! enabled) {
                 goto out;
@@ -1502,9 +1500,7 @@ get_timed_login_details_for_display (GdmManager *manager,
 
         res = gdm_settings_direct_get_string (GDM_KEY_TIMED_LOGIN_USER, &username);
         if (res && (username == NULL || username[0] == '\0')) {
-                enabled = FALSE;
-                g_free (username);
-                username = NULL;
+                g_clear_pointer (&username, g_free);
                 goto out;
         }
 
@@ -1518,21 +1514,14 @@ get_timed_login_details_for_display (GdmManager *manager,
 
  out:
         if (enabled) {
-                g_debug ("GdmDisplay: Got timed login details for display (seat %s): %d %s %d",
-                         seat_id,
+                g_debug ("GdmDisplay: Got timed login details for display: %d %s %d",
                          enabled,
                          username,
                          delay);
         } else {
-                g_debug ("GdmDisplay: Got timed login details for display (seat %s): 0",
-                         seat_id);
+                g_debug ("GdmDisplay: Got timed login details for display: 0");
         }
 
-        g_free (seat_id);
-
-        if (enabledp != NULL) {
-                *enabledp = enabled;
-        }
         if (usernamep != NULL) {
                 *usernamep = username;
         } else {
@@ -1541,6 +1530,55 @@ get_timed_login_details_for_display (GdmManager *manager,
         if (delayp != NULL) {
                 *delayp = delay;
         }
+
+        return enabled;
+}
+
+static gboolean
+get_automatic_login_details_for_display (GdmManager *manager,
+                                         GdmDisplay *display,
+                                         char      **usernamep)
+{
+        gboolean res;
+        gboolean enabled;
+        char    *username = NULL;
+
+        enabled = FALSE;
+        username = NULL;
+
+        if (!display_is_on_seat0 (display)) {
+                goto out;
+        }
+
+        res = gdm_settings_direct_get_boolean (GDM_KEY_AUTO_LOGIN_ENABLE, &enabled);
+        if (res && enabled) {
+            res = gdm_settings_direct_get_string (GDM_KEY_AUTO_LOGIN_USER, &username);
+        }
+
+        if (enabled && res && username != NULL && username[0] != '\0') {
+                goto out;
+        }
+
+        g_free (username);
+        username = NULL;
+        enabled = FALSE;
+
+ out:
+        if (enabled) {
+                g_debug ("GdmDisplay: Got automatic login details for display: %d %s",
+                         enabled,
+                         username);
+        } else {
+                g_debug ("GdmDisplay: Got automatic login details for display: 0");
+        }
+
+        if (usernamep != NULL) {
+                *usernamep = username;
+        } else {
+                g_free (username);
+        }
+
+        return enabled;
 }
 
 static gboolean
@@ -1548,14 +1586,14 @@ display_should_autologin (GdmManager *manager,
                           GdmDisplay *display)
 {
         gboolean enabled = FALSE;
-        int delay = 0;
 
         if (manager->priv->ran_once) {
                 return FALSE;
         }
 
-        get_timed_login_details_for_display (manager, display, &enabled, NULL, &delay);
-        return enabled && delay == 0;
+        enabled = get_automatic_login_details_for_display (manager, display, NULL);
+
+        return enabled;
 }
 
 static void
@@ -2129,16 +2167,13 @@ on_session_client_connected (GdmSession      *session,
                 return;
         }
 
-        enabled = FALSE;
-        get_timed_login_details_for_display (manager, display, &enabled, &username, &delay);
+        enabled = get_timed_login_details_for_display (manager, display, &username, &delay);
 
         if (! enabled) {
                 return;
         }
 
-        if (delay > 0) {
-                gdm_session_set_timed_login_details (session, username, delay);
-        }
+        gdm_session_set_timed_login_details (session, username, delay);
 
         g_free (username);
 
@@ -2234,7 +2269,6 @@ on_session_conversation_started (GdmSession *session,
         GdmDisplay *display;
         gboolean    enabled;
         char       *username;
-        int         delay;
 
         g_debug ("GdmManager: session conversation started for service %s", service_name);
 
@@ -2249,19 +2283,17 @@ on_session_conversation_started (GdmSession *session,
                 return;
         }
 
-        enabled = FALSE;
-        get_timed_login_details_for_display (manager, display, &enabled, &username, &delay);
+        enabled = get_automatic_login_details_for_display (manager, display, &username);
 
         if (! enabled) {
                 return;
         }
 
-        if (delay == 0) {
-                g_debug ("GdmManager: begin auto login for user '%s'", username);
-                /* service_name will be "gdm-autologin"
-                 */
-                gdm_session_setup_for_user (session, service_name, username);
-        }
+        g_debug ("GdmManager: begin auto login for user '%s'", username);
+
+        /* service_name will be "gdm-autologin"
+         */
+        gdm_session_setup_for_user (session, service_name, username);
 
         g_free (username);
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]