]> rtime.felk.cvut.cz Git - sojka/lightdm.git/commitdiff
Fix up user switch tests
authorRobert Ancell <robert.ancell@canonical.com>
Wed, 17 Jul 2013 04:12:13 +0000 (16:12 +1200)
committerRobert Ancell <robert.ancell@canonical.com>
Wed, 17 Jul 2013 04:12:13 +0000 (16:12 +1200)
src/seat.c
tests/scripts/autologin-guest-fail-setup-script.conf
tests/scripts/autologin-new-authtok.conf
tests/scripts/autologin-password.conf
tests/scripts/crash-authenticate.conf
tests/scripts/denied.conf
tests/scripts/expired.conf

index e8405b84a47f186a6a47047235d0a78d1ff7ba5c..0864f4aa219b43b119abbbd8adadb0a0678d096b 100644 (file)
@@ -393,6 +393,10 @@ session_authentication_complete_cb (Session *session, Seat *seat)
         // FIXME: Only if can share servers
 
         greeter_session = create_greeter_session (seat);
+        if (session_get_is_guest (session))
+            greeter_set_hint (greeter_session, "select-guest", "true");
+        else
+            greeter_set_hint (greeter_session, "select-user", session_get_username (session));
         session_set_display_server (SESSION (greeter_session), session_get_display_server (session));
 
         session_start (SESSION (greeter_session));
@@ -601,17 +605,17 @@ get_session_argv (const gchar *sessions_dir, const gchar *session_name, const gc
 }
 
 static Session *
-create_autologin_session (Seat *seat, const gchar *autologin_username)
+create_user_session (Seat *seat, const gchar *username)
 {
     User *user;
     gchar *sessions_dir, **argv;
     const gchar *session_name;
     Session *session;
   
-    user = accounts_get_user_by_name (autologin_username);
+    user = accounts_get_user_by_name (username);
     if (!user)
     {
-        g_debug ("Can't autologin unknown user '%s'", autologin_username);
+        g_debug ("Can't login unknown user '%s'", username);
         return NULL;
     }
 
@@ -632,7 +636,7 @@ create_autologin_session (Seat *seat, const gchar *autologin_username)
 
     session = create_session (seat, TRUE);
     session_set_pam_service (session, AUTOLOGIN_SERVICE);
-    session_set_username (session, autologin_username);
+    session_set_username (session, username);
     session_set_do_authenticate (session, TRUE);
     session_set_argv (session, argv);
 
@@ -640,7 +644,7 @@ create_autologin_session (Seat *seat, const gchar *autologin_username)
 }
 
 static Session *
-create_autologin_guest_session (Seat *seat)
+create_guest_session (Seat *seat)
 {
     gchar *sessions_dir, **argv;
     Session *session;
@@ -657,7 +661,6 @@ create_autologin_guest_session (Seat *seat)
     }
 
     session = create_session (seat, TRUE);
-    session_set_pam_service (session, AUTOLOGIN_SERVICE);
     session_set_do_authenticate (session, TRUE);
     session_set_is_guest (session, TRUE);
     session_set_argv (session, argv);
@@ -702,7 +705,10 @@ greeter_start_session_cb (Greeter *greeter, SessionType type, const gchar *sessi
 
     /* Get the session to use */
     if (greeter_get_guest_authenticated (greeter))
-        session = create_autologin_guest_session (seat);
+    {
+        session = create_guest_session (seat);
+        session_set_pam_service (session, AUTOLOGIN_SERVICE);
+    }
     else
         session = greeter_get_authentication_session (greeter);
 
@@ -868,6 +874,21 @@ create_display_server (Seat *seat)
     return display_server;
 }
 
+static Greeter *
+find_greeter_session (Seat *seat)
+{
+    GList *link;
+
+    for (link = seat->priv->sessions; link; link = link->next)
+    {
+        Session *session = link->data;
+        if (IS_GREETER (session))
+            return GREETER (session);
+    }
+
+    return NULL;
+}
+
 gboolean
 seat_switch_to_greeter (Seat *seat)
 {
@@ -880,22 +901,45 @@ seat_switch_to_greeter (Seat *seat)
         return FALSE;
 
     /* Switch to greeter if one open (shouldn't be though) */
-    if (switch_to_user (seat, NULL, FALSE))
+    greeter_session = find_greeter_session (seat);
+    if (greeter_session)
+    {
+        seat_set_active_session (seat, SESSION (greeter_session));
         return TRUE;
+    }
+
+    greeter_session = create_greeter_session (seat);
 
     display_server = create_display_server (seat);
+    session_set_display_server (SESSION (greeter_session), display_server);
     if (!display_server_start (display_server))
         return FALSE;
 
-    greeter_session = create_greeter_session (seat);
-    session_set_display_server (SESSION (greeter_session), display_server);
-
     return TRUE;
 }
 
+static Session *
+find_user_session (Seat *seat, const gchar *username)
+{
+    GList *link;
+
+    for (link = seat->priv->sessions; link; link = link->next)
+    {
+        Session *session = link->data;
+
+        if (strcmp (session_get_username (session), username) == 0)
+            return session;
+    }
+
+    return NULL;
+}
+
 gboolean
 seat_switch_to_user (Seat *seat, const gchar *username, const gchar *session_name)
 {
+    Session *session;
+    DisplayServer *display_server;
+
     g_return_val_if_fail (seat != NULL, FALSE);
     g_return_val_if_fail (username != NULL, FALSE);
 
@@ -904,11 +948,21 @@ seat_switch_to_user (Seat *seat, const gchar *username, const gchar *session_nam
 
     g_debug ("Switching to user %s", username);
 
-    /* Switch to session if one open */
-    if (switch_to_user (seat, username, FALSE))
+    session = find_user_session (seat, username);
+    if (session)
+    {
+        g_debug ("Switching to existing user session %s", username);
+        seat_set_active_session (seat, session);
         return TRUE;
+    }
 
-    // FIXME
+    session = create_user_session (seat, username);
+    session_set_pam_service (session, USER_SERVICE);
+
+    display_server = create_display_server (seat);
+    session_set_display_server (session, display_server);
+    if (!display_server_start (display_server))
+        return FALSE;
 
     return FALSE;
 }
@@ -954,7 +1008,8 @@ seat_switch_to_guest (Seat *seat, const gchar *session_name)
     if (!display_server_start (display_server))
         return FALSE;
 
-    session = create_autologin_guest_session (seat);
+    session = create_guest_session (seat);
+    session_set_pam_service (session, AUTOLOGIN_SERVICE);
     session_set_display_server (session, display_server);
 
     return TRUE;
@@ -1044,9 +1099,15 @@ seat_real_start (Seat *seat)
 
     /* Autologin if configured */
     if (autologin_timeout == 0 && autologin_guest)
-        session = create_autologin_guest_session (seat);
+    {
+        session = create_guest_session (seat);
+        session_set_pam_service (session, AUTOLOGIN_SERVICE);
+    }
     else if (autologin_timeout == 0 && autologin_username != NULL)
-        session = create_autologin_session (seat, autologin_username);
+    {
+        session = create_user_session (seat, autologin_username);
+        session_set_pam_service (session, AUTOLOGIN_SERVICE);
+    }
 
     /* Fallback to a greeter */
     if (!session)
index c9573c9bc28f65601a9869749c59b952470d592d..3bab095159ab0676ab70113ed3d424cf87125ee5 100644 (file)
@@ -25,6 +25,7 @@ autologin-guest=true
 #?GREETER-X-0 CONNECT-XSERVER
 #?GREETER-X-0 CONNECT-TO-DAEMON
 #?GREETER-X-0 CONNECTED-TO-DAEMON
+#?GREETER-X-0 SELECT-GUEST-HINT
 
 # Cleanup
 #?*STOP-DAEMON
index 1f66bfc80039589c868c869b2186e1689736f333..ca715f040202774a1cb61003fafece7bf670495c 100644 (file)
@@ -22,6 +22,7 @@ autologin-user=new-authtok
 #?GREETER-X-0 CONNECT-XSERVER
 #?GREETER-X-0 CONNECT-TO-DAEMON
 #?GREETER-X-0 CONNECTED-TO-DAEMON
+#?GREETER-X-0 SELECT-USER-HINT USERNAME=new-authtok
 
 # Cleanup
 #?*STOP-DAEMON
index e742456f0bf764d1d9ce575180984b34f97941c5..7fdc49c58082c6c12e436a3266f49e95a939977b 100644 (file)
@@ -22,6 +22,7 @@ autologin-user=always-password
 #?GREETER-X-0 CONNECT-XSERVER
 #?GREETER-X-0 CONNECT-TO-DAEMON
 #?GREETER-X-0 CONNECTED-TO-DAEMON
+#?GREETER-X-0 SELECT-USER-HINT USERNAME=always-password
 
 # Cleanup
 #?*STOP-DAEMON
index 5d9143d737abdfb8ffb6bc30880a375d08432ec5..c079b32d983755695ead0c1507bd14263e9a1da1 100644 (file)
@@ -22,6 +22,7 @@ autologin-user=crash-authenticate
 #?GREETER-X-0 CONNECT-XSERVER
 #?GREETER-X-0 CONNECT-TO-DAEMON
 #?GREETER-X-0 CONNECTED-TO-DAEMON
+#?GREETER-X-0 SELECT-USER-HINT USERNAME=crash-authenticate
 
 # Cleanup
 #?*STOP-DAEMON
index 0ead01e07c337a64eed42351b378b6731e3f4b7c..0178cdca6a2cfb4cf59acf7d620ba8e574e51431 100644 (file)
@@ -22,6 +22,7 @@ autologin-user=denied
 #?GREETER-X-0 CONNECT-XSERVER
 #?GREETER-X-0 CONNECT-TO-DAEMON
 #?GREETER-X-0 CONNECTED-TO-DAEMON
+#?GREETER-X-0 SELECT-USER-HINT USERNAME=denied    
 
 # Cleanup
 #?*STOP-DAEMON
index 11eed1d3ad6f34040c80c3d2efada0701d953bbe..1c9a7a770177fb7fd8cf0ab74db6caec02c79070 100644 (file)
@@ -22,6 +22,7 @@ autologin-user=expired
 #?GREETER-X-0 CONNECT-XSERVER
 #?GREETER-X-0 CONNECT-TO-DAEMON
 #?GREETER-X-0 CONNECTED-TO-DAEMON
+#?GREETER-X-0 SELECT-USER-HINT USERNAME=expired
 
 # Cleanup
 #?*STOP-DAEMON