From: Timo Sirainen Date: Tue, 22 Feb 2011 13:31:31 +0000 (+0200) Subject: Merged changes from v2.0 tree. X-Git-Tag: 2.1.alpha1~333 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=072f06b60d69fe9456c3fffe20e72a7d09f2825d;p=thirdparty%2Fdovecot%2Fcore.git Merged changes from v2.0 tree. --- 072f06b60d69fe9456c3fffe20e72a7d09f2825d diff --cc src/dsync/dsync-worker-local.c index 6253d84a4c,49379867d8..d0539fc8f7 --- a/src/dsync/dsync-worker-local.c +++ b/src/dsync/dsync-worker-local.c @@@ -1668,10 -1712,10 +1670,9 @@@ local_worker_msg_save(struct dsync_work mailbox_save_set_received_date(save_ctx, data->received_date, 0); if (mailbox_save_begin(&save_ctx, data->input) < 0) { - struct mail_storage *storage = mailbox_get_storage(dest_box); i_error("Can't save message to mailbox %s: %s", mailbox_get_vname(dest_box), - mail_storage_get_last_error(storage, NULL)); + mailbox_get_last_error(dest_box, NULL)); - mailbox_save_cancel(&save_ctx); dsync_worker_set_failure(_worker); callback(context); return; diff --cc src/lib-lda/mail-deliver.c index 820b98e0e9,ea0436a266..74ee9d607a --- a/src/lib-lda/mail-deliver.c +++ b/src/lib-lda/mail-deliver.c @@@ -116,6 -116,35 +116,25 @@@ void mail_deliver_log(struct mail_deliv va_end(args); } + struct mail_deliver_session *mail_deliver_session_init(void) + { + struct mail_deliver_session *session; + pool_t pool; + + pool = pool_alloconly_create("mail deliver session", 1024); + session = p_new(pool, struct mail_deliver_session, 1); + session->pool = pool; + return session; + } + + void mail_deliver_session_deinit(struct mail_deliver_session **_session) + { + struct mail_deliver_session *session = *_session; + + *_session = NULL; + pool_unref(&session->pool); + } + -static const char *mailbox_name_to_mutf7(const char *mailbox_utf8) -{ - string_t *str = t_str_new(128); - - if (imap_utf8_to_utf7(mailbox_utf8, str) < 0) - return mailbox_utf8; - else - return str_c(str); -} - int mail_deliver_save_open(struct mail_deliver_save_open_context *ctx, const char *name, struct mailbox **box_r, enum mail_error *error_r, const char **error_str_r) diff --cc src/lib-storage/index/dbox-single/sdbox-sync-rebuild.c index d7531b3f5b,ef924f7af6..a4d875583a --- a/src/lib-storage/index/dbox-single/sdbox-sync-rebuild.c +++ b/src/lib-storage/index/dbox-single/sdbox-sync-rebuild.c @@@ -178,6 -177,13 +178,13 @@@ int sdbox_sync_index_rebuild(struct sdb } } + if (dbox_sync_rebuild_verify_alt_storage(mbox->box.list) < 0) { + mail_storage_set_critical(mbox->box.storage, + "sdbox %s: Alt storage not mounted, " - "aborting index rebuild", mbox->box.path); ++ "aborting index rebuild", mailbox_get_path(&mbox->box)); + return -1; + } + mail_cache_reset(mbox->box.cache); view = mail_index_view_open(mbox->box.index); diff --cc src/lib-storage/list/mailbox-list-maildir.c index 9d3c5609ba,11cc60eca9..1efe567bbc --- a/src/lib-storage/list/mailbox-list-maildir.c +++ b/src/lib-storage/list/mailbox-list-maildir.c @@@ -129,21 -126,9 +129,11 @@@ static bool maildir_list_is_valid_commo return TRUE; } - static bool ATTR_NORETURN - maildir_is_valid_pattern(struct mailbox_list *list ATTR_UNUSED, - const char *pattern ATTR_UNUSED) - { - i_unreached(); - #ifndef ATTRS_DEFINED - return FALSE; - #endif - } - static bool -maildir_is_valid_existing_name(struct mailbox_list *list, const char *name) +maildir_is_valid_existing_name(struct mailbox_list *_list, const char *name) { + struct maildir_mailbox_list *list = + (struct maildir_mailbox_list *)_list; size_t len; if (!maildir_list_is_valid_common(list, name, &len)) @@@ -155,11 -140,18 +145,20 @@@ return maildir_list_is_valid_common_nonfs(name); } + static bool + maildir_is_valid_pattern(struct mailbox_list *list, const char *pattern) + { + /* maildir code itself doesn't care about this, but we may get here + from listing subscriptions to LAYOUT=fs namespace containing + entries for a subscriptions=no LAYOUT=maildir++ namespace */ + return maildir_is_valid_existing_name(list, pattern); + } + static bool -maildir_is_valid_create_name(struct mailbox_list *list, const char *name) +maildir_is_valid_create_name(struct mailbox_list *_list, const char *name) { + struct maildir_mailbox_list *list = + (struct maildir_mailbox_list *)_list; size_t len; if (!maildir_list_is_valid_common(list, name, &len)) @@@ -476,13 -491,14 +475,13 @@@ maildir_rename_children(struct mailbox_ pool = pool_alloconly_create("Maildir++ children list", 1024); i_array_init(&names_arr, 64); - str = t_str_new(256); - old_vname = t_strdup(mail_namespace_get_vname(oldlist->ns, str, oldname)); + old_vname = mailbox_list_get_vname(oldlist, oldname); - old_vnamelen = strlen(oldname); + old_vnamelen = strlen(old_vname); - str_truncate(str, 0); - new_vname = t_strdup(mail_namespace_get_vname(newlist->ns, str, newname)); + new_vname = mailbox_list_get_vname(newlist, newname); - pattern = t_strdup_printf("%s%c*", old_vname, oldlist->ns->sep); + old_ns_sep = mail_namespace_get_sep(oldlist->ns); + pattern = t_strdup_printf("%s%c*", old_vname, old_ns_sep); iter = mailbox_list_iter_init(oldlist, pattern, MAILBOX_LIST_ITER_RETURN_NO_FLAGS | MAILBOX_LIST_ITER_RAW_LIST); diff --cc src/lib-storage/list/mailbox-list-none.c index 6dc35c247f,b34455101e..2645baa837 --- a/src/lib-storage/list/mailbox-list-none.c +++ b/src/lib-storage/list/mailbox-list-none.c @@@ -123,18 -128,20 +129,23 @@@ none_list_rename_mailbox(struct mailbox static struct mailbox_list_iterate_context * none_list_iter_init(struct mailbox_list *list, - const char *const *patterns ATTR_UNUSED, + const char *const *patterns, enum mailbox_list_iter_flags flags) { - struct mailbox_list_iterate_context *ctx; + struct noop_list_iterate_context *ctx; - ctx = i_new(struct mailbox_list_iterate_context, 1); - ctx->list = list; - ctx->flags = flags; - ctx->glob = imap_match_init_multiple(default_pool, patterns, TRUE, - mail_namespace_get_sep(list->ns)); - array_create(&ctx->module_contexts, default_pool, sizeof(void *), 5); - return ctx; + ctx = i_new(struct noop_list_iterate_context, 1); + ctx->ctx.list = list; + ctx->ctx.flags = flags; ++ ctx->ctx.glob = imap_match_init_multiple(default_pool, patterns, TRUE, ++ mail_namespace_get_sep(list->ns)); ++ array_create(&ctx->ctx.module_contexts, default_pool, sizeof(void *), 5); + if ((list->ns->flags & NAMESPACE_FLAG_INBOX_USER) != 0) { + ctx->list_inbox = TRUE; + ctx->inbox_info.ns = list->ns; + ctx->inbox_info.name = "INBOX"; + } + return &ctx->ctx; } static int diff --cc src/lib-storage/mail-storage.c index ba1513b55d,f8d67b2493..882f28a5f6 --- a/src/lib-storage/mail-storage.c +++ b/src/lib-storage/mail-storage.c @@@ -1442,9 -1423,15 +1443,15 @@@ void mailbox_save_cancel(struct mail_sa *_ctx = NULL; ctx->transaction->box->v.save_cancel(ctx); if (keywords != NULL) - mailbox_keywords_unref(box, &keywords); + mailbox_keywords_unref(&keywords); } + struct mailbox_transaction_context * + mailbox_save_get_transaction(struct mail_save_context *ctx) + { + return ctx->transaction; + } + int mailbox_copy(struct mail_save_context **_ctx, struct mail *mail) { struct mail_save_context *ctx = *_ctx; diff --cc src/plugins/virtual/virtual-save.c index 1b7da6e6f3,49a90e2e24..94779ccd95 --- a/src/plugins/virtual/virtual-save.c +++ b/src/plugins/virtual/virtual-save.c @@@ -21,13 -21,16 +21,16 @@@ virtual_save_alloc(struct mailbox_trans struct mailbox_transaction_context *backend_trans; struct virtual_save_context *ctx; - if (_t->save_ctx != NULL) - return _t->save_ctx; - - ctx = i_new(struct virtual_save_context, 1); - ctx->ctx.transaction = &t->t; + if (_t->save_ctx == NULL) { + ctx = i_new(struct virtual_save_context, 1); - ctx->ctx.transaction = &t->ictx.mailbox_ctx; ++ ctx->ctx.transaction = &t->t; + _t->save_ctx = &ctx->ctx; + } else { + ctx = (struct virtual_save_context *)_t->save_ctx; + } if (mbox->save_bbox != NULL) { + i_assert(ctx->backend_save_ctx == NULL); backend_trans = virtual_transaction_get(_t, mbox->save_bbox->box); ctx->backend_save_ctx = mailbox_save_alloc(backend_trans);