]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
plugins: acl - Provide groups to acl_lookup_dict_iterate_visible_init() directly
authorAki Tuomi <aki.tuomi@open-xchange.com>
Thu, 23 Nov 2023 10:53:56 +0000 (12:53 +0200)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Wed, 12 Feb 2025 10:34:11 +0000 (12:34 +0200)
Simplifies a later change.

src/plugins/acl/acl-lookup-dict.c
src/plugins/acl/acl-lookup-dict.h
src/plugins/acl/acl-shared-storage.c
src/plugins/acl/doveadm-acl.c

index dfebe7cd3adc365e7818113818f35ac52f78b4eb..49a496abf79f971d5f4fd9707cc49b47b39a70c2 100644 (file)
@@ -308,7 +308,8 @@ static void acl_lookup_dict_iterate_read(struct acl_lookup_dict_iter *iter)
 }
 
 struct acl_lookup_dict_iter *
-acl_lookup_dict_iterate_visible_init(struct acl_lookup_dict *dict)
+acl_lookup_dict_iterate_visible_init(struct acl_lookup_dict *dict,
+                                    const ARRAY_TYPE(const_string) *groups)
 {
        struct acl_user *auser = ACL_USER_CONTEXT(dict->user);
        struct acl_lookup_dict_iter *iter;
@@ -333,9 +334,9 @@ acl_lookup_dict_iterate_visible_init(struct acl_lookup_dict *dict)
                pool_alloconly_create("acl lookup dict iter values", 1024);
 
        /* get all groups we belong to */
-       if (array_is_created(&auser->set->acl_groups)) {
+       if (array_is_created(groups)) {
                const char *group;
-               array_foreach_elem(&auser->set->acl_groups, group) {
+               array_foreach_elem(groups, group) {
                        id = p_strconcat(pool, "group/", group,
                                         NULL);
                        array_push_back(&iter->iter_ids, &id);
index 856aaf45769a2e0ef288d2020eaf0c19386665c7..03dd45e7f982143b8dc51d2884e20911fc9a47e1 100644 (file)
@@ -9,7 +9,8 @@ bool acl_lookup_dict_is_enabled(struct acl_lookup_dict *dict);
 int acl_lookup_dict_rebuild(struct acl_lookup_dict *dict);
 
 struct acl_lookup_dict_iter *
-acl_lookup_dict_iterate_visible_init(struct acl_lookup_dict *dict);
+acl_lookup_dict_iterate_visible_init(struct acl_lookup_dict *dict,
+                                    const ARRAY_TYPE(const_string) *groups);
 const char *
 acl_lookup_dict_iterate_visible_next(struct acl_lookup_dict_iter *iter);
 int acl_lookup_dict_iterate_visible_deinit(struct acl_lookup_dict_iter **iter);
index 16c33ef8998d97e3fe1d1cca72664e89d3e4eabb..0d22b75a855faa63997144869ae258b9c7521336 100644 (file)
@@ -8,6 +8,7 @@
 #include "acl-plugin.h"
 #include "acl-lookup-dict.h"
 #include "acl-shared-storage.h"
+#include "acl-api-private.h"
 #include "index/shared/shared-storage.h"
 
 #define SHARED_NS_RETRY_SECS (60*60)
@@ -82,6 +83,7 @@ int acl_shared_namespaces_add(struct mail_namespace *ns)
        struct acl_user *auser = ACL_USER_CONTEXT(ns->user);
        struct acl_mailbox_list *alist = ACL_LIST_CONTEXT(ns->list);
        struct mail_storage *storage = mail_namespace_get_default_storage(ns);
+       struct acl_backend *backend = acl_mailbox_list_get_backend(ns->list);
        struct acl_lookup_dict_iter *iter;
        const char *name;
 
@@ -95,7 +97,8 @@ int acl_shared_namespaces_add(struct mail_namespace *ns)
        }
        alist->last_shared_add_check = ioloop_time;
 
-       iter = acl_lookup_dict_iterate_visible_init(auser->acl_lookup_dict);
+       iter = acl_lookup_dict_iterate_visible_init(auser->acl_lookup_dict,
+                                                   &backend->set->acl_groups);
        while ((name = acl_lookup_dict_iterate_visible_next(iter)) != NULL) {
                T_BEGIN {
                        acl_shared_namespace_add(ns, storage, name);
index 91bb70b982b1696721a5c6d47a93e180b8c3ea52..25f6350485e8d6807c412fcb12a6884379e3f52e 100644 (file)
@@ -480,7 +480,8 @@ static bool cmd_acl_debug_mailbox(struct mailbox *box, bool *retry_r)
        }
 
        /* shared namespace. see if it's in acl lookup dict */
-       diter = acl_lookup_dict_iterate_visible_init(auser->acl_lookup_dict);
+       diter = acl_lookup_dict_iterate_visible_init(auser->acl_lookup_dict,
+                                                    &backend->set->acl_groups);
        while ((name = acl_lookup_dict_iterate_visible_next(diter)) != NULL) {
                if (strcmp(name, ns->owner->username) == 0)
                        break;