]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Add and use MAILBOX_LIST_PROP_NO_INTERNAL_NAMES
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Sat, 17 Feb 2018 20:25:20 +0000 (22:25 +0200)
committerAki Tuomi <aki.tuomi@dovecot.fi>
Thu, 1 Mar 2018 11:47:10 +0000 (13:47 +0200)
Use it to replace Maildir++ check to see if mailbox_list.is_internal_name()
is wanted to be used.

src/lib-storage/list/mailbox-list-maildir.c
src/lib-storage/mailbox-list.c
src/lib-storage/mailbox-list.h

index 907772898012af0bbb8fbbb441a93c111e1514e9..20e7e945f375b5dffadc57536c98febe1a7f61fb 100644 (file)
@@ -491,7 +491,8 @@ struct mailbox_list maildir_mailbox_list = {
        .name = MAILBOX_LIST_NAME_MAILDIRPLUSPLUS,
        .props = MAILBOX_LIST_PROP_NO_MAILDIR_NAME |
                MAILBOX_LIST_PROP_NO_ALT_DIR |
-               MAILBOX_LIST_PROP_NO_NOSELECT,
+               MAILBOX_LIST_PROP_NO_NOSELECT |
+               MAILBOX_LIST_PROP_NO_INTERNAL_NAMES,
        .mailbox_name_max_length = MAILBOX_LIST_NAME_MAX_LENGTH,
 
        .v = {
@@ -519,7 +520,8 @@ struct mailbox_list imapdir_mailbox_list = {
        .name = MAILBOX_LIST_NAME_IMAPDIR,
        .props = MAILBOX_LIST_PROP_NO_MAILDIR_NAME |
                MAILBOX_LIST_PROP_NO_ALT_DIR |
-               MAILBOX_LIST_PROP_NO_NOSELECT,
+               MAILBOX_LIST_PROP_NO_NOSELECT |
+               MAILBOX_LIST_PROP_NO_INTERNAL_NAMES,
        .mailbox_name_max_length = MAILBOX_LIST_NAME_MAX_LENGTH,
 
        .v = {
index c0121827dd7677d34fe04a01b60ae2cf22e88c37..e1a7ab2ef153212dfb6f430c93d7ad522d17d7a5 100644 (file)
@@ -1319,11 +1319,10 @@ mailbox_list_is_valid_fs_name(struct mailbox_list *list, const char *name,
 
           some mailbox formats have reserved directory names, such as
           Maildir's cur/new/tmp. if any of those would conflict with the
-          mailbox directory name, it's not valid. maildir++ is kludged here as
-          a special case because all of its mailbox dirs begin with "." */
+          mailbox directory name, it's not valid. */
        allow_internal_dirs = list->v.is_internal_name == NULL ||
                *list->set.maildir_name != '\0' ||
-               strcmp(list->name, MAILBOX_LIST_NAME_MAILDIRPLUSPLUS) == 0;
+               (list->props & MAILBOX_LIST_PROP_NO_INTERNAL_NAMES) != 0;
        T_BEGIN {
                const char *const *names;
 
index eff2e4de13cc9abc10645f6f5b74fa8b8982292f..ef476ae00c19ca6872aabb33ad9354e1c3b0730d 100644 (file)
@@ -29,6 +29,10 @@ enum mailbox_list_properties {
        MAILBOX_LIST_PROP_AUTOCREATE_DIRS       = 0x10,
        /* Explicitly disable mailbox list index */
        MAILBOX_LIST_PROP_NO_LIST_INDEX         = 0x20,
+       /* Disable checking mailbox_list.is_internal_name(). The layout is
+          implemented in a way that there aren't any such reserved internal
+          names. For example Maildir++ prefixes all mailboxes with "." */
+       MAILBOX_LIST_PROP_NO_INTERNAL_NAMES     = 0x40,
 };
 
 enum mailbox_list_flags {