]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
login-common: Added result code for a nologin code from the auth service.
authorStephan Bosch <stephan.bosch@dovecot.fi>
Tue, 1 Nov 2016 22:12:25 +0000 (23:12 +0100)
committerGitLab <gitlab@git.dovecot.net>
Wed, 2 Nov 2016 12:01:45 +0000 (14:01 +0200)
src/imap-login/client-authenticate.c
src/login-common/client-common-auth.c
src/login-common/client-common.c
src/login-common/client-common.h
src/pop3-login/client-authenticate.c

index 44938be2ac3aa784fb4888a8d33ee5bfb98a7aaa..8dc689aae8590b3a85cbbfbb28aebb39d061eaae 100644 (file)
@@ -98,6 +98,7 @@ void imap_client_auth_result(struct client *client,
                                       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);
index 182e3017ab986fa9ee8ab2616c899520631a4c2e..a18f5419cdf94c966af0257a22b2001e761f5302 100644 (file)
@@ -143,6 +143,7 @@ static void client_auth_parse_args(struct client *client, bool success,
                }
                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)
@@ -526,6 +527,11 @@ client_auth_handle_reply(struct client *client,
                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)
index 3f49356727a668e8d5c6514284f76c2e5a5564bf..c8bbca801fa02280ecaa637b04c4195fa80cfeab 100644 (file)
@@ -762,6 +762,8 @@ const char *client_get_extra_disconnect_reason(struct client *client)
                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;
        }
index d6cdaee7f54fddce583d5c2d1f5a8211bf6bf459..e6ec6f60a7cd0ef33d2dada4e5dac943e8ca272f 100644 (file)
@@ -49,6 +49,7 @@ enum client_auth_fail_code {
        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 {
@@ -61,7 +62,8 @@ 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 {
index 0e048924645bb5314666976a2b9c822a07de13b3..b3e1e236211a309605a5a02c4fa899d6ea8ab16a 100644 (file)
@@ -65,6 +65,7 @@ void pop3_client_auth_result(struct client *client,
        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: