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 {
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)
{
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;
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;
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);
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;
}
if (iface->preinit != NULL) {
- struct userdb_parameters params;
- i_zero(¶ms);
+ struct userdb_parameters params = {
+ .use_cache = use_cache && set->use_cache,
+ };
if (iface->preinit(pool, event, ¶ms, &userdb, &error) < 0)
i_fatal("userdb %s: %s", set->name, error);
userdb->blocking = set->use_worker;
};
struct userdb_parameters {
+ /* Enable cache for the userdb */
+ bool use_cache;
};
struct userdb_module_interface {
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);