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

index 5fe795b656fbfa4877fdef221eb1103c88560690..fbe3ed7f4c8a52346f46fc2a3b626f4104620366 100644 (file)
@@ -8,7 +8,6 @@
 #include "ioloop.h"
 #include "array.h"
 #include "str.h"
-#include "auth-cache.h"
 #include "settings.h"
 #include "auth-settings.h"
 #include "db-ldap.h"
@@ -346,14 +345,12 @@ userdb_ldap_preinit(pool_t pool, struct event *event,
        db_ldap_get_attribute_names(pool, &ldap_post->iterate_fields,
                                    &module->iterate_attributes, NULL, NULL);
 
-       module->module.default_cache_key = !userdb_params->use_cache ? NULL :
-               auth_cache_parse_key_and_fields(pool,
-                       t_strconcat(ldap_pre->ldap_base,
-                                   ldap_pre->userdb_ldap_filter, NULL),
-                       &auth_post->fields, NULL);
+       const char *query = t_strconcat(ldap_pre->ldap_base,
+                                       ldap_pre->userdb_ldap_filter, NULL);
+       ret = userdb_set_cache_key(&module->module, userdb_params, pool,
+                                  query, &auth_post->fields, NULL, error_r);
 
        *module_r = &module->module;
-       ret = 0;
 
 failed:
        settings_free(auth_post);
index 74972b4ecdfdb28ded00f70600da50dfb37f93a2..53bc35ea88f09742d36ceffaf8ab97d3c102f24e 100644 (file)
@@ -7,7 +7,6 @@
 
 #include "settings.h"
 #include "settings-parser.h"
-#include "auth-cache.h"
 #include "db-sql.h"
 
 #include <string.h>
@@ -319,13 +318,13 @@ userdb_sql_preinit(pool_t pool, struct event *event,
                return -1;
        }
 
-       module->module.default_cache_key = !userdb_params->use_cache ? NULL :
-               auth_cache_parse_key_and_fields(pool, set->query,
-                                               &post_set->fields, "sql");
+       int ret = userdb_set_cache_key(&module->module, userdb_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 userdb_sql_init(struct userdb_module *_module)
index 930f660f9f74c7feaa75e9dfa3abdc5d044bf4f6..9fd4148c90983d7aded3abfc402fde7e2c6c1f77 100644 (file)
@@ -3,6 +3,7 @@
 #include "auth-common.h"
 #include "array.h"
 #include "ipwd.h"
+#include "auth-cache.h"
 #include "auth-worker-connection.h"
 #include "userdb.h"
 
@@ -98,6 +99,21 @@ gid_t userdb_parse_gid(struct auth_request *request, const char *str)
        }
 }
 
+int userdb_set_cache_key(struct userdb_module *module,
+                        const struct userdb_parameters *userdb_params,
+                        pool_t pool, const char *query,
+                        const ARRAY_TYPE(const_string) *fields,
+                        const char *exclude_driver, const char **error_r ATTR_UNUSED)
+{
+       if (!userdb_params->use_cache)
+               return 0;
+
+       module->default_cache_key =
+               auth_cache_parse_key_and_fields(pool, query, fields,
+                                               exclude_driver);
+       return 0;
+}
+
 struct userdb_module *
 userdb_preinit(pool_t pool, struct event *event,
               const struct auth_userdb_settings *set, bool use_cache)
index cb4226fcc92353a593b98a5b410f9d07ccfd2e43..abd6970af293f7cb63ab2ffbdb8a6f8722325cb8 100644 (file)
@@ -78,6 +78,12 @@ uid_t userdb_parse_uid(struct auth_request *request, const char *str)
 gid_t userdb_parse_gid(struct auth_request *request, const char *str)
        ATTR_NULL(1);
 
+int userdb_set_cache_key(struct userdb_module *module,
+                        const struct userdb_parameters *userdb_params,
+                        pool_t pool, const char *query,
+                        const ARRAY_TYPE(const_string) *fields,
+                        const char *exclude_driver, const char **error_r);
+
 struct userdb_module *
 userdb_preinit(pool_t pool, struct event *event,
               const struct auth_userdb_settings *set, bool use_cache);