diff options
author | Robert Ancell <robert.ancell@canonical.com> | 2012-02-28 17:23:49 +1100 |
---|---|---|
committer | Robert Ancell <robert.ancell@canonical.com> | 2012-02-28 17:23:49 +1100 |
commit | c07800a62bd2a63fd2cc34ebee63247bea0aaa2e (patch) | |
tree | b626e7336889b15b4ee945afb7f129aecba15ada /tests | |
parent | 3c70d77047a981d0e009cf44dcfd6a37ba9a6131 (diff) | |
download | lightdm-c07800a62bd2a63fd2cc34ebee63247bea0aaa2e.tar.gz |
Test if greeter based password changes work
Diffstat (limited to 'tests')
-rw-r--r-- | tests/Makefile.am | 4 | ||||
-rw-r--r-- | tests/scripts/login-new-authtok.conf | 42 | ||||
-rw-r--r-- | tests/src/libsystem.c | 31 | ||||
-rwxr-xr-x | tests/test-login-gobject-new-authtok | 2 | ||||
-rwxr-xr-x | tests/test-login-python-new-authtok | 2 | ||||
-rwxr-xr-x | tests/test-login-qt-new-authtok | 2 |
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 |