for (dest = passdbs; *dest != NULL; dest = &(*dest)->next) ;
*dest = auth_passdb;
- auth_passdb->passdb = passdb_preinit(auth->pool, event, set);
+ auth_passdb->passdb = passdb_preinit(auth->pool, event, set,
+ auth->protocol_set->cache_size > 0);
if (auth_passdb->passdb->default_cache_key != NULL && set->use_cache) {
auth_passdb->cache_key = auth_passdb->passdb->default_cache_key;
} else {
static int
bsdauth_preinit(pool_t pool, struct event *event,
- const struct passdb_parameters *passdb_params ATTR_UNUSED,
+ const struct passdb_parameters *passdb_params,
struct passdb_module **module_r,
const char **error_r)
{
SETTINGS_GET_FLAG_NO_EXPAND,
&post_set, error_r) < 0)
return -1;
- module->default_cache_key = auth_cache_parse_key_and_fields(
- pool, AUTH_CACHE_KEY_USER, &post_set->fields, "bsdauth");
+ module->default_cache_key = !passdb_params->use_cache ? NULL :
+ auth_cache_parse_key_and_fields(pool, AUTH_CACHE_KEY_USER,
+ &post_set->fields, "bsdauth");
settings_free(post_set);
*module_r = module;
static int
passdb_ldap_preinit(pool_t pool, struct event *event,
- const struct passdb_parameters *passdb_params ATTR_UNUSED,
+ const struct passdb_parameters *passdb_params,
struct passdb_module **module_r,
const char **error_r)
{
ldap_pre->passdb_ldap_bind ?
"password" : NULL);
- module->module.default_cache_key = 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);
+ 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);
*module_r = &module->module;
ret = 0;
static int
pam_preinit(pool_t pool, struct event *event,
- const struct passdb_parameters *passdb_params ATTR_UNUSED,
+ const struct passdb_parameters *passdb_params,
struct passdb_module **module_r, const char **error_r)
{
const struct auth_pam_settings *set;
}
module = p_new(pool, struct pam_passdb_module, 1);
- module->module.default_cache_key =
+ 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),
static int
passwd_preinit(pool_t pool, struct event *event,
- const struct passdb_parameters *passdb_params ATTR_UNUSED,
+ const struct passdb_parameters *passdb_params,
struct passdb_module **module_r,
const char **error_r)
{
SETTINGS_GET_FLAG_NO_EXPAND,
&post_set, error_r) < 0)
return -1;
- module->default_cache_key = auth_cache_parse_key_and_fields(pool,
- AUTH_CACHE_KEY_USER,
- &post_set->fields,
- "passwd");
+ module->default_cache_key = !passdb_params->use_cache ? NULL :
+ auth_cache_parse_key_and_fields(pool, AUTH_CACHE_KEY_USER,
+ &post_set->fields, "passwd");
settings_free(post_set);
*module_r = module;
return 0;
static int
passdb_sql_preinit(pool_t pool, struct event *event,
- const struct passdb_parameters *passdb_params ATTR_UNUSED,
+ const struct passdb_parameters *passdb_params,
struct passdb_module **module_r, const char **error_r)
{
struct sql_passdb_module *module;
return -1;
}
- module->module.default_cache_key =
+ module->module.default_cache_key = !passdb_params->use_cache ? NULL :
auth_cache_parse_key_and_fields(pool, set->query,
&post_set->fields, "sql");
settings_free(set);
struct passdb_module *
passdb_preinit(pool_t pool, struct event *event,
- const struct auth_passdb_settings *set)
+ const struct auth_passdb_settings *set, bool use_cache)
{
static unsigned int auth_passdb_id = 0;
struct passdb_module_interface *iface;
}
if (iface->preinit != NULL) {
- struct passdb_parameters params;
- i_zero(¶ms);
+ struct passdb_parameters params = {
+ .use_cache = use_cache && set->use_cache,
+ };
if (iface->preinit(pool, event, ¶ms, &passdb, &error) < 0)
i_fatal("passdb %s: %s", set->name, error);
passdb->default_pass_scheme =
struct auth_request *request);
struct passdb_parameters {
+ /* Enable cache for the passdb */
+ bool use_cache;
};
struct passdb_module_interface {
struct passdb_module *
passdb_preinit(pool_t pool, struct event *event,
- const struct auth_passdb_settings *set);
+ const struct auth_passdb_settings *set, bool use_cache);
void passdb_init(struct passdb_module *passdb);
void passdb_deinit(struct passdb_module *passdb);
.master = FALSE,
};
struct event *event = event_create(NULL);
- mock_passdb_mod = passdb_preinit(mock_pool, event, &set);
+ mock_passdb_mod = passdb_preinit(mock_pool, event, &set, FALSE);
event_unref(&event);
passdb_init(mock_passdb_mod);
}