diff -r -U 10 dovecot-1.0.rc12.orig/src/auth/passdb-checkpassword.c dovecot-1.0.rc12/src/auth/passdb-checkpassword.c
--- dovecot-1.0.rc12.orig/src/auth/passdb-checkpassword.c	2006-11-06 15:12:23.000000000 +0300
+++ dovecot-1.0.rc12/src/auth/passdb-checkpassword.c	2006-11-09 15:41:40.000000000 +0300
@@ -94,23 +94,33 @@
 	i_free(request);
 }
 
 static void
 checkpassword_request_half_finish(struct chkpw_auth_request *request)
 {
 	if (!request->exited || request->fd_in != -1)
 		return;
 
 	switch (request->exit_status) {
-	case 1:
+/*vpopmail's exit codes for bad user/password */	
+	case 3:		/*password fail / vpopmail user not found*/
+	case 12: 	/*null user name given*/
+	case 13:	/*null password given*/
+	case 15:	/*user has no password*/
+	case 20:	/*invalid user/domain characters*/
+	case 21:	/*system user not found*/
+	case 22:	/*system user shadow entry not found*/
+	case 23:	/*system password fail*/
+/*classic checkpassword exit codes*/
+	case 1:		/*additionally defined in vpopmail for "pop/smtp/webmal/imap/ access denied"*/
 		auth_request_log_info(request->request, "checkpassword",
-				      "Password not accepted");
+				      "Login failed");
 		checkpassword_request_finish(request,
 					     PASSDB_RESULT_PASSWORD_MISMATCH);
 		break;
 	case 0:
 		if (request->input_buf != NULL) {
 			checkpassword_request_finish(request, PASSDB_RESULT_OK);
 			break;
 		}
 		/* missing input - fall through */
 	case 2:
