Patch from Martin Schwenke Index: pam.deb/modules/pam_unix/passverify.c =================================================================== --- pam.deb.orig/modules/pam_unix/passverify.c +++ pam.deb/modules/pam_unix/passverify.c @@ -714,7 +714,7 @@ struct passwd *tmpent = NULL; struct stat st; FILE *pwfile, *opwfile; - int err = 1; + int err = 1, found = 0; int oldmask; #ifdef WITH_SELINUX security_context_t prev_context=NULL; @@ -785,6 +785,7 @@ tmpent->pw_passwd = assigned_passwd.charp; err = 0; + found = 1; } if (putpwent(tmpent, pwfile)) { D(("error writing entry to password file: %m")); @@ -826,7 +827,7 @@ return PAM_SUCCESS; } else { unlink(PW_TMPFILE); - return PAM_AUTHTOK_ERR; + return found ? PAM_AUTHTOK_ERR : PAM_USER_UNKNOWN; } } @@ -841,7 +842,7 @@ struct spwd *spwdent = NULL, *stmpent = NULL; struct stat st; FILE *pwfile, *opwfile; - int err = 1; + int err = 1, found = 0; int oldmask; #ifdef WITH_SELINUX security_context_t prev_context=NULL; @@ -912,6 +913,7 @@ stmpent->sp_pwdp = towhat; stmpent->sp_lstchg = time(NULL) / (60 * 60 * 24); err = 0; + found = 1; D(("Set password %s for %s", stmpent->sp_pwdp, forwho)); } @@ -958,7 +960,7 @@ return PAM_SUCCESS; } else { unlink(SH_TMPFILE); - return PAM_AUTHTOK_ERR; + return found ? PAM_AUTHTOK_ERR : PAM_USER_UNKNOWN; } }