Simplifies a later change.
}
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;
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);
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);
#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)
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;
}
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);
}
/* 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;