]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Replace KEEP-NOSELECT with mailbox_list_drop_noselect setting
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Thu, 26 Oct 2023 10:01:34 +0000 (13:01 +0300)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Wed, 12 Feb 2025 10:34:10 +0000 (12:34 +0200)
src/lib-storage/list/mailbox-list-delete.c
src/lib-storage/list/mailbox-list-fs.c
src/lib-storage/list/mailbox-list-index-backend.c
src/lib-storage/list/mailbox-list-iter-private.h
src/lib-storage/mail-storage-settings.c
src/lib-storage/mail-storage-settings.h
src/lib-storage/mailbox-list.c
src/lib-storage/mailbox-list.h

index e59ca09ea1f7e483ae482af4e8c3982035585b52..d62993345a4fbd1b36d8474534e0ebe4cf9d93b8 100644 (file)
@@ -278,7 +278,8 @@ void mailbox_list_delete_until_root(struct mailbox_list *list, const char *path,
        const char *root_dir, *p;
        size_t len;
 
-       if (list->set.iter_from_index_dir && list->set.keep_noselect &&
+       if (list->set.iter_from_index_dir &&
+           !list->mail_set->mailbox_list_drop_noselect &&
            mailbox_list_path_is_index(list, type)) {
                /* Don't auto-rmdir parent index directories with ITERINDEX.
                   Otherwise it'll get us into inconsistent state with a
index eb1bed5c23477654e1313a3750d70368c6d8a57b..2e1c0d1eb0107c7faf871d17ed3e0e0e1bd97b39 100644 (file)
@@ -273,7 +273,7 @@ static int fs_list_delete_mailbox(struct mailbox_list *list, const char *name)
        } else {
                ret = fs_list_delete_maildir(list, name);
        }
-       if (ret == 0 && !list->set.keep_noselect)
+       if (ret == 0 && list->mail_set->mailbox_list_drop_noselect)
                mailbox_list_delete_until_root(list, path, MAILBOX_LIST_PATH_TYPE_MAILBOX);
 
        i_assert(ret <= 0);
index 70f79ccef367a4a8ea674b4d15849b81a2d3f288..8618d91f77e2fd5fcdd904158e60889f927cdd59 100644 (file)
@@ -773,7 +773,7 @@ index_list_delete_mailbox(struct mailbox_list *_list, const char *name)
                if (index_list_delete_entry(list, name, TRUE) < 0)
                        return -1;
        }
-       if (!_list->set.keep_noselect && ret == 0)
+       if (_list->mail_set->mailbox_list_drop_noselect && ret == 0)
                (void)index_list_try_delete_nonexistent_parent(_list, name);
 
        return ret;
@@ -892,7 +892,7 @@ index_list_rename_mailbox(struct mailbox_list *_oldlist, const char *oldname,
 
        ret = mailbox_list_index_sync_end(&sync_ctx, TRUE);
 
-       if (!_oldlist->set.keep_noselect && ret == 0)
+       if (_oldlist->mail_set->mailbox_list_drop_noselect && ret == 0)
                (void)index_list_try_delete_nonexistent_parent(_oldlist, oldname);
 
        return ret;
index 3d8f430a23603fd1c3a271395384d1e28e9ffb76..42b7f74f42d5f9018b8b2860e973e1b4e3218c19 100644 (file)
@@ -34,7 +34,7 @@ mailbox_list_iter_try_delete_noselect(struct mailbox_list_iterate_context *ctx,
 {
        if ((info->flags & (MAILBOX_NOSELECT|MAILBOX_NOCHILDREN)) ==
            (MAILBOX_NOSELECT|MAILBOX_NOCHILDREN) &&
-           !ctx->list->set.keep_noselect) {
+           ctx->list->mail_set->mailbox_list_drop_noselect) {
                /* Try to rmdir() all \NoSelect mailbox leafs and
                   afterwards their parents. */
                mailbox_list_delete_mailbox_until_root(ctx->list, storage_name);
index fb7d063b6f0d47e7e6fa95df4dd12794bc449747..a04d60f00e490b000a9a0968a17a827ea9affed9 100644 (file)
@@ -76,6 +76,7 @@ static const struct setting_define mail_storage_setting_defines[] = {
        DEF(BOOL, mailbox_list_index),
        DEF(BOOL, mailbox_list_index_very_dirty_syncs),
        DEF(BOOL, mailbox_list_index_include_inbox),
+       DEF(BOOL_HIDDEN, mailbox_list_drop_noselect),
        DEF(BOOL_HIDDEN, mailbox_list_validate_fs_names),
        DEF(BOOL_HIDDEN, mail_full_filesystem_access),
        DEF(BOOL, maildir_stat_dirs),
@@ -137,6 +138,7 @@ const struct mail_storage_settings mail_storage_default_settings = {
        .mailbox_list_index = TRUE,
        .mailbox_list_index_very_dirty_syncs = FALSE,
        .mailbox_list_index_include_inbox = FALSE,
+       .mailbox_list_drop_noselect = TRUE,
        .mailbox_list_validate_fs_names = TRUE,
        .mail_full_filesystem_access = FALSE,
        .maildir_stat_dirs = FALSE,
index 91d6948be6b8880dfe660aff696c0009b0beaf7b..7e98f1d85622cd122e25c9ebd0a978462e7c7b08 100644 (file)
@@ -55,6 +55,7 @@ struct mail_storage_settings {
        bool mailbox_list_index;
        bool mailbox_list_index_very_dirty_syncs;
        bool mailbox_list_index_include_inbox;
+       bool mailbox_list_drop_noselect;
        bool mailbox_list_validate_fs_names;
        bool mail_full_filesystem_access;
        bool maildir_stat_dirs;
index 0aacf5b18e3a10ba6c460eed3264732b5d7bb2da..aecce65aedff110e70c5389a745ea5ad38d77ad6 100644 (file)
@@ -153,7 +153,7 @@ int mailbox_list_create(const char *driver, struct event *event,
        list->root_permissions.dir_create_mode = (mode_t)-1;
        list->root_permissions.file_create_gid = (gid_t)-1;
        list->changelog_timestamp = (time_t)-1;
-       if (!set->keep_noselect)
+       if (list->mail_set->mailbox_list_drop_noselect)
                list->props |= MAILBOX_LIST_PROP_NO_NOSELECT;
 
        /* copy settings */
@@ -190,7 +190,6 @@ int mailbox_list_create(const char *driver, struct event *event,
        list->set.index_control_use_maildir_name =
                set->index_control_use_maildir_name;
        list->set.iter_from_index_dir = set->iter_from_index_dir;
-       list->set.keep_noselect = set->keep_noselect;
 
        if (*set->mailbox_dir_name == '\0')
                list->set.mailbox_dir_name = "";
@@ -369,13 +368,6 @@ mailbox_list_settings_parse_full(struct mail_user *user, const char *data,
                } else if (strcmp(key, "ITERINDEX") == 0) {
                        set_r->iter_from_index_dir = TRUE;
                        continue;
-               } else if (strcmp(key, "KEEP-NOSELECT") == 0) {
-                       set_r->keep_noselect = TRUE;
-                       continue;
-               } else if (strcmp(key, "NO-NOSELECT") == 0) {
-                       /* retained only for backward compatibility */
-                       set_r->keep_noselect = FALSE;
-                       continue;
                } else {
                        *error_r = t_strdup_printf("Unknown setting: %s", key);
                        return -1;
index 1a2b2aafbfe888067b93ad69d951fda2def8650a..c1884d29180fe37c744c33fc3b3f82a9d626677c 100644 (file)
@@ -180,8 +180,6 @@ struct mailbox_list_settings {
           faster storage. This could perhaps be made the default at some point,
           but for now since it's less tested it's optional. */
        bool iter_from_index_dir:1;
-       /* Control creation and listing of \NoSelect mailboxes. */
-       bool keep_noselect:1;
 };
 
 struct mailbox_permissions {