]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
auth: Don't initialize cache key if caching is disabled for the userdb
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Thu, 6 Nov 2025 12:48:47 +0000 (14:48 +0200)
committertimo.sirainen <timo.sirainen@open-xchange.com>
Thu, 13 Nov 2025 22:50:48 +0000 (22:50 +0000)
src/auth/auth.c
src/auth/userdb-ldap.c
src/auth/userdb-sql.c
src/auth/userdb.c
src/auth/userdb.h

index e301e6a344f876f81954ce467a143a3ace65fb9b..3486b4c18e07c5ec038ed3eca0d1a6858fb31663 100644 (file)
@@ -187,7 +187,8 @@ auth_userdb_preinit(struct auth *auth, const struct auth_userdb_settings *_set)
        for (dest = &auth->userdbs; *dest != NULL; dest = &(*dest)->next) ;
        *dest = auth_userdb;
 
-       auth_userdb->userdb = userdb_preinit(auth->pool, event, set);
+       auth_userdb->userdb = userdb_preinit(auth->pool, event, set,
+                                            auth->protocol_set->cache_size > 0);
        if (auth_userdb->userdb->default_cache_key != NULL && set->use_cache) {
                auth_userdb->cache_key = auth_userdb->userdb->default_cache_key;
        } else {
index 3f0d3824a08e651ea61c985d2279dace3410e12b..7d6d2bc38accc8875936bc9a9476a3660c13344a 100644 (file)
@@ -314,7 +314,7 @@ static int userdb_ldap_iterate_deinit(struct userdb_iterate_context *_ctx)
 
 static int
 userdb_ldap_preinit(pool_t pool, struct event *event,
-                   const struct userdb_parameters *userdb_params ATTR_UNUSED,
+                   const struct userdb_parameters *userdb_params,
                    struct userdb_module **module_r,
                    const char **error_r ATTR_UNUSED)
 {
@@ -343,10 +343,11 @@ 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 = auth_cache_parse_key_and_fields(
-               pool, t_strconcat(ldap_pre->ldap_base,
-                                 ldap_pre->userdb_ldap_filter, NULL),
-               &auth_post->fields, 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);
 
        *module_r = &module->module;
        ret = 0;
index bbf5e0ddedc4abcea4dbddd3b10fbd9deb373b90..74972b4ecdfdb28ded00f70600da50dfb37f93a2 100644 (file)
@@ -292,7 +292,7 @@ static int userdb_sql_iterate_deinit(struct userdb_iterate_context *_ctx)
 
 static int
 userdb_sql_preinit(pool_t pool, struct event *event,
-                  const struct userdb_parameters *userdb_params ATTR_UNUSED,
+                  const struct userdb_parameters *userdb_params,
                   struct userdb_module **module_r, const char **error_r)
 {
        struct sql_userdb_module *module;
@@ -319,7 +319,7 @@ userdb_sql_preinit(pool_t pool, struct event *event,
                return -1;
        }
 
-       module->module.default_cache_key =
+       module->module.default_cache_key = !userdb_params->use_cache ? NULL :
                auth_cache_parse_key_and_fields(pool, set->query,
                                                &post_set->fields, "sql");
        settings_free(set);
index 09873d33c15d969dace96d1ce24abe3fd9614334..930f660f9f74c7feaa75e9dfa3abdc5d044bf4f6 100644 (file)
@@ -100,7 +100,7 @@ gid_t userdb_parse_gid(struct auth_request *request, const char *str)
 
 struct userdb_module *
 userdb_preinit(pool_t pool, struct event *event,
-              const struct auth_userdb_settings *set)
+              const struct auth_userdb_settings *set, bool use_cache)
 {
        static unsigned int auth_userdb_id = 0;
        struct userdb_module_interface *iface;
@@ -121,8 +121,9 @@ userdb_preinit(pool_t pool, struct event *event,
        }
 
        if (iface->preinit != NULL) {
-               struct userdb_parameters params;
-               i_zero(&params);
+               struct userdb_parameters params = {
+                       .use_cache = use_cache && set->use_cache,
+               };
                if (iface->preinit(pool, event, &params, &userdb, &error) < 0)
                        i_fatal("userdb %s: %s", set->name, error);
                userdb->blocking = set->use_worker;
index 96410f4af21c4f4415713234e420b25d93c41ed7..cb4226fcc92353a593b98a5b410f9d07ccfd2e43 100644 (file)
@@ -45,6 +45,8 @@ struct userdb_iterate_context {
 };
 
 struct userdb_parameters {
+       /* Enable cache for the userdb */
+       bool use_cache;
 };
 
 struct userdb_module_interface {
@@ -78,7 +80,7 @@ gid_t userdb_parse_gid(struct auth_request *request, const char *str)
 
 struct userdb_module *
 userdb_preinit(pool_t pool, struct event *event,
-              const struct auth_userdb_settings *set);
+              const struct auth_userdb_settings *set, bool use_cache);
 void userdb_init(struct userdb_module *userdb);
 void userdb_deinit(struct userdb_module *userdb);