]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
auth: Add and use passdb_set_cache_key() to set cache key
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Thu, 6 Nov 2025 13:16:18 +0000 (15:16 +0200)
committertimo.sirainen <timo.sirainen@open-xchange.com>
Thu, 13 Nov 2025 22:50:48 +0000 (22:50 +0000)
src/auth/passdb-bsdauth.c
src/auth/passdb-ldap.c
src/auth/passdb-pam.c
src/auth/passdb-passwd.c
src/auth/passdb-sql.c
src/auth/passdb.c
src/auth/passdb.h

index c2372b6a5621023be4341abb25343eb849860424..c70a0590da1372730687654272ff6ff312e26d02 100644 (file)
@@ -6,7 +6,6 @@
 #ifdef PASSDB_BSDAUTH
 
 #include "safe-memset.h"
-#include "auth-cache.h"
 #include "ipwd.h"
 #include "mycrypt.h"
 #include "settings.h"
@@ -102,13 +101,13 @@ bsdauth_preinit(pool_t pool, struct event *event,
                         SETTINGS_GET_FLAG_NO_EXPAND,
                         &post_set, error_r) < 0)
                return -1;
-       module->default_cache_key = !passdb_params->use_cache ? NULL :
-               auth_cache_parse_key_and_fields(pool, AUTH_CACHE_KEY_USER,
-                                               &post_set->fields, "bsdauth");
+       int ret = passdb_set_cache_key(module, passdb_params, pool,
+                                      AUTH_CACHE_KEY_USER, &post_set->fields,
+                                      "bsdauth", error_r);
 
        settings_free(post_set);
        *module_r = module;
-       return 0;
+       return ret;
 }
 
 static void bsdauth_deinit(struct passdb_module *module ATTR_UNUSED)
index a661552e124cc15abb886fd2582fe2cc264fb3ba..cda63231f2c40c65cd48e2528485919147b8c267 100644 (file)
@@ -9,7 +9,6 @@
 #include "array.h"
 #include "str.h"
 #include "password-scheme.h"
-#include "auth-cache.h"
 #include "settings.h"
 #include "auth-settings.h"
 #include "db-ldap.h"
@@ -465,15 +464,14 @@ passdb_ldap_preinit(pool_t pool, struct event *event,
                                    ldap_pre->passdb_ldap_bind ?
                                        "password" : NULL);
 
-       module->module.default_cache_key = !passdb_params->use_cache ? NULL :
-               auth_cache_parse_key_and_fields(pool,
-                       t_strconcat(ldap_pre->ldap_base,
-                                   ldap_pre->passdb_ldap_bind_userdn,
-                                   ldap_pre->passdb_ldap_filter, NULL),
-                       &auth_post->fields, NULL);
+       const char *query = t_strconcat(ldap_pre->ldap_base,
+                                       ldap_pre->passdb_ldap_bind_userdn,
+                                       ldap_pre->passdb_ldap_filter, NULL);
+       ret = passdb_set_cache_key(&module->module, passdb_params, pool,
+                                  query, &auth_post->fields,
+                                  NULL, error_r);
 
        *module_r = &module->module;
-       ret = 0;
 
 failed:
        settings_free(auth_post);
index 1dffd2abafd63b9cbff82a6758fc20e8c1718c58..a4fb7aebf176ae7a8868bff00bdfe55f83f9b792 100644 (file)
@@ -16,7 +16,6 @@
 #include "str.h"
 #include "net.h"
 #include "safe-memset.h"
-#include "auth-cache.h"
 #include "settings.h"
 
 #include <sys/stat.h>
@@ -415,11 +414,10 @@ pam_preinit(pool_t pool, struct event *event,
        }
 
        module = p_new(pool, struct pam_passdb_module, 1);
-       module->module.default_cache_key = !passdb_params->use_cache ? NULL :
-               auth_cache_parse_key_and_fields(pool,
-                                               t_strdup_printf("%"AUTH_CACHE_KEY_USER"\t%s",
-                                                               set->service_name),
-                                               &post_set->fields, "pam");
+       const char *query = t_strdup_printf("%"AUTH_CACHE_KEY_USER"\t%s",
+                                           set->service_name);
+       int ret = passdb_set_cache_key(&module->module, passdb_params, pool,
+                                      query, &post_set->fields, "pam", error_r);
        module->requests_left = set->max_requests;
        module->pam_setcred = set->setcred;
        module->pam_session = set->session;
