From: Aki Tuomi Date: Thu, 30 Nov 2023 10:40:48 +0000 (+0200) Subject: plugins: acl - Refactor acl_lookup_dict_init() X-Git-Tag: 2.4.1~1162 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0a2e174716e8e9a580cae800d16c1180202a447e;p=thirdparty%2Fdovecot%2Fcore.git plugins: acl - Refactor acl_lookup_dict_init() --- diff --git a/src/plugins/acl/acl-lookup-dict.c b/src/plugins/acl/acl-lookup-dict.c index 49a496abf7..13ea42e997 100644 --- a/src/plugins/acl/acl-lookup-dict.c +++ b/src/plugins/acl/acl-lookup-dict.c @@ -34,14 +34,17 @@ struct acl_lookup_dict_iter { 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: "); @@ -52,13 +55,13 @@ struct acl_lookup_dict *acl_lookup_dict_init(struct mail_user *user) 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) diff --git a/src/plugins/acl/acl-lookup-dict.h b/src/plugins/acl/acl-lookup-dict.h index 03dd45e7f9..3ed2da4c61 100644 --- a/src/plugins/acl/acl-lookup-dict.h +++ b/src/plugins/acl/acl-lookup-dict.h @@ -1,7 +1,10 @@ #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); diff --git a/src/plugins/acl/acl-storage.c b/src/plugins/acl/acl-storage.c index eb84106a52..b103530a97 100644 --- a/src/plugins/acl/acl-storage.c +++ b/src/plugins/acl/acl-storage.c @@ -28,12 +28,15 @@ static void acl_mail_user_create(struct mail_user *user, const char *env) { 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;