summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/session-child.c23
-rw-r--r--src/session.c16
-rw-r--r--tests/Makefile.am8
-rw-r--r--tests/scripts/autologin-pam.conf (renamed from tests/scripts/pam.conf)19
-rw-r--r--tests/scripts/login-pam.conf35
-rw-r--r--tests/scripts/switch-to-greeter-return-session-pam.conf102
-rw-r--r--tests/src/libsystem.c165
-rwxr-xr-xtests/test-autologin-pam2
-rwxr-xr-xtests/test-pam2
-rwxr-xr-xtests/test-switch-to-greeter-return-session-pam2
10 files changed, 322 insertions, 52 deletions
diff --git a/src/session-child.c b/src/session-child.c
index 8358c039..220d4860 100644
--- a/src/session-child.c
+++ b/src/session-child.c
@@ -353,7 +353,10 @@ session_child_run (int argc, char **argv)
/* See what user we ended up as */
if (pam_get_item (pam_handle, PAM_USER, (const void **) &new_username) != PAM_SUCCESS)
+ {
+ pam_end (pam_handle, 0);
return EXIT_FAILURE;
+ }
g_free (username);
username = g_strdup (new_username);
@@ -438,12 +441,16 @@ session_child_run (int argc, char **argv)
if (!username)
{
g_printerr ("No user selected during authentication\n");
+ pam_end (pam_handle, 0);
return EXIT_FAILURE;
}
/* Stop if we didn't authenticated */
if (authentication_result != PAM_SUCCESS)
+ {
+ pam_end (pam_handle, 0);
return EXIT_FAILURE;
+ }
/* Get the command to run (blocks) */
log_filename = read_string ();
@@ -470,6 +477,14 @@ 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_REINITIALIZE_CRED);
+ pam_end (pam_handle, 0);
+ return EXIT_SUCCESS;
+ }
+
/* Redirect stderr to a log file */
if (log_filename)
{
@@ -506,6 +521,7 @@ session_child_run (int argc, char **argv)
if (result != PAM_SUCCESS)
{
g_printerr ("Failed to establish PAM credentials: %s\n", pam_strerror (pam_handle, result));
+ pam_end (pam_handle, 0);
return EXIT_FAILURE;
}
@@ -514,6 +530,7 @@ session_child_run (int argc, char **argv)
if (result != PAM_SUCCESS)
{
g_printerr ("Failed to open PAM session: %s\n", pam_strerror (pam_handle, result));
+ pam_end (pam_handle, 0);
return EXIT_FAILURE;
}
@@ -522,7 +539,10 @@ session_child_run (int argc, char **argv)
if (error)
g_printerr ("Unable to contact system bus: %s", error->message);
if (!bus)
+ {
+ pam_end (pam_handle, 0);
return EXIT_FAILURE;
+ }
if (login1_is_running ())
{
@@ -580,7 +600,10 @@ session_child_run (int argc, char **argv)
g_printerr ("Error writing X authority: %s\n", error->message);
g_clear_error (&error);
if (!result)
+ {
+ pam_end (pam_handle, 0);
return EXIT_FAILURE;
+ }
value = g_strdup_printf ("XAUTHORITY=%s", x_authority_filename);
pam_putenv (pam_handle, value);
diff --git a/src/session.c b/src/session.c
index 1ec2c3e5..c0cbc140 100644
--- a/src/session.c
+++ b/src/session.c
@@ -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;
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 86d58fe3..e4e376bb 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -19,6 +19,7 @@ TESTS = \
test-additional-system-config-priority \
test-headless \
test-autologin \
+ test-autologin-pam \
test-autologin-in-background \
test-autologin-guest-in-background \
test-autologin-timeout-in-background \
@@ -35,7 +36,6 @@ TESTS = \
test-change-authentication \
test-restart-authentication \
test-gobject-cancel-authentication \
- test-pam \
test-login-pam \
test-denied \
test-expired \
@@ -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 \
@@ -329,12 +330,13 @@ EXTRA_DIST = \
scripts/autologin.conf \
scripts/autologin-guest.conf \
scripts/autologin-guest-fail-setup-script.conf \
+ scripts/autologin-guest-in-background.conf \
scripts/autologin-guest-logout.conf \
scripts/autologin-guest-session-config.conf \
scripts/autologin-guest-timeout.conf \
scripts/autologin-in-background.conf \
scripts/autologin-invalid-greeter.conf \
- scripts/autologin-guest-in-background.conf \
+ scripts/autologin-pam.conf \
scripts/autologin-timeout-in-background.conf \
scripts/autologin-invalid-session.conf \
scripts/autologin-invalid-user.conf \
@@ -426,7 +428,6 @@ EXTRA_DIST = \
scripts/no-console-kit-or-login1.conf \
scripts/no-login1.conf \
scripts/open-file-descriptors.conf \
- scripts/pam.conf \
scripts/power.conf \
scripts/power-no-console-kit.conf \
scripts/power-no-services.conf \
@@ -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 \
diff --git a/tests/scripts/pam.conf b/tests/scripts/autologin-pam.conf
index 727ef4b1..a42bcdfc 100644
--- a/tests/scripts/pam.conf
+++ b/tests/scripts/autologin-pam.conf
@@ -1,11 +1,14 @@
#
-# Check we handle conversations during each PAM method
+# Check we correctly use PAM for automatic login
#
[SeatDefaults]
-autologin-user=log-pam
+autologin-user=no-password1
user-session=default
+[test-pam]
+log-events=true
+
#?*START-DAEMON
#?RUNNER DAEMON-START
@@ -17,8 +20,15 @@ user-session=default
#?XSERVER-0 INDICATE-READY
#?XSERVER-0 ACCEPT-CONNECT
+# Session authenticates
+#?PAM-no-password1 START SERVICE=lightdm-autologin USER=no-password1
+#?PAM-no-password1 AUTHENTICATE
+#?PAM-no-password1 ACCT-MGMT
+#?PAM-no-password1 SETCRED ESTABLISH_CRED
+#?PAM-no-password1 OPEN-SESSION
+
# Session starts
-#?SESSION-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_GREETER_DATA_DIR=.*/log-pam XDG_SESSION_TYPE=x11 XDG_SESSION_DESKTOP=default USER=log-pam
+#?SESSION-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_GREETER_DATA_DIR=.*/no-password1 XDG_SESSION_TYPE=x11 XDG_SESSION_DESKTOP=default USER=no-password1
#?LOGIN1 ACTIVATE-SESSION SESSION=c0
#?XSERVER-0 ACCEPT-CONNECT
#?SESSION-X-0 CONNECT-XSERVER
@@ -26,5 +36,8 @@ user-session=default
# Cleanup
#?*STOP-DAEMON
#?SESSION-X-0 TERMINATE SIGNAL=15
+#?PAM-no-password1 CLOSE-SESSION
+#?PAM-no-password1 SETCRED DELETE_CRED
+#?PAM-no-password1 END
#?XSERVER-0 TERMINATE SIGNAL=15
#?RUNNER DAEMON-EXIT STATUS=0
diff --git a/tests/scripts/login-pam.conf b/tests/scripts/login-pam.conf
index e0f7aca5..1cee123f 100644
--- a/tests/scripts/login-pam.conf
+++ b/tests/scripts/login-pam.conf
@@ -1,10 +1,13 @@
#
-# Check we handle conversations during each PAM method
+# Check we correctly use PAM for login
#
[SeatDefaults]
user-session=default
+[test-pam]
+log-events=true
+
#?*START-DAEMON
#?RUNNER DAEMON-START
@@ -16,6 +19,11 @@ user-session=default
#?XSERVER-0 INDICATE-READY
#?XSERVER-0 ACCEPT-CONNECT
+# 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-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_SESSION_CLASS=greeter
#?LOGIN1 ACTIVATE-SESSION SESSION=c0
@@ -24,18 +32,28 @@ user-session=default
#?GREETER-X-0 CONNECT-TO-DAEMON
#?GREETER-X-0 CONNECTED-TO-DAEMON
-# Log into account with a password
-#?*GREETER-X-0 AUTHENTICATE USERNAME=log-pam
-#?GREETER-X-0 SHOW-MESSAGE TEXT="pam_authenticate"
+# Greeter does authentication via PAM
+#?*GREETER-X-0 AUTHENTICATE USERNAME=have-password1
+#?PAM-have-password1 START SERVICE=lightdm USER=have-password1
+#?PAM-have-password1 AUTHENTICATE
#?GREETER-X-0 SHOW-PROMPT TEXT="Password:"
#?*GREETER-X-0 RESPOND TEXT="password"
-#?GREETER-X-0 SHOW-MESSAGE TEXT="pam_acct_mgmt"
-#?GREETER-X-0 AUTHENTICATION-COMPLETE USERNAME=log-pam AUTHENTICATED=TRUE
+#?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 SETCRED ESTABLISH_CRED
+#?PAM-have-password1 OPEN-SESSION
+
+# Greeter session stops
#?GREETER-X-0 TERMINATE SIGNAL=15
+#?PAM-lightdm CLOSE-SESSION
+#?PAM-lightdm SETCRED DELETE_CRED
+#?PAM-lightdm END
# Session starts
-#?SESSION-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_GREETER_DATA_DIR=.*/log-pam XDG_SESSION_TYPE=x11 XDG_SESSION_DESKTOP=default USER=log-pam
+#?SESSION-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_GREETER_DATA_DIR=.*/have-password1 XDG_SESSION_TYPE=x11 XDG_SESSION_DESKTOP=default USER=have-password1
#?LOGIN1 ACTIVATE-SESSION SESSION=c1
#?XSERVER-0 ACCEPT-CONNECT
#?SESSION-X-0 CONNECT-XSERVER
@@ -43,5 +61,8 @@ user-session=default
# 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/scripts/switch-to-greeter-return-session-pam.conf b/tests/scripts/switch-to-greeter-return-session-pam.conf
new file mode 100644
index 00000000..9498c571
--- /dev/null
+++ b/tests/scripts/switch-to-greeter-return-session-pam.conf
@@ -0,0 +1,102 @@
+#
+# 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 XDG_SESSION_TYPE=x11 XDG_SESSION_DESKTOP=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 REINITIALIZE_CRED
+#?PAM-have-password1 END
+
+# 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/src/libsystem.c b/tests/src/libsystem.c
index 95af3884..0c25b8c4 100644
--- a/tests/src/libsystem.c
+++ b/tests/src/libsystem.c
@@ -54,6 +54,7 @@ static void connect_status (void)
struct pam_handle
{
+ char *id;
char *service_name;
char *user;
char *authtok;
@@ -794,6 +795,25 @@ pam_start (const char *service_name, const char *user, const struct pam_conv *co
if (handle == NULL)
return PAM_BUF_ERR;
+ if (user)
+ handle->id = g_strdup_printf ("PAM-%s", user);
+ else
+ handle->id = g_strdup ("PAM");
+
+ connect_status ();
+ if (g_key_file_get_boolean (config, "test-pam", "log-events", NULL))
+ {
+ GString *status;
+
+ status = g_string_new ("");
+ g_string_append_printf (status, "%s START", handle->id);
+ g_string_append_printf (status, " SERVICE=%s", service_name);
+ if (user)
+ g_string_append_printf (status, " USER=%s", user);
+ status_notify (status->str);
+ g_string_free (status, TRUE);
+ }
+
handle->service_name = strdup (service_name);
handle->user = user ? strdup (user) : NULL;
handle->authtok = NULL;
@@ -807,27 +827,6 @@ pam_start (const char *service_name, const char *user, const struct pam_conv *co
return PAM_SUCCESS;
}
-static void
-send_info (pam_handle_t *pamh, const char *message)
-{
- struct pam_message **msg;
- struct pam_response *resp = NULL;
-
- msg = calloc (1, sizeof (struct pam_message *));
- msg[0] = malloc (sizeof (struct pam_message));
- msg[0]->msg_style = PAM_TEXT_INFO;
- msg[0]->msg = message;
- pamh->conversation.conv (1, (const struct pam_message **) msg, &resp, pamh->conversation.appdata_ptr);
- free (msg[0]);
- free (msg);
- if (resp)
- {
- if (resp[0].resp)
- free (resp[0].resp);
- free (resp);
- }
-}
-
int
pam_authenticate (pam_handle_t *pamh, int flags)
{
@@ -836,6 +835,22 @@ pam_authenticate (pam_handle_t *pamh, int flags)
if (pamh == NULL)
return PAM_SYSTEM_ERR;
+
+ connect_status ();
+ if (g_key_file_get_boolean (config, "test-pam", "log-events", NULL))
+ {
+ GString *status;
+
+ status = g_string_new ("");
+ g_string_append_printf (status, "%s AUTHENTICATE", pamh->id);
+ if (flags & PAM_SILENT)
+ g_string_append (status, " SILENT");
+ if (flags & PAM_DISALLOW_NULL_AUTHTOK)
+ g_string_append (status, " DISALLOW_NULL_AUTHTOK");
+
+ status_notify (status->str);
+ g_string_free (status, TRUE);
+ }
if (strcmp (pamh->service_name, "test-remote") == 0)
{
@@ -929,9 +944,6 @@ pam_authenticate (pam_handle_t *pamh, int flags)
free (resp);
}
- if (strcmp (pamh->user, "log-pam") == 0)
- send_info (pamh, "pam_authenticate");
-
/* Crash on authenticate */
if (strcmp (pamh->user, "crash-authenticate") == 0)
kill (getpid (), SIGSEGV);
@@ -1201,12 +1213,23 @@ pam_open_session (pam_handle_t *pamh, int flags)
if (pamh == NULL)
return PAM_SYSTEM_ERR;
+ connect_status ();
+ if (g_key_file_get_boolean (config, "test-pam", "log-events", NULL))
+ {
+ GString *status;
+
+ status = g_string_new ("");
+ g_string_append_printf (status, "%s OPEN-SESSION", pamh->id);
+ if (flags & PAM_SILENT)
+ g_string_append (status, " SILENT");
+
+ status_notify (status->str);
+ g_string_free (status, TRUE);
+ }
+
if (strcmp (pamh->user, "session-error") == 0)
return PAM_SESSION_ERR;
- if (strcmp (pamh->user, "log-pam") == 0)
- send_info (pamh, "pam_open_session");
-
if (strcmp (pamh->user, "make-home-dir") == 0)
{
struct passwd *entry;
@@ -1223,8 +1246,19 @@ pam_close_session (pam_handle_t *pamh, int flags)
if (pamh == NULL)
return PAM_SYSTEM_ERR;
- if (strcmp (pamh->user, "log-pam") == 0)
- send_info (pamh, "pam_close_session");
+ connect_status ();
+ if (g_key_file_get_boolean (config, "test-pam", "log-events", NULL))
+ {
+ GString *status;
+
+ status = g_string_new ("");
+ g_string_append_printf (status, "%s CLOSE-SESSION", pamh->id);
+ if (flags & PAM_SILENT)
+ g_string_append (status, " SILENT");
+
+ status_notify (status->str);
+ g_string_free (status, TRUE);
+ }
return PAM_SUCCESS;
}
@@ -1234,13 +1268,26 @@ pam_acct_mgmt (pam_handle_t *pamh, int flags)
{
if (pamh == NULL)
return PAM_SYSTEM_ERR;
+
+ connect_status ();
+ if (g_key_file_get_boolean (config, "test-pam", "log-events", NULL))
+ {
+ GString *status;
+
+ status = g_string_new ("");
+ g_string_append_printf (status, "%s ACCT-MGMT", pamh->id);
+ if (flags & PAM_SILENT)
+ g_string_append (status, " SILENT");
+ if (flags & PAM_DISALLOW_NULL_AUTHTOK)
+ g_string_append (status, " DISALLOW_NULL_AUTHTOK");
+
+ status_notify (status->str);
+ g_string_free (status, TRUE);
+ }
if (!pamh->user)
return PAM_USER_UNKNOWN;
- if (strcmp (pamh->user, "log-pam") == 0)
- send_info (pamh, "pam_acct_mgmt");
-
if (strcmp (pamh->user, "denied") == 0)
return PAM_PERM_DENIED;
if (strcmp (pamh->user, "expired") == 0)
@@ -1262,8 +1309,21 @@ pam_chauthtok (pam_handle_t *pamh, int flags)
if (pamh == NULL)
return PAM_SYSTEM_ERR;
- if (strcmp (pamh->user, "log-pam") == 0)
- send_info (pamh, "pam_chauthtok");
+ connect_status ();
+ if (g_key_file_get_boolean (config, "test-pam", "log-events", NULL))
+ {
+ GString *status;
+
+ status = g_string_new ("");
+ g_string_append_printf (status, "%s CHAUTHTOK", pamh->id);
+ if (flags & PAM_SILENT)
+ g_string_append (status, " SILENT");
+ if (flags & PAM_CHANGE_EXPIRED_AUTHTOK)
+ g_string_append (status, " CHANGE_EXPIRED_AUTHTOK");
+
+ status_notify (status->str);
+ g_string_free (status, TRUE);
+ }
msg = malloc (sizeof (struct pam_message *) * 1);
msg[0] = malloc (sizeof (struct pam_message));
@@ -1303,8 +1363,27 @@ pam_setcred (pam_handle_t *pamh, int flags)
if (pamh == NULL)
return PAM_SYSTEM_ERR;
- if (strcmp (pamh->user, "log-pam") == 0)
- send_info (pamh, "pam_setcred");
+ connect_status ();
+ if (g_key_file_get_boolean (config, "test-pam", "log-events", NULL))
+ {
+ GString *status;
+
+ status = g_string_new ("");
+ g_string_append_printf (status, "%s SETCRED", pamh->id);
+ if (flags & PAM_SILENT)
+ g_string_append (status, " SILENT");
+ if (flags & PAM_ESTABLISH_CRED)
+ g_string_append (status, " ESTABLISH_CRED");
+ if (flags & PAM_DELETE_CRED)
+ g_string_append (status, " DELETE_CRED");
+ if (flags & PAM_REINITIALIZE_CRED)
+ g_string_append (status, " REINITIALIZE_CRED");
+ if (flags & PAM_REFRESH_CRED)
+ g_string_append (status, " REFRESH_CRED");
+
+ status_notify (status->str);
+ g_string_free (status, TRUE);
+ }
/* Put the test directories into the path */
e = g_strdup_printf ("PATH=%s/tests/src/.libs:%s/tests/src:%s/tests/src:%s/src:%s", BUILDDIR, BUILDDIR, SRCDIR, BUILDDIR, pam_getenv (pamh, "PATH"));
@@ -1353,7 +1432,19 @@ pam_end (pam_handle_t *pamh, int pam_status)
{
if (pamh == NULL)
return PAM_SYSTEM_ERR;
-
+
+ connect_status ();
+ if (g_key_file_get_boolean (config, "test-pam", "log-events", NULL))
+ {
+ GString *status;
+
+ status = g_string_new ("");
+ g_string_append_printf (status, "%s END", pamh->id);
+ status_notify (status->str);
+ g_string_free (status, TRUE);
+ }
+
+ free (pamh->id);
free (pamh->service_name);
if (pamh->user)
free (pamh->user);
diff --git a/tests/test-autologin-pam b/tests/test-autologin-pam
new file mode 100755
index 00000000..d7d41e8a
--- /dev/null
+++ b/tests/test-autologin-pam
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner autologin-pam test-gobject-greeter
diff --git a/tests/test-pam b/tests/test-pam
deleted file mode 100755
index d8527e8d..00000000
--- a/tests/test-pam
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-./src/dbus-env ./src/test-runner pam test-gobject-greeter
diff --git a/tests/test-switch-to-greeter-return-session-pam b/tests/test-switch-to-greeter-return-session-pam
new file mode 100755
index 00000000..69bfabe8
--- /dev/null
+++ b/tests/test-switch-to-greeter-return-session-pam
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner switch-to-greeter-return-session-pam test-gobject-greeter