bool failed:1;
};
-struct acl_lookup_dict *acl_lookup_dict_init(struct mail_user *user)
+int acl_lookup_dict_init(struct mail_user *user, struct acl_lookup_dict **dict_r,
+ const char **error_r)
{
struct acl_lookup_dict *dict;
- const char *uri, *error;
+ const char *uri;
dict = i_new(struct acl_lookup_dict, 1);
dict->user = user;
dict->event = event_create(user->event);
+ *dict_r = dict;
+
event_add_category(dict->event, &event_category_acl);
event_set_append_log_prefix(dict->event, "acl: ");
i_zero(&dict_set);
dict_set.base_dir = user->set->base_dir;
dict_set.event_parent = user->event;
- if (dict_init_legacy(uri, &dict_set, &dict->dict, &error) < 0)
- e_error(dict->event, "dict_init(%s) failed: %s", uri, error);
+ if (dict_init_legacy(uri, &dict_set, &dict->dict, error_r) < 0)
+ return -1;
} else {
e_debug(dict->event, "No acl_shared_dict setting - "
"shared mailbox listing is disabled");
}
- return dict;
+ return 0;
}
void acl_lookup_dict_deinit(struct acl_lookup_dict **_dict)
#ifndef ACL_LOOKUP_DICT_H
#define ACL_LOOKUP_DICT_H
-struct acl_lookup_dict *acl_lookup_dict_init(struct mail_user *user);
+struct acl_lookup_dict;
+
+int acl_lookup_dict_init(struct mail_user *user, struct acl_lookup_dict **dict_r,
+ const char **error_r);
void acl_lookup_dict_deinit(struct acl_lookup_dict **dict);
bool acl_lookup_dict_is_enabled(struct acl_lookup_dict *dict);
{
struct mail_user_vfuncs *v = user->vlast;
struct acl_user *auser;
+ const char *error;
auser = p_new(user->pool, struct acl_user, 1);
auser->module_ctx.super = *v;
user->vlast = &auser->module_ctx.super;
v->deinit = acl_user_deinit;
- auser->acl_lookup_dict = acl_lookup_dict_init(user);
+ if (acl_lookup_dict_init(user, &auser->acl_lookup_dict, &error) < 0) {
+ e_error(user->event, "acl: dict_init() failed: %s", error);
+ }
struct acl_settings *set = p_new(user->pool, struct acl_settings, 1);
auser->acl_env = env;