]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
auth: Change auth_request_password_verify() to return enum passdb_result
authorAki Tuomi <aki.tuomi@open-xchange.com>
Wed, 28 Dec 2022 10:05:39 +0000 (12:05 +0200)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Wed, 28 Dec 2022 13:38:11 +0000 (15:38 +0200)
This does not break anything, because PASSDB_RESULT_OK is 1 and mismatch
is 0.

src/auth/auth-request.c
src/auth/auth-request.h

index 0ca29f3674c79c516e13663aae34088efe74c79b..86963bde12ebf91f8734a190543876cfc2a3a37d 100644 (file)
@@ -2339,21 +2339,24 @@ void auth_request_log_login_failure(struct auth_request *request,
        event_set_min_log_level(event, orig_level);
 }
 
-int auth_request_password_verify(struct auth_request *request,
-                                const char *plain_password,
-                                const char *crypted_password,
-                                const char *scheme, const char *subsystem)
+enum passdb_result
+auth_request_password_verify(struct auth_request *request,
+                            const char *plain_password,
+                            const char *crypted_password,
+                            const char *scheme, const char *subsystem)
 {
        return auth_request_password_verify_log(request, plain_password,
                        crypted_password, scheme, subsystem, TRUE);
 }
 
-int auth_request_password_verify_log(struct auth_request *request,
+enum passdb_result
+auth_request_password_verify_log(struct auth_request *request,
                                 const char *plain_password,
                                 const char *crypted_password,
                                 const char *scheme, const char *subsystem,
                                 bool log_password_mismatch)
 {
+       enum passdb_result result;
        const unsigned char *raw_password;
        size_t raw_password_size;
        const char *error;
@@ -2365,18 +2368,18 @@ int auth_request_password_verify_log(struct auth_request *request,
 
        if (request->fields.skip_password_check) {
                /* passdb continue* rule after a successful authentication */
-               return 1;
+               return PASSDB_RESULT_OK;
        }
 
        if (request->passdb->set->deny) {
                /* this is a deny database, we don't care about the password */
-               return 0;
+               return PASSDB_RESULT_PASSWORD_MISMATCH;
        }
 
        if (auth_fields_exists(request->fields.extra_fields, "nopassword")) {
                auth_request_log_debug(request, subsystem,
                                        "Allowing any password");
-               return 1;
+               return PASSDB_RESULT_OK;
        }
 
        ret = password_decode(crypted_password, scheme,
@@ -2389,8 +2392,9 @@ int auth_request_password_verify_log(struct auth_request *request,
                } else {
                        auth_request_log_error(request, subsystem,
                                                "Unknown scheme %s", scheme);
+                       return PASSDB_RESULT_SCHEME_NOT_AVAILABLE;
                }
-               return -1;
+               return PASSDB_RESULT_INTERNAL_FAILURE;
        }
 
        /* Use original_username since it may be important for some
@@ -2404,9 +2408,13 @@ int auth_request_password_verify_log(struct auth_request *request,
                auth_request_log_error(request, subsystem,
                                        "Invalid password%s in passdb: %s",
                                        password_str, error);
+               result = PASSDB_RESULT_INTERNAL_FAILURE;
        } else if (ret == 0) {
                if (log_password_mismatch)
                        auth_request_log_password_mismatch(request, subsystem);
+               result = PASSDB_RESULT_PASSWORD_MISMATCH;
+       } else {
+               result = PASSDB_RESULT_OK;
        }
        if (ret <= 0 && request->set->debug_passwords) T_BEGIN {
                log_password_failure(request, plain_password,
@@ -2414,7 +2422,7 @@ int auth_request_password_verify_log(struct auth_request *request,
                                     &gen_params,
                                     subsystem);
        } T_END;
-       return ret;
+       return result;
 }
 
 enum passdb_result auth_request_password_missing(struct auth_request *request)
index dbd223ddd731619606681e8113a51359355c2e22..9f8869bf55d690cf71ae39a232dfbb900ec2c720 100644 (file)
@@ -313,15 +313,19 @@ void auth_request_proxy_finish_failure(struct auth_request *request);
 
 void auth_request_log_password_mismatch(struct auth_request *request,
                                        const char *subsystem);
-int auth_request_password_verify(struct auth_request *request,
-                                const char *plain_password,
-                                const char *crypted_password,
-                                const char *scheme, const char *subsystem);
-int auth_request_password_verify_log(struct auth_request *request,
+enum passdb_result
+auth_request_password_verify(struct auth_request *request,
+                            const char *plain_password,
+                            const char *crypted_password,
+                            const char *scheme, const char *subsystem)
+                            ATTR_WARN_UNUSED_RESULT;
+enum passdb_result
+auth_request_password_verify_log(struct auth_request *request,
                                 const char *plain_password,
                                 const char *crypted_password,
                                 const char *scheme, const char *subsystem,
-                                bool log_password_mismatch);
+                                bool log_password_mismatch)
+                                ATTR_WARN_UNUSED_RESULT;
 enum passdb_result auth_request_password_missing(struct auth_request *request);
 
 void auth_request_get_log_prefix(string_t *str, struct auth_request *auth_request,