IMAP_RESP_CODE_PRIVACYREQUIRED, text);
break;
case CLIENT_AUTH_RESULT_PASS_EXPIRED:
+ case CLIENT_AUTH_RESULT_LOGIN_DISABLED:
case CLIENT_AUTH_RESULT_AUTHFAILED:
client_send_reply_code(client, IMAP_CMD_REPLY_NO,
IMAP_RESP_CODE_AUTHFAILED, text);
}
if (strcmp(key, "nologin") == 0) {
reply_r->nologin = TRUE;
+ reply_r->fail_code = CLIENT_AUTH_FAIL_CODE_LOGIN_DISABLED;
} else if (strcmp(key, "proxy") == 0)
reply_r->proxy = TRUE;
else if (strcmp(key, "reason") == 0)
case CLIENT_AUTH_FAIL_CODE_PASS_EXPIRED:
result = CLIENT_AUTH_RESULT_PASS_EXPIRED;
break;
+ case CLIENT_AUTH_FAIL_CODE_LOGIN_DISABLED:
+ result = CLIENT_AUTH_RESULT_LOGIN_DISABLED;
+ if (reason == NULL)
+ reason = "Login disabled for this user";
+ break;
case CLIENT_AUTH_FAIL_CODE_USER_DISABLED:
default:
if (reason != NULL)
return "(user disabled)";
case CLIENT_AUTH_FAIL_CODE_PASS_EXPIRED:
return "(password expired)";
+ case CLIENT_AUTH_FAIL_CODE_LOGIN_DISABLED:
+ return "(login disabled)";
default:
break;
}
CLIENT_AUTH_FAIL_CODE_TEMPFAIL,
CLIENT_AUTH_FAIL_CODE_USER_DISABLED,
CLIENT_AUTH_FAIL_CODE_PASS_EXPIRED,
+ CLIENT_AUTH_FAIL_CODE_LOGIN_DISABLED,
};
enum client_auth_result {
CLIENT_AUTH_RESULT_AUTHZFAILED,
CLIENT_AUTH_RESULT_TEMPFAIL,
CLIENT_AUTH_RESULT_PASS_EXPIRED,
- CLIENT_AUTH_RESULT_SSL_REQUIRED
+ CLIENT_AUTH_RESULT_SSL_REQUIRED,
+ CLIENT_AUTH_RESULT_LOGIN_DISABLED,
};
struct client_auth_reply {
case CLIENT_AUTH_RESULT_AUTHZFAILED:
case CLIENT_AUTH_RESULT_PASS_EXPIRED:
case CLIENT_AUTH_RESULT_SSL_REQUIRED:
+ case CLIENT_AUTH_RESULT_LOGIN_DISABLED:
client_send_reply(client, POP3_CMD_REPLY_AUTH_ERROR, text);
break;
default: