dovecot-2.0: doveadm altmove: Fixed assert-crashing
dovecot at dovecot.org
dovecot at dovecot.org
Wed Apr 28 22:25:35 EEST 2010
details: http://hg.dovecot.org/dovecot-2.0/rev/f986a5b1f500
changeset: 11204:f986a5b1f500
user: Timo Sirainen <tss at iki.fi>
date: Wed Apr 28 22:25:33 2010 +0300
description:
doveadm altmove: Fixed assert-crashing
diffstat:
src/doveadm/doveadm-mail-altmove.c | 10 +++++++---
src/doveadm/doveadm-mail-list-iter.c | 16 ++++------------
2 files changed, 11 insertions(+), 15 deletions(-)
diffs (101 lines):
diff -r f99720c01ba2 -r f986a5b1f500 src/doveadm/doveadm-mail-altmove.c
--- a/src/doveadm/doveadm-mail-altmove.c Wed Apr 28 22:08:03 2010 +0300
+++ b/src/doveadm/doveadm-mail-altmove.c Wed Apr 28 22:25:33 2010 +0300
@@ -77,6 +77,7 @@
{
const enum mailbox_list_iter_flags iter_flags =
MAILBOX_LIST_ITER_RAW_LIST |
+ MAILBOX_LIST_ITER_VIRTUAL_NAMES |
MAILBOX_LIST_ITER_NO_AUTO_INBOX |
MAILBOX_LIST_ITER_RETURN_NO_FLAGS;
struct mail_search_args *search_args;
@@ -85,6 +86,7 @@
struct mail_namespace *ns, *prev_ns = NULL;
struct mailbox *box;
ARRAY_DEFINE(purged_storages, struct mail_storage *);
+ const char *storage_name;
struct mail_storage *const *storages;
unsigned int i, count;
@@ -94,7 +96,7 @@
t_array_init(&purged_storages, 8);
iter = doveadm_mail_list_iter_init(user, search_args, iter_flags);
- while ((info = doveadm_mail_list_iter_next(iter)) != NULL) {
+ while ((info = doveadm_mail_list_iter_next(iter)) != NULL) T_BEGIN {
if (info->ns != prev_ns) {
if (prev_ns != NULL) {
ns_purge(prev_ns);
@@ -104,12 +106,14 @@
prev_ns = info->ns;
}
- box = mailbox_alloc(info->ns->list, info->name,
+ storage_name = mail_namespace_get_storage_name(info->ns,
+ info->name);
+ box = mailbox_alloc(info->ns->list, storage_name,
MAILBOX_FLAG_KEEP_RECENT |
MAILBOX_FLAG_IGNORE_ACLS);
(void)cmd_altmove_box(box, search_args);
mailbox_free(&box);
- }
+ } T_END;
doveadm_mail_list_iter_deinit(&iter);
/* make sure all private storages have been purged */
diff -r f99720c01ba2 -r f986a5b1f500 src/doveadm/doveadm-mail-list-iter.c
--- a/src/doveadm/doveadm-mail-list-iter.c Wed Apr 28 22:08:03 2010 +0300
+++ b/src/doveadm/doveadm-mail-list-iter.c Wed Apr 28 22:25:33 2010 +0300
@@ -13,7 +13,6 @@
enum mailbox_list_iter_flags iter_flags;
struct mailbox_list_iterate_context *iter;
- string_t *vname;
};
static void
@@ -52,6 +51,8 @@
struct doveadm_mail_list_iter *iter;
ARRAY_TYPE(const_string) patterns;
+ i_assert((iter_flags & MAILBOX_LIST_ITER_VIRTUAL_NAMES) != 0);
+
iter = i_new(struct doveadm_mail_list_iter, 1);
iter->search_args = search_args;
@@ -70,7 +71,6 @@
array_idx(&patterns, 0),
NAMESPACE_PRIVATE,
iter_flags);
- iter->vname = str_new(default_pool, 256);
return iter;
}
@@ -82,7 +82,6 @@
if (mailbox_list_iter_deinit(&iter->iter) < 0)
i_error("Listing mailboxes failed");
- str_free(&iter->vname);
i_free(iter);
}
@@ -90,17 +89,10 @@
doveadm_mail_list_iter_next(struct doveadm_mail_list_iter *iter)
{
const struct mailbox_info *info;
- const char *vname;
while ((info = mailbox_list_iter_next(iter->iter)) != NULL) {
- if ((iter->iter_flags & MAILBOX_LIST_ITER_VIRTUAL_NAMES) != 0)
- vname = info->name;
- else {
- vname = mail_namespace_get_vname(info->ns, iter->vname,
- info->name);
- }
- if (mail_search_args_match_mailbox(iter->search_args, vname,
- info->ns->sep))
+ if (mail_search_args_match_mailbox(iter->search_args,
+ info->name, info->ns->sep))
break;
}
return info;
More information about the dovecot-cvs
mailing list