From: Aki Tuomi Date: Thu, 23 Nov 2023 10:53:56 +0000 (+0200) Subject: plugins: acl - Provide groups to acl_lookup_dict_iterate_visible_init() directly X-Git-Tag: 2.4.1~1164 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a1df60257f05fde0d78ca017c78f439478f5ff6b;p=thirdparty%2Fdovecot%2Fcore.git plugins: acl - Provide groups to acl_lookup_dict_iterate_visible_init() directly Simplifies a later change. --- diff --git a/src/plugins/acl/acl-lookup-dict.c b/src/plugins/acl/acl-lookup-dict.c index dfebe7cd3a..49a496abf7 100644 --- a/src/plugins/acl/acl-lookup-dict.c +++ b/src/plugins/acl/acl-lookup-dict.c @@ -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); diff --git a/src/plugins/acl/acl-lookup-dict.h b/src/plugins/acl/acl-lookup-dict.h index 856aaf4576..03dd45e7f9 100644 --- a/src/plugins/acl/acl-lookup-dict.h +++ b/src/plugins/acl/acl-lookup-dict.h @@ -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); diff --git a/src/plugins/acl/acl-shared-storage.c b/src/plugins/acl/acl-shared-storage.c index 16c33ef899..0d22b75a85 100644 --- a/src/plugins/acl/acl-shared-storage.c +++ b/src/plugins/acl/acl-shared-storage.c @@ -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); diff --git a/src/plugins/acl/doveadm-acl.c b/src/plugins/acl/doveadm-acl.c index 91bb70b982..25f6350485 100644 --- a/src/plugins/acl/doveadm-acl.c +++ b/src/plugins/acl/doveadm-acl.c @@ -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;