]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
auth: If user is disabled or password expired, tell about it to auth-client.
authorTimo Sirainen <tss@iki.fi>
Wed, 16 May 2012 13:14:01 +0000 (16:14 +0300)
committerTimo Sirainen <tss@iki.fi>
Wed, 16 May 2012 13:14:01 +0000 (16:14 +0300)
src/auth/auth-request-handler.c
src/auth/auth-request.c
src/auth/auth-request.h

index 3ab5b3279949388dff475795e8c2e4587ad1491c..796b1e0d3a828a8454f34accfcdc896bdfebc4d3 100644 (file)
@@ -287,6 +287,21 @@ auth_request_handler_reply_failure_finish(struct auth_request *request)
                auth_stream_reply_add(reply, "nodelay", NULL);
        get_client_extra_fields(request, reply);
 
+       switch (request->passdb_result) {
+       case PASSDB_RESULT_INTERNAL_FAILURE:
+       case PASSDB_RESULT_SCHEME_NOT_AVAILABLE:
+       case PASSDB_RESULT_USER_UNKNOWN:
+       case PASSDB_RESULT_PASSWORD_MISMATCH:
+       case PASSDB_RESULT_OK:
+               break;
+       case PASSDB_RESULT_USER_DISABLED:
+               auth_stream_reply_add(reply, "user_disabled", NULL);
+               break;
+       case PASSDB_RESULT_PASS_EXPIRED:
+               auth_stream_reply_add(reply, "pass_expired", NULL);
+               break;
+       }
+
        auth_request_handle_failure(request, reply);
 }
 
index 6ac4d3cdbbd5cfa9aa550eb97f7b4bc2cf566438..acaa2a41b3457b5252d8d5849504bdd5172bea24 100644 (file)
@@ -557,6 +557,7 @@ auth_request_verify_plain_callback_finish(enum passdb_result result,
                        request->private_callback.verify_plain);
        } else {
                auth_request_ref(request);
+               request->passdb_result = result;
                request->private_callback.verify_plain(result, request);
                auth_request_unref(&request);
        }
@@ -691,6 +692,7 @@ auth_request_lookup_credentials_finish(enum passdb_result result,
                           but the user was unknown there */
                        result = PASSDB_RESULT_USER_UNKNOWN;
                }
+               request->passdb_result = result;
                request->private_callback.
                        lookup_credentials(result, credentials, size, request);
        }
index c218979949b52995a59460204167a6fa3a33db40..d450e6b571e2e1432af92c1018a47fe93c38fb6e 100644 (file)
@@ -56,6 +56,8 @@ struct auth_request {
        struct auth_stream_reply *extra_cache_fields;
        /* the whole userdb result reply */
        struct auth_stream_reply *userdb_reply;
+       /* Result of passdb lookup */
+       enum passdb_result passdb_result;
 
        const struct mech_module *mech;
        const struct auth_settings *set;