@@ -429,7 +427,7 @@ pam_preinit(pool_t pool, struct event *event,
        settings_free(set);
 
        *module_r = &module->module;
-       return 0;
+       return ret;
 }
 
 struct passdb_module_interface passdb_pam = {
index 4d08de753bc06806a140ab343f9d21ad99f87f6b..71f5800cf8bef51caa1d352813fb7e4c9fbe8997 100644 (file)
@@ -1,7 +1,6 @@
 /* Copyright (c) 2002-2018 Dovecot authors, see the included COPYING file */
 
 #include "auth-common.h"
-#include "auth-cache.h"
 #include "passdb.h"
 #include "settings.h"
 
@@ -142,12 +141,13 @@ passwd_preinit(pool_t pool, struct event *event,
                         SETTINGS_GET_FLAG_NO_EXPAND,
                         &post_set, error_r) < 0)
                return -1;
-       module->default_cache_key = !passdb_params->use_cache ? NULL :
-               auth_cache_parse_key_and_fields(pool, AUTH_CACHE_KEY_USER,
-                                               &post_set->fields, "passwd");
+
+       int ret = passdb_set_cache_key(module, passdb_params, pool,
+                                      AUTH_CACHE_KEY_USER,
+                                      &post_set->fields, "passwd", error_r);
        settings_free(post_set);
        *module_r = module;
-       return 0;
+       return ret;
 }
 
 static void passwd_deinit(struct passdb_module *module ATTR_UNUSED)
index 1b31c0bd4063bb89ed3398098f941c7f235ad010..c47886003091898bb695fcfc138099093d2bb6d8 100644 (file)
@@ -9,7 +9,6 @@
 #include "settings.h"
 #include "settings-parser.h"
 #include "password-scheme.h"
-#include "auth-cache.h"
 #include "db-sql.h"
 
 #include <string.h>
@@ -305,14 +304,14 @@ passdb_sql_preinit(pool_t pool, struct event *event,
                return -1;
        }
 
-       module->module.default_cache_key = !passdb_params->use_cache ? NULL :
-               auth_cache_parse_key_and_fields(pool, set->query,
-                                               &post_set->fields, "sql");
+       int ret = passdb_set_cache_key(&module->module, passdb_params, pool,
+                                      set->query, &post_set->fields, "sql",
+                                      error_r);
        settings_free(set);
        settings_free(post_set);
 
        *module_r = &module->module;
-       return 0;
+       return ret;
 }
 
 static void passdb_sql_init(struct passdb_module *_module)
index af7fd43034f4fe6fcb26de1cd758eaed80907a7e..98feb5f1521ea2b4f26689c161625d796bde8d2e 100644 (file)
@@ -3,6 +3,7 @@
 #include "auth-common.h"
 #include "array.h"
 #include "password-scheme.h"
+#include "auth-cache.h"
 #include "auth-worker-connection.h"
 #include "passdb.h"
 
@@ -164,6 +165,21 @@ void passdb_handle_credentials(enum passdb_result result,
        callback(result, credentials, size, auth_request);
 }
 
+int passdb_set_cache_key(struct passdb_module *module,
+                        const struct passdb_parameters *passdb_params,
+                        pool_t pool, const char *query,
+                        const ARRAY_TYPE(const_string) *fields,
+                        const char *exclude_driver, const char **error_r ATTR_UNUSED)
+{
+       if (!passdb_params->use_cache)
+               return 0;
+
+       module->default_cache_key =
+               auth_cache_parse_key_and_fields(pool, query, fields,
+                                               exclude_driver);
+       return 0;
+}
+
 struct passdb_module *
 passdb_preinit(pool_t pool, struct event *event,
               const struct auth_passdb_settings *set, bool use_cache)
index ab3763608963a856d29d2f3954b18694be1a5338..1743a930275ba6f46f250498b883bf6ab3060113 100644 (file)
@@ -104,6 +104,12 @@ void passdb_handle_credentials(enum passdb_result result,
                               lookup_credentials_callback_t *callback,
                                struct auth_request *auth_request);
 
+int passdb_set_cache_key(struct passdb_module *module,
+                        const struct passdb_parameters *passdb_params,
+                        pool_t pool, const char *query,
+                        const ARRAY_TYPE(const_string) *fields,
+                        const char *exclude_driver, const char **error_r);
+
 struct passdb_module *
 passdb_preinit(pool_t pool, struct event *event,
               const struct auth_passdb_settings *set, bool use_cache);