]> rtime.felk.cvut.cz Git - sojka/lightdm.git/commitdiff
Test if greeter based password changes work
authorRobert Ancell <robert.ancell@canonical.com>
Tue, 28 Feb 2012 06:23:49 +0000 (17:23 +1100)
committerRobert Ancell <robert.ancell@canonical.com>
Tue, 28 Feb 2012 06:23:49 +0000 (17:23 +1100)
tests/Makefile.am
tests/scripts/login-new-authtok.conf [new file with mode: 0644]
tests/src/libsystem.c
tests/test-login-gobject-new-authtok [new file with mode: 0755]
tests/test-login-python-new-authtok [new file with mode: 0755]
tests/test-login-qt-new-authtok [new file with mode: 0755]

index 4ee4a882f6aabab92f578cfa5dff5ab1a4f5686d..ae3ec001e89df1a92a5200520c551b48fc376a1b 100644 (file)
@@ -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 (file)
index 0000000..abb3644
--- /dev/null
@@ -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
index a02ad00080557efce946fe11a53cc710512a71d8..1c5383df2fb486802939efa1739cb9498d60ba44 100644 (file)
@@ -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 (executable)
index 0000000..fcd5cf2
--- /dev/null
@@ -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 (executable)
index 0000000..6ffde74
--- /dev/null
@@ -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 (executable)
index 0000000..7ce6b57
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner login-new-authtok test-qt-greeter