]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
doveadm: Add open read-only parameter to mailbox iterator
authorAki Tuomi <aki.tuomi@dovecot.fi>
Tue, 15 Nov 2016 07:32:31 +0000 (09:32 +0200)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Tue, 15 Nov 2016 20:37:05 +0000 (22:37 +0200)
This allows iterating mailboxes so that they
are opened for read-only.

src/doveadm/doveadm-mail-altmove.c
src/doveadm/doveadm-mail-copymove.c
src/doveadm/doveadm-mail-deduplicate.c
src/doveadm/doveadm-mail-expunge.c
src/doveadm/doveadm-mail-fetch.c
src/doveadm/doveadm-mail-flags.c
src/doveadm/doveadm-mail-import.c
src/doveadm/doveadm-mail-iter.c
src/doveadm/doveadm-mail-iter.h
src/doveadm/doveadm-mail-search.c

index 1fd327bc1759c2413ab6e193c8a0da536d06f6e3..b55fe4accf97f1d9195f2bf8d61f80c497755ea9 100644 (file)
@@ -24,7 +24,7 @@ cmd_altmove_box(struct doveadm_mail_cmd_context *ctx,
        enum modify_type modify_type =
                !reverse ? MODIFY_ADD : MODIFY_REMOVE;
 
-       if (doveadm_mail_iter_init(ctx, info, search_args, 0, NULL,
+       if (doveadm_mail_iter_init(ctx, info, search_args, 0, NULL, FALSE,
                                   &iter) < 0)
                return -1;
 
index 7f6b58cae3c964f8a9563dcdc378c3fe40180dd6..c58e859d82e54f93138782449c0ba849df5cda51 100644 (file)
@@ -31,7 +31,7 @@ cmd_copy_box(struct copy_cmd_context *ctx, struct mailbox *destbox,
        struct mail *mail;
        int ret = 0;
 
-       if (doveadm_mail_iter_init(&ctx->ctx, info, ctx->ctx.search_args, 0,
+       if (doveadm_mail_iter_init(&ctx->ctx, info, ctx->ctx.search_args, 0, FALSE,
                                   NULL, &iter) < 0)
                return -1;
 
index dab7c3716a4dfbb9ace4db76b0206ac0f791dca6..7618a71432b6674bf17adbeb1cbf8ede16a2d0f4 100644 (file)
@@ -82,7 +82,7 @@ cmd_deduplicate_box(struct doveadm_mail_cmd_context *_ctx,
        struct uidlist *value;
        int ret = 0;
 
-       if (doveadm_mail_iter_init(_ctx, info, search_args, 0, NULL,
+       if (doveadm_mail_iter_init(_ctx, info, search_args, 0, NULL, FALSE,
                                   &iter) < 0)
                return -1;
 
index 3703739df7882e57e2a2f745a2328d066c4bd4f8..262f91b273039bc88ba2f2686df2e2a483a96467 100644 (file)
@@ -26,7 +26,7 @@ cmd_expunge_box(struct doveadm_mail_cmd_context *_ctx,
        enum mail_error error;
        int ret = 0;
 
-       if (doveadm_mail_iter_init(_ctx, info, search_args, 0, NULL,
+       if (doveadm_mail_iter_init(_ctx, info, search_args, 0, NULL, FALSE,
                                   &iter) < 0)
                return -1;
 
index bf64aed9083ce3b47eac260f353721f328992b7b..f545a2c42ce6c5dcc3008138987e8ea2c978900e 100644 (file)
@@ -605,7 +605,7 @@ cmd_fetch_box(struct fetch_cmd_context *ctx, const struct mailbox_info *info)
        int ret = 0;
 
        if (doveadm_mail_iter_init(&ctx->ctx, info, ctx->ctx.search_args,
-                                  ctx->wanted_fields,
+                                  ctx->wanted_fields, FALSE,
                                   array_idx(&ctx->header_fields, 0),
                                   &iter) < 0)
                return -1;
index 1df014dabf3dde7bbcffd5fc3cd181aaa4d8f42b..79bc664d01ad3983481b177723ab60a208b0848a 100644 (file)
@@ -25,7 +25,7 @@ cmd_flags_run_box(struct flags_cmd_context *ctx,
        struct mail *mail;
        struct mail_keywords *kw = NULL;
 
-       if (doveadm_mail_iter_init(&ctx->ctx, info, ctx->ctx.search_args,
+       if (doveadm_mail_iter_init(&ctx->ctx, info, ctx->ctx.search_args, FALSE,
                                   0, NULL, &iter) < 0)
                return -1;
        box = doveadm_mail_iter_get_mailbox(iter);
index fea597f13d2fe3d39855ef40ddbce4e1c3f590a1..2000f843174e48618189694c5aef27d1b1405dc7 100644 (file)
@@ -133,7 +133,7 @@ cmd_import_box(struct import_cmd_context *ctx, struct mail_user *dest_user,
        struct mail *mail;
        int ret = 0;
 
-       if (doveadm_mail_iter_init(&ctx->ctx, info, search_args, 0, NULL,
+       if (doveadm_mail_iter_init(&ctx->ctx, info, search_args, 0, NULL, FALSE,
                                   &iter) < 0)
                return -1;
 
index 1e34d083a43ad50efa350a00c0d3a2d3b223ed07..1f52a29dd118aef2cc435f15fcbf76d590b15549 100644 (file)
@@ -22,6 +22,7 @@ int doveadm_mail_iter_init(struct doveadm_mail_cmd_context *ctx,
                           struct mail_search_args *search_args,
                           enum mail_fetch_field wanted_fields,
                           const char *const *wanted_headers,
+                          bool readonly,
                           struct doveadm_mail_iter **iter_r)
 {
        struct doveadm_mail_iter *iter;
@@ -29,10 +30,13 @@ int doveadm_mail_iter_init(struct doveadm_mail_cmd_context *ctx,
        const char *errstr;
        enum mail_error error;
 
+       enum mailbox_flags readonly_flag =
+               readonly ? MAILBOX_FLAG_READONLY : 0;
+
        iter = i_new(struct doveadm_mail_iter, 1);
        iter->ctx = ctx;
        iter->box = mailbox_alloc(info->ns->list, info->vname,
-                                 MAILBOX_FLAG_IGNORE_ACLS);
+                                 MAILBOX_FLAG_IGNORE_ACLS | readonly_flag);
        iter->search_args = search_args;
 
        if (mailbox_sync(iter->box, MAILBOX_SYNC_FLAG_FULL_READ) < 0) {
index fa3378222ad1b8911b696551fdba35d99912bb6e..7217a68054297d71b8eb517f18712f8fc39c2ce9 100644 (file)
@@ -11,7 +11,8 @@ int doveadm_mail_iter_init(struct doveadm_mail_cmd_context *ctx,
                           struct mail_search_args *search_args,
                           enum mail_fetch_field wanted_fields,
                           const char *const *wanted_headers,
-                          struct doveadm_mail_iter **iter_r) ATTR_NULL(5);
+                          bool readonly,
+                          struct doveadm_mail_iter **iter_r) ATTR_NULL(6);
 int doveadm_mail_iter_deinit(struct doveadm_mail_iter **iter);
 int doveadm_mail_iter_deinit_sync(struct doveadm_mail_iter **iter);
 int doveadm_mail_iter_deinit_keep_box(struct doveadm_mail_iter **iter,
index fe5c6d2c0cf33185b0e1373bdd93d129c41a5e45..b68ff0a49cb9000c9002800b9f1af6ead0b8dea3 100644 (file)
@@ -20,7 +20,7 @@ cmd_search_box(struct doveadm_mail_cmd_context *ctx,
        const char *guid_str;
        int ret = 0;
 
-       if (doveadm_mail_iter_init(ctx, info, ctx->search_args, 0, NULL,
+       if (doveadm_mail_iter_init(ctx, info, ctx->search_args, 0, NULL, FALSE,
                                   &iter) < 0)
                return -1;
        box = doveadm_mail_iter_get_mailbox(iter);