]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
Merged changes from v2.0 tree.
authorTimo Sirainen <tss@iki.fi>
Tue, 22 Feb 2011 13:31:31 +0000 (15:31 +0200)
committerTimo Sirainen <tss@iki.fi>
Tue, 22 Feb 2011 13:31:31 +0000 (15:31 +0200)
22 files changed:
1  2 
configure.in
src/doveadm/doveadm-mail-import.c
src/doveadm/doveadm-mail.c
src/dsync/dsync-worker-local.c
src/imap/imap-client.c
src/imap/imap-client.h
src/lda/main.c
src/lib-lda/mail-deliver.c
src/lib-storage/index/dbox-multi/mdbox-map.c
src/lib-storage/index/dbox-multi/mdbox-save.c
src/lib-storage/index/dbox-multi/mdbox-storage-rebuild.c
src/lib-storage/index/dbox-single/sdbox-save.c
src/lib-storage/index/dbox-single/sdbox-sync-rebuild.c
src/lib-storage/index/maildir/maildir-uidlist.c
src/lib-storage/list/mailbox-list-maildir.c
src/lib-storage/list/mailbox-list-none.c
src/lib-storage/mail-storage.c
src/lib-storage/mail-storage.h
src/lib-storage/mailbox-list.c
src/lmtp/client.c
src/lmtp/commands.c
src/plugins/virtual/virtual-save.c

diff --cc configure.in
Simple merge
Simple merge
Simple merge
index 6253d84a4c70cd75686bf76eb5f92730fad208b5,49379867d8d2bb85d80828ea921fd131ca77f888..d0539fc8f720a79f0cc9bd00806f65599ad6a7c6
@@@ -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;
Simple merge
Simple merge
diff --cc src/lda/main.c
Simple merge
index 820b98e0e9dcf045c64533e023e3bb9a2af914a1,ea0436a266ca44d84f6b65c0582c3805dee31502..74ee9d607a18bb4b6bceab0a0053485fa5dc6235
@@@ -116,6 -116,35 +116,25 @@@ void mail_deliver_log(struct mail_deliv
        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)
index d7531b3f5be54c4a9d575011892e07b4f490131b,ef924f7af65fe195adadc7c3a62c396e28db0720..a4d875583a2ea558f57f3364638cb05e1bd13ddc
@@@ -178,6 -177,13 +178,13 @@@ int sdbox_sync_index_rebuild(struct sdb
                }
        }
  
 -                      "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);
index 9d3c5609ba413a9bfb10de4f2e3d95f3aca42eca,11cc60eca98d21f2e5091ff62c8f2f02a89eb8ad..1efe567bbc8104c3c396fde8ee8e4527f21ebab1
@@@ -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))
        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);
index 6dc35c247f69063ed706e09eac8fe851f0b3def7,b34455101ef39b3909e5934b62f478061d9558c0..2645baa8376497cb69a8d23555a250f45986f206
@@@ -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
index ba1513b55da547d2a2fce97401c3a1e1a6b26c52,f8d67b2493e9566bf0c79dd9d8cd534a86d879e2..882f28a5f6737eb5cd09cec57c294c26af2cdefa
@@@ -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;
Simple merge
Simple merge
Simple merge
Simple merge
index 1b7da6e6f36b0747026e4c9d7f5650a0630a0806,49a90e2e248fc04ce9af66736cb512573331345f..94779ccd95b669db38e6c23939db4377762acaec
@@@ -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);