return NULL;
i_assert(list == ns->list);
- type = mail_storage_is_mailbox_file(storage) ||
- (storage->class_flags & MAIL_STORAGE_CLASS_FLAG_NO_ROOT) != 0 ?
- MAILBOX_LIST_PATH_TYPE_CONTROL : MAILBOX_LIST_PATH_TYPE_MAILBOX;
+ type = mail_storage_get_acl_list_path_type(storage);
if (name == NULL) {
if (!mailbox_list_get_root_path(list, type, &dir))
return NULL;
struct acl_backend_vfile *backend =
(struct acl_backend_vfile *)_backend;
struct acl_backend_vfile_validity *old_validity, new_validity;
+ struct mailbox_list *list;
+ struct mail_storage *storage;
const char *path, *local_path, *global_path, *dir, *vname = "";
const char *error;
int ret;
/* See if the mailbox exists. If we wanted recursive lookups we could
skip this, but at least for now we assume that if an existing
mailbox has no ACL it's equivalent to default ACLs. */
- if (mailbox_list_get_path(_backend->list, name,
- MAILBOX_LIST_PATH_TYPE_MAILBOX, &path) <= 0)
+ vname = *name == '\0' ? "" :
+ mailbox_list_get_vname(_backend->list, name);
+ list = _backend->list;
+ if (mailbox_list_get_storage(&list, vname, &storage) < 0)
+ ret = -1;
+ else if (mailbox_list_get_path(_backend->list, name,
+ mail_storage_get_acl_list_path_type(storage),
+ &path) <= 0)
ret = -1;
else {
ret = acl_backend_vfile_exists(backend, path,
if (ret == 0 &&
(*name == '\0' ||
mailbox_list_is_valid_name(_backend->list, name, &error))) {
- vname = *name == '\0' ? "" :
- mailbox_list_get_vname(_backend->list, name);
dir = acl_backend_vfile_get_local_dir(_backend, name, vname);
if (dir != NULL) {
local_path = t_strconcat(dir, "/", name, NULL);
#define ACL_BACKEND_VFILE_H
#include "acl-api-private.h"
+#include "mail-storage-private.h"
#define ACL_FILENAME "dovecot-acl"
#define ACLLIST_FILENAME "dovecot-acl-list"
int acl_backend_vfile_object_get_mtime(struct acl_object *aclobj,
time_t *mtime_r);
+static inline enum mailbox_list_path_type
+mail_storage_get_acl_list_path_type(struct mail_storage *storage)
+{
+ if (mail_storage_is_mailbox_file(storage)) {
+ /* mailbox is a directory (e.g. mbox) */
+ return MAILBOX_LIST_PATH_TYPE_CONTROL;
+ }
+ if ((storage->class_flags & MAIL_STORAGE_CLASS_FLAG_NO_ROOT) != 0) {
+ /* there is no local mailbox directory */
+ return MAILBOX_LIST_PATH_TYPE_CONTROL;
+ }
+ return MAILBOX_LIST_PATH_TYPE_MAILBOX;
+}
+
#endif