]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
auth: Improved logging for "password scheme not available" failures.
authorTimo Sirainen <tss@iki.fi>
Sat, 21 Feb 2009 19:51:32 +0000 (14:51 -0500)
committerTimo Sirainen <tss@iki.fi>
Sat, 21 Feb 2009 19:51:32 +0000 (14:51 -0500)
--HG--
branch : HEAD

src/auth/auth-request.c
src/auth/passdb-cache.c
src/auth/passdb.c

index f506e113d5b25120017d01e0c8057b4f84dffc8b..bebcb5c1c7db8de9101726d0616c085adecb55dd 100644 (file)
@@ -556,12 +556,11 @@ void auth_request_lookup_credentials_callback(enum passdb_result result,
                                                    &result, TRUE)) {
                        auth_request_log_info(request, "passdb",
                                "Fallbacking to expired data from cache");
-               }
-               if (result == PASSDB_RESULT_OK) {
-                       if (!passdb_get_credentials(request, cache_cred,
-                                                   cache_scheme,
-                                                   &credentials, &size))
-                               result = PASSDB_RESULT_SCHEME_NOT_AVAILABLE;
+                       passdb_handle_credentials(
+                               result, cache_cred, cache_scheme,
+                               auth_request_lookup_credentials_finish,
+                               request);
+                       return;
                }
        }
 
@@ -575,8 +574,6 @@ void auth_request_lookup_credentials(struct auth_request *request,
 {
        struct passdb_module *passdb = request->passdb->passdb;
        const char *cache_key, *cache_cred, *cache_scheme;
-       const unsigned char *credentials;
-       size_t size;
        enum passdb_result result;
 
        i_assert(request->state == AUTH_REQUEST_STATE_MECH_CONTINUE);
@@ -589,13 +586,10 @@ void auth_request_lookup_credentials(struct auth_request *request,
                if (passdb_cache_lookup_credentials(request, cache_key,
                                                    &cache_cred, &cache_scheme,
                                                    &result, FALSE)) {
-                       if (result == PASSDB_RESULT_OK &&
-                           !passdb_get_credentials(request, cache_cred,
-                                                   cache_scheme,
-                                                   &credentials, &size))
-                               result = PASSDB_RESULT_SCHEME_NOT_AVAILABLE;
-                       auth_request_lookup_credentials_finish(
-                               result, credentials, size, request);
+                       passdb_handle_credentials(
+                               result, cache_cred, cache_scheme,
+                               auth_request_lookup_credentials_finish,
+                               request);
                        return;
                }
        }
@@ -604,6 +598,8 @@ void auth_request_lookup_credentials(struct auth_request *request,
 
        if (passdb->iface.lookup_credentials == NULL) {
                /* this passdb doesn't support credentials */
+               auth_request_log_debug(request, "password",
+                       "passdb doesn't support credential lookups");
                auth_request_lookup_credentials_callback(
                        PASSDB_RESULT_SCHEME_NOT_AVAILABLE, NULL, 0, request);
        } else if (passdb->blocking) {
index d4cb9aeb26852419eba57b3a71666a6c424cb31c..ea3067a16759a30ed4153b48455e316e3d7cfc55 100644 (file)
@@ -119,9 +119,6 @@ bool passdb_cache_lookup_credentials(struct auth_request *request,
        *password_r = *list[0] == '\0' ? NULL : list[0];
        *scheme_r = password_get_scheme(password_r);
        i_assert(*scheme_r != NULL || *password_r == NULL);
-
-       if (*password_r == NULL)
-               *result_r = PASSDB_RESULT_SCHEME_NOT_AVAILABLE;
        return TRUE;
 }
 
index 898c8b38aaa1252486b4a7366703c30796167d53..f67762ca52be82c3f0f011eb762b2d92eafc7668 100644 (file)
@@ -123,10 +123,15 @@ void passdb_handle_credentials(enum passdb_result result,
                return;
        }
 
-       if (password == NULL ||
-           !passdb_get_credentials(auth_request, password, scheme,
-                                   &credentials, &size))
+       if (password == NULL) {
+               auth_request_log_info(auth_request, "password",
+                       "Requested %s scheme, but we have a NULL password",
+                       auth_request->credentials_scheme);
                result = PASSDB_RESULT_SCHEME_NOT_AVAILABLE;
+       } else if (!passdb_get_credentials(auth_request, password, scheme,
+                                          &credentials, &size)) {
+               result = PASSDB_RESULT_SCHEME_NOT_AVAILABLE;
+       }
 
        callback(result, credentials, size, auth_request);
 }