]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
plugins: acl - Refactor acl_lookup_dict_init()
authorAki Tuomi <aki.tuomi@open-xchange.com>
Thu, 30 Nov 2023 10:40:48 +0000 (12:40 +0200)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Wed, 12 Feb 2025 10:34:11 +0000 (12:34 +0200)
src/plugins/acl/acl-lookup-dict.c
src/plugins/acl/acl-lookup-dict.h
src/plugins/acl/acl-storage.c

index 49a496abf79f971d5f4fd9707cc49b47b39a70c2..13ea42e99717dc7539d73177bbbb9473ba85e917 100644 (file)
@@ -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)
index 03dd45e7f982143b8dc51d2884e20911fc9a47e1..3ed2da4c610dd722ce8edf29c8d48e286cb5a642 100644 (file)
@@ -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);
index eb84106a526f7938bf2c945ede35544b6e2326f0..b103530a9764702e6429629e49e52ef1591688c3 100644 (file)
@@ -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;