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;
va_end(args);
}
-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);
-}
-
+ 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);
+ }
+
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)
}
}
- "aborting index rebuild", mbox->box.path);
+ 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", mailbox_get_path(&mbox->box));
+ return -1;
+ }
+
mail_cache_reset(mbox->box.cache);
view = mail_index_view_open(mbox->box.index);
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))
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))
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);
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
*_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;
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);