summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorRobert Ancell <robert.ancell@canonical.com>2012-02-28 17:23:49 +1100
committerRobert Ancell <robert.ancell@canonical.com>2012-02-28 17:23:49 +1100
commitc07800a62bd2a63fd2cc34ebee63247bea0aaa2e (patch)
treeb626e7336889b15b4ee945afb7f129aecba15ada /tests
parent3c70d77047a981d0e009cf44dcfd6a37ba9a6131 (diff)
downloadlightdm-c07800a62bd2a63fd2cc34ebee63247bea0aaa2e.tar.gz
Test if greeter based password changes work
Diffstat (limited to 'tests')
-rw-r--r--tests/Makefile.am4
-rw-r--r--tests/scripts/login-new-authtok.conf42
-rw-r--r--tests/src/libsystem.c31
-rwxr-xr-xtests/test-login-gobject-new-authtok2
-rwxr-xr-xtests/test-login-python-new-authtok2
-rwxr-xr-xtests/test-login-qt-new-authtok2
6 files changed, 83 insertions, 0 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 4ee4a882..ae3ec001 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -35,6 +35,7 @@ TESTS = \
test-login-gobject-manual \
test-login-gobject-manual-previous-session \
test-login-gobject-no-password \
+ test-login-gobject-new-authtok \
test-login-gobject-pick-session \
test-login-gobject-previous-session \
test-login-gobject-wrong-password \
@@ -50,6 +51,7 @@ TESTS = \
test-login-python-manual \
test-login-python-manual-previous-session \
test-login-python-no-password \
+ test-login-python-new-authtok \
test-login-python-previous-session \
test-login-python-wrong-password \
test-login-python-invalid-user \
@@ -100,6 +102,7 @@ TESTS += \
test-login-qt-manual \
test-login-qt-manual-previous-session \
test-login-qt-no-password \
+ test-login-qt-new-authtok \
test-login-qt-previous-session \
test-login-qt-wrong-password \
test-login-qt-invalid-user \
@@ -157,6 +160,7 @@ EXTRA_DIST = \
scripts/login-logout.conf \
scripts/login-manual.conf \
scripts/login-manual-previous-session.conf \
+ scripts/login-new-authtok.conf \
scripts/login-no-password.conf \
scripts/login-pick-session.conf \
scripts/login-previous-session.conf \
diff --git a/tests/scripts/login-new-authtok.conf b/tests/scripts/login-new-authtok.conf
new file mode 100644
index 00000000..abb36445
--- /dev/null
+++ b/tests/scripts/login-new-authtok.conf
@@ -0,0 +1,42 @@
+#
+# Check prompted to change password
+#
+
+[LightDM]
+minimum-display-number=50
+
+#?RUNNER DAEMON-START
+
+# X server starts
+#?XSERVER :50 START
+#?XSERVER :50 INDICATE-READY
+
+# LightDM connects to X server
+#?XSERVER :50 ACCEPT-CONNECT
+
+# Greeter starts
+#?GREETER :50 START
+#?XSERVER :50 ACCEPT-CONNECT
+#?GREETER :50 CONNECT-XSERVER
+#?GREETER :50 CONNECT-TO-DAEMON
+#?GREETER :50 CONNECTED-TO-DAEMON
+
+# Log into account that requires as password change
+#?*GREETER :50 AUTHENTICATE USERNAME=new-authtok
+#?GREETER :50 SHOW-PROMPT TEXT="Enter new password:"
+#?*GREETER :50 RESPOND TEXT="New password"
+#?GREETER :50 AUTHENTICATION-COMPLETE USERNAME=new-authtok AUTHENTICATED=TRUE
+#?*GREETER :50 START-SESSION
+#?GREETER :50 TERMINATE SIGNAL=15
+
+# Session starts
+#?SESSION :50 START USER=new-authtok
+#?XSERVER :50 ACCEPT-CONNECT
+#?SESSION :50 CONNECT-XSERVER
+
+# Cleanup
+#?*STOP-DAEMON
+# Don't know what order they will terminate
+#?(SESSION :50 TERMINATE SIGNAL=15|XSERVER :50 TERMINATE SIGNAL=15)
+#?(SESSION :50 TERMINATE SIGNAL=15|XSERVER :50 TERMINATE SIGNAL=15)
+#?RUNNER DAEMON-EXIT STATUS=0
diff --git a/tests/src/libsystem.c b/tests/src/libsystem.c
index a02ad000..1c5383df 100644
--- a/tests/src/libsystem.c
+++ b/tests/src/libsystem.c
@@ -473,6 +473,8 @@ pam_acct_mgmt (pam_handle_t *pamh, int flags)
return PAM_PERM_DENIED;
if (strcmp (pamh->user, "expired") == 0)
return PAM_ACCT_EXPIRED;
+ if (strcmp (pamh->user, "new-authtok") == 0)
+ return PAM_NEW_AUTHTOK_REQD;
return PAM_SUCCESS;
}
@@ -480,9 +482,38 @@ pam_acct_mgmt (pam_handle_t *pamh, int flags)
int
pam_chauthtok (pam_handle_t *pamh, int flags)
{
+ struct passwd *entry;
+ int result;
+ struct pam_message **msg;
+ struct pam_response *resp = NULL;
+
if (pamh == NULL)
return PAM_SYSTEM_ERR;
+ msg = malloc (sizeof (struct pam_message *) * 1);
+ msg[0] = malloc (sizeof (struct pam_message));
+ msg[0]->msg_style = PAM_PROMPT_ECHO_OFF;
+ msg[0]->msg = "Enter new password:";
+ result = pamh->conversation.conv (1, (const struct pam_message **) msg, &resp, pamh->conversation.appdata_ptr);
+ free (msg[0]);
+ free (msg);
+ if (result != PAM_SUCCESS)
+ return result;
+
+ if (resp == NULL)
+ return PAM_CONV_ERR;
+ if (resp[0].resp == NULL)
+ {
+ free (resp);
+ return PAM_CONV_ERR;
+ }
+
+ /* Update password database */
+ entry = getpwnam (pamh->user);
+ free (entry->pw_passwd);
+ entry->pw_passwd = resp[0].resp;
+ free (resp);
+
return PAM_SUCCESS;
}
diff --git a/tests/test-login-gobject-new-authtok b/tests/test-login-gobject-new-authtok
new file mode 100755
index 00000000..fcd5cf2a
--- /dev/null
+++ b/tests/test-login-gobject-new-authtok
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner login-new-authtok test-gobject-greeter
diff --git a/tests/test-login-python-new-authtok b/tests/test-login-python-new-authtok
new file mode 100755
index 00000000..6ffde74d
--- /dev/null
+++ b/tests/test-login-python-new-authtok
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner login-new-authtok test-python-greeter
diff --git a/tests/test-login-qt-new-authtok b/tests/test-login-qt-new-authtok
new file mode 100755
index 00000000..7ce6b578
--- /dev/null
+++ b/tests/test-login-qt-new-authtok
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner login-new-authtok test-qt-greeter