dovecot-2.0: acl: If ACL file exists in mail root directory, use...
dovecot at dovecot.org
dovecot at dovecot.org
Fri Jul 23 23:08:59 EEST 2010
details: http://hg.dovecot.org/dovecot-2.0/rev/636d34f650c2
changeset: 11899:636d34f650c2
user: Timo Sirainen <tss at iki.fi>
date: Fri Jul 23 21:08:55 2010 +0100
description:
acl: If ACL file exists in mail root directory, use it as namespace's default ACLs.
diffstat:
src/plugins/acl/acl-backend-vfile.c | 26 +++++++++++++++++---------
1 files changed, 17 insertions(+), 9 deletions(-)
diffs (57 lines):
diff -r 3ef50adb7abf -r 636d34f650c2 src/plugins/acl/acl-backend-vfile.c
--- a/src/plugins/acl/acl-backend-vfile.c Fri Jul 23 20:47:29 2010 +0100
+++ b/src/plugins/acl/acl-backend-vfile.c Fri Jul 23 21:08:55 2010 +0100
@@ -127,7 +127,10 @@
acl_backend_vfile_get_local_dir(struct acl_backend *backend, const char *name)
{
struct mail_namespace *ns;
- const char *dir;
+ const char *dir, *inbox;
+
+ if (*name == '\0')
+ name = NULL;
ns = mailbox_list_get_namespace(backend->list);
if (mail_storage_is_mailbox_file(ns->storage)) {
@@ -137,6 +140,16 @@
dir = mailbox_list_get_path(ns->list, name,
MAILBOX_LIST_PATH_TYPE_MAILBOX);
}
+ if (name == NULL) {
+ /* verify that the directory isn't same as INBOX's directory.
+ this is mainly for Maildir. */
+ inbox = mailbox_list_get_path(ns->list, "INBOX",
+ MAILBOX_LIST_PATH_TYPE_MAILBOX);
+ if (strcmp(inbox, dir) == 0) {
+ /* can't have default ACLs with this setup */
+ return NULL;
+ }
+ }
return dir;
}
@@ -164,12 +177,7 @@
str_c(vname), NULL);
} T_END;
- if (*name == '\0') {
- /* the default ACL for mailbox list */
- dir = NULL;
- } else {
- dir = acl_backend_vfile_get_local_dir(_backend, name);
- }
+ dir = acl_backend_vfile_get_local_dir(_backend, name);
aclobj->local_path = dir == NULL ? NULL :
i_strconcat(dir, "/"ACL_FILENAME, NULL);
return &aclobj->aclobj;
@@ -238,8 +246,8 @@
ret = path == NULL ? 0 :
acl_backend_vfile_exists(backend, path,
&new_validity.mailbox_validity);
- if (ret == 0) {
- dir = acl_backend_vfile_get_local_dir(_backend, name);
+ if (ret == 0 &&
+ (dir = acl_backend_vfile_get_local_dir(_backend, name)) != NULL) {
local_path = t_strconcat(dir, "/", name, NULL);
ret = acl_backend_vfile_exists(backend, local_path,
&new_validity.local_validity);
More information about the dovecot-cvs
mailing list