]> rtime.felk.cvut.cz Git - sojka/lightdm.git/commitdiff
When unlocking an existing session cleanly exit the child and refresh the PAM credentials
authorRobert Ancell <robert.ancell@canonical.com>
Sun, 23 Mar 2014 22:41:16 +0000 (11:41 +1300)
committerRobert Ancell <robert.ancell@canonical.com>
Sun, 23 Mar 2014 22:41:16 +0000 (11:41 +1300)
src/session-child.c
src/session.c
tests/Makefile.am
tests/scripts/login-pam.conf
tests/scripts/switch-to-greeter-return-session-pam.conf [new file with mode: 0644]
tests/test-switch-to-greeter-return-session-pam [new file with mode: 0755]

index a4c161d8333308003aec7d3c9f3855daa6f6aa6e..6945a94009269a0bcac3b04559336693ce6f3db2 100644 (file)
@@ -477,6 +477,13 @@ session_child_run (int argc, char **argv)
         command_argv[i] = read_string ();
     command_argv[i] = NULL;
 
+    /* If nothing to run just refresh credentials because we successfully authenticated */
+    if (command_argc == 0)
+    {
+        pam_setcred (pam_handle, PAM_REFRESH_CRED);
+        return EXIT_SUCCESS;
+    }
+
     /* Redirect stderr to a log file */
     if (log_filename)
     {
index 1ec2c3e55b8b3c934fbb19b5ab78f63b95b8555f..c0cbc1408d271394d8e92c2f80f7e554addba503 100644 (file)
@@ -846,6 +846,22 @@ session_stop (Session *session)
 {
     g_return_if_fail (session != NULL);
 
+    /* If can cleanly stop then do that */
+    if (session_get_is_authenticated (session) && !session->priv->command_run)
+    {
+        gsize n = 0;
+
+        session->priv->command_run = TRUE;
+        write_string (session, NULL); // log filename
+        write_string (session, NULL); // tty
+        write_string (session, NULL); // xauth filename
+        write_string (session, NULL); // xdisplay
+        write_xauth (session, NULL); // xauth
+        write_data (session, &n, sizeof (n)); // environment
+        write_data (session, &n, sizeof (n)); // command
+        return;
+    }
+
     if (session->priv->stopping)
         return;
     session->priv->stopping = TRUE;
index 37f0d020a6610755ed59e0caa0cee463841c685f..e4e376bb46d085c2b052af98333c3ec049bef40f 100644 (file)
@@ -134,6 +134,7 @@ TESTS = \
        test-switch-to-greeter \
        test-switch-to-greeter-new-session \
        test-switch-to-greeter-return-session \
+       test-switch-to-greeter-return-session-pam \
        test-switch-to-greeter-return-session-logout \
        test-switch-to-guest \
        test-switch-to-user \
@@ -455,6 +456,7 @@ EXTRA_DIST = \
        scripts/switch-to-greeter-new-session.conf \
        scripts/switch-to-greeter-return-session.conf \
        scripts/switch-to-greeter-return-session-logout.conf \
+       scripts/switch-to-greeter-return-session-pam.conf \
        scripts/switch-to-guest.conf \
        scripts/switch-to-user.conf \
        scripts/switch-to-users.conf \
index aea173c4c91abdc324aea52d4af23136ff9b7858..5411ceed5f9d2d95cb18a44d7e25e9abb921f97f 100644 (file)
@@ -19,7 +19,7 @@ log-events=true
 #?XSERVER-0 INDICATE-READY
 #?XSERVER-0 ACCEPT-CONNECT
 
-# Creat PAM session for greeter
+# Create PAM session for greeter
 #?PAM-lightdm START SERVICE=lightdm-greeter USER=lightdm
 #?PAM-lightdm SETCRED ESTABLISH_CRED
 #?PAM-lightdm OPEN-SESSION
@@ -38,11 +38,11 @@ log-events=true
 #?PAM-have-password1 AUTHENTICATE
 #?GREETER-X-0 SHOW-PROMPT TEXT="Password:"
 #?*GREETER-X-0 RESPOND TEXT="password"
+#?PAM-have-password1 ACCT-MGMT
 #?GREETER-X-0 AUTHENTICATION-COMPLETE USERNAME=have-password1 AUTHENTICATED=TRUE
 
 # User session starts
 #?*GREETER-X-0 START-SESSION
-#?PAM-have-password1 ACCT-MGMT
 #?PAM-have-password1 SETCRED ESTABLISH_CRED
 #?PAM-have-password1 OPEN-SESSION
 
diff --git a/tests/scripts/switch-to-greeter-return-session-pam.conf b/tests/scripts/switch-to-greeter-return-session-pam.conf
new file mode 100644 (file)
index 0000000..609289d
--- /dev/null
@@ -0,0 +1,101 @@
+#
+# Check we correctly use PAM for returning to an existing session
+#
+
+[SeatDefaults]
+autologin-user=have-password1
+user-session=default
+
+[test-pam]
+log-events=true
+
+#?*START-DAEMON
+#?RUNNER DAEMON-START
+
+# X server starts
+#?XSERVER-0 START VT=7 SEAT=seat0
+
+# Daemon connects when X server is ready
+#?*XSERVER-0 INDICATE-READY
+#?XSERVER-0 INDICATE-READY
+#?XSERVER-0 ACCEPT-CONNECT
+
+# Session authenticates
+#?PAM-have-password1 START SERVICE=lightdm-autologin USER=have-password1
+#?PAM-have-password1 AUTHENTICATE
+#?PAM-have-password1 ACCT-MGMT
+#?PAM-have-password1 SETCRED ESTABLISH_CRED
+#?PAM-have-password1 OPEN-SESSION
+
+# Session starts
+#?SESSION-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_GREETER_DATA_DIR=.*/have-password1 DESKTOP_SESSION=default USER=have-password1
+#?LOGIN1 ACTIVATE-SESSION SESSION=c0
+#?XSERVER-0 ACCEPT-CONNECT
+#?SESSION-X-0 CONNECT-XSERVER
+
+# Show the greeter
+#?*SWITCH-TO-GREETER
+#?RUNNER SWITCH-TO-GREETER
+
+# New X server starts
+#?XSERVER-1 START VT=8 SEAT=seat0
+
+# Daemon connects when X server is ready
+#?*XSERVER-1 INDICATE-READY
+#?XSERVER-1 INDICATE-READY
+#?XSERVER-1 ACCEPT-CONNECT
+
+# Session is locked
+#?LOGIN1 LOCK-SESSION
+
+# Create PAM session for greeter
+#?PAM-lightdm START SERVICE=lightdm-greeter USER=lightdm
+#?PAM-lightdm SETCRED ESTABLISH_CRED
+#?PAM-lightdm OPEN-SESSION
+
+# Greeter starts
+#?GREETER-X-1 START XDG_SEAT=seat0 XDG_VTNR=8 XDG_SESSION_CLASS=greeter
+#?XSERVER-1 ACCEPT-CONNECT
+#?GREETER-X-1 CONNECT-XSERVER
+#?GREETER-X-1 CONNECT-TO-DAEMON
+#?GREETER-X-1 CONNECTED-TO-DAEMON
+
+# Switch to greeter
+#?LOGIN1 ACTIVATE-SESSION SESSION=c1
+#?VT ACTIVATE VT=8
+
+# Login as existing user
+#?*GREETER-X-1 AUTHENTICATE USERNAME=have-password1
+#?PAM-have-password1 START SERVICE=lightdm USER=have-password1
+#?PAM-have-password1 AUTHENTICATE
+#?GREETER-X-1 SHOW-PROMPT TEXT="Password:"
+#?*GREETER-X-1 RESPOND TEXT="password"
+#?PAM-have-password1 ACCT-MGMT
+#?GREETER-X-1 AUTHENTICATION-COMPLETE USERNAME=have-password1 AUTHENTICATED=TRUE
+#?*GREETER-X-1 START-SESSION
+
+# Credentials are refreshed
+#?PAM-have-password1 SETCRED REFRESH_CRED
+
+# Session is unlocked
+#?LOGIN1 UNLOCK-SESSION
+
+# Switch to session
+#?LOGIN1 ACTIVATE-SESSION SESSION=c0
+#?VT ACTIVATE VT=7
+
+# Greeter and X server stop
+#?GREETER-X-1 TERMINATE SIGNAL=15
+#?PAM-lightdm CLOSE-SESSION
+#?PAM-lightdm SETCRED DELETE_CRED
+#?PAM-lightdm END
+#?XSERVER-1 TERMINATE SIGNAL=15
+
+# Cleanup
+#?*STOP-DAEMON
+#?SESSION-X-0 TERMINATE SIGNAL=15
+#?PAM-have-password1 CLOSE-SESSION
+#?PAM-have-password1 SETCRED DELETE_CRED
+#?PAM-have-password1 END
+#?XSERVER-0 TERMINATE SIGNAL=15
+#?RUNNER DAEMON-EXIT STATUS=0
diff --git a/tests/test-switch-to-greeter-return-session-pam b/tests/test-switch-to-greeter-return-session-pam
new file mode 100755 (executable)
index 0000000..69bfabe
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner switch-to-greeter-return-session-pam test-gobject-greeter