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