/* Copyright (c) 2010-2018 Dovecot authors, see the included COPYING file */
#include "lib.h"
+#include "ostream.h"
#include "mail-storage.h"
#include "mail-namespace.h"
#include "mail-search.h"
+#include "doveadm-print.h"
#include "doveadm-mail.h"
#include "doveadm-mail-iter.h"
struct doveadm_mail_iter {
struct doveadm_mail_cmd_context *ctx;
struct mail_search_args *search_args;
+ enum doveadm_mail_iter_flags flags;
struct mailbox *box;
struct mailbox_transaction_context *t;
iter = i_new(struct doveadm_mail_iter, 1);
iter->ctx = ctx;
+ iter->flags = flags;
iter->box = mailbox_alloc(info->ns->list, info->vname,
MAILBOX_FLAG_IGNORE_ACLS | readonly_flag);
iter->search_args = search_args;
iter->killed = TRUE;
return FALSE;
}
+ if ((iter->flags & DOVEADM_MAIL_ITER_FLAG_STOP_WITH_CLIENT) != 0 &&
+ doveadm_print_ostream->stream_errno != 0) {
+ iter->killed = TRUE;
+ return FALSE;
+ }
return mailbox_search_next(iter->search_ctx, mail_r);
}
enum doveadm_mail_iter_flags {
/* Open the mailbox with MAILBOX_FLAG_READONLY */
DOVEADM_MAIL_ITER_FLAG_READONLY = BIT(0),
+ /* Stop the iteration if client is detected to be disconnected. */
+ DOVEADM_MAIL_ITER_FLAG_STOP_WITH_CLIENT = BIT(1),
};
struct doveadm_mail_iter;