annotate src/plugins/mbox-snarf/mbox-snarf-plugin.c @ 6430:47c3c4d41b26 HEAD

Copyright cleanup: 2007-2007 -> 2007
author Timo Sirainen <tss@iki.fi>
date Sun, 16 Sep 2007 14:36:14 +0300
parents 65c69a53a7be
children aeee5076f99f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6430
47c3c4d41b26 Copyright cleanup: 2007-2007 -> 2007
Timo Sirainen <tss@iki.fi>
parents: 6429
diff changeset
1 /* Copyright (c) 2007 Dovecot authors, see the included COPYING file */
5633
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3 #include "lib.h"
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
4 #include "array.h"
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
5 #include "home-expand.h"
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
6 #include "mail-search.h"
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
7 #include "mail-storage-private.h"
6249
2ebca5088938 Crashfixes
Timo Sirainen <tss@iki.fi>
parents: 5633
diff changeset
8 #include "mailbox-list-private.h"
5633
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
9 #include "mbox-snarf-plugin.h"
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
10
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
11 #include <stdlib.h>
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
12 #include <sys/stat.h>
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
13
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
14 #define MBOX_SNARF_CONTEXT(obj) \
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
15 MODULE_CONTEXT(obj, mbox_snarf_storage_module)
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
16
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
17 struct mbox_snarf_mail_storage {
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
18 union mail_storage_module_context module_ctx;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
19
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
20 const char *snarf_inbox_path;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
21 bool open_spool_inbox;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
22 };
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
23
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
24 struct mbox_snarf_mailbox {
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
25 union mailbox_module_context module_ctx;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
26
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
27 struct mailbox *spool_mbox;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
28 };
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
29
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
30 const char *mbox_snarf_plugin_version = PACKAGE_VERSION;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
31
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
32 static void (*mbox_snarf_next_hook_mail_storage_created)
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
33 (struct mail_storage *storage);
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
34
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
35 static MODULE_CONTEXT_DEFINE_INIT(mbox_snarf_storage_module,
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
36 &mail_storage_module_register);
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
37
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
38 static int sync_mailbox(struct mailbox *box)
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
39 {
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
40 struct mailbox_sync_context *ctx;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
41 struct mailbox_sync_rec sync_rec;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
42
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
43 ctx = mailbox_sync_init(box, MAILBOX_SYNC_FLAG_FULL_READ);
6279
f52e7d1402b5 mail_index_view_sync_next() and mailbox_sync_next() returns now bool.
Timo Sirainen <tss@iki.fi>
parents: 6249
diff changeset
44 while (mailbox_sync_next(ctx, &sync_rec))
5633
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
45 ;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
46 return mailbox_sync_deinit(&ctx, 0, NULL);
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
47 }
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
48
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
49 static int mbox_snarf(struct mailbox *srcbox, struct mailbox *destbox)
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
50 {
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
51 struct mail_search_arg search_arg;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
52 struct mail_search_context *search_ctx;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
53 struct mailbox_transaction_context *src_trans, *dest_trans;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
54 struct mail *mail;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
55 int ret;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
56
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
57 if (sync_mailbox(srcbox) < 0)
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
58 return -1;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
59
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
60 memset(&search_arg, 0, sizeof(search_arg));
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
61 search_arg.type = SEARCH_ALL;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
62
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
63 src_trans = mailbox_transaction_begin(srcbox, 0);
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
64 dest_trans = mailbox_transaction_begin(destbox,
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
65 MAILBOX_TRANSACTION_FLAG_EXTERNAL);
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
66 search_ctx = mailbox_search_init(src_trans, NULL, &search_arg, NULL);
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
67
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
68 mail = mail_alloc(src_trans, MAIL_FETCH_STREAM_HEADER |
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
69 MAIL_FETCH_STREAM_BODY, NULL);
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
70 while ((ret = mailbox_search_next(search_ctx, mail)) > 0) {
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
71 if (mail->expunged)
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
72 continue;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
73
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
74 if (mailbox_copy(dest_trans, mail, 0, NULL, NULL) < 0) {
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
75 if (!mail->expunged) {
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
76 ret = -1;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
77 break;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
78 }
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
79 }
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
80 mail_expunge(mail);
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
81 }
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
82 mail_free(&mail);
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
83
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
84 if (mailbox_search_deinit(&search_ctx) < 0)
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
85 ret = -1;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
86
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
87 /* commit the copied messages to the destination mailbox. if we crash
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
88 between that and between expunging the messages from the source
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
89 mailbox, we're left with duplicates. */
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
90 if (ret < 0)
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
91 mailbox_transaction_rollback(&dest_trans);
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
92 else if (mailbox_transaction_commit(&dest_trans, 0) < 0)
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
93 ret = -1;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
94
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
95 if (ret < 0)
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
96 mailbox_transaction_rollback(&src_trans);
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
97 else {
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
98 if (mailbox_transaction_commit(&src_trans, 0) < 0)
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
99 ret = -1;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
100 }
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
101 return ret;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
102 }
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
103
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
104 static struct mailbox_sync_context *
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
105 mbox_snarf_sync_init(struct mailbox *box, enum mailbox_sync_flags flags)
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
106 {
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
107 struct mbox_snarf_mail_storage *mstorage =
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
108 MBOX_SNARF_CONTEXT(box->storage);
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
109 struct mbox_snarf_mailbox *mbox = MBOX_SNARF_CONTEXT(box);
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
110
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
111 if (mbox->spool_mbox == NULL) {
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
112 /* try to open the spool mbox */
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
113 mstorage->open_spool_inbox = TRUE;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
114 mbox->spool_mbox =
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
115 mailbox_open(box->storage, "INBOX", NULL,
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
116 MAILBOX_OPEN_KEEP_RECENT |
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
117 MAILBOX_OPEN_NO_INDEX_FILES);
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
118 mstorage->open_spool_inbox = FALSE;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
119 }
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
120
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
121 if (mbox->spool_mbox != NULL)
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
122 mbox_snarf(mbox->spool_mbox, box);
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
123
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
124 return mbox->module_ctx.super.sync_init(box, flags);
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
125 }
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
126
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
127 static struct mailbox *
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
128 mbox_snarf_mailbox_open(struct mail_storage *storage, const char *name,
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
129 struct istream *input, enum mailbox_open_flags flags)
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
130 {
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
131 struct mbox_snarf_mail_storage *mstorage =
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
132 MBOX_SNARF_CONTEXT(storage);
6249
2ebca5088938 Crashfixes
Timo Sirainen <tss@iki.fi>
parents: 5633
diff changeset
133 struct mailbox_list *list;
5633
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
134 struct mailbox *box;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
135 struct mbox_snarf_mailbox *mbox;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
136 struct stat st;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
137 enum mail_storage_flags old_flags = storage->flags;
6249
2ebca5088938 Crashfixes
Timo Sirainen <tss@iki.fi>
parents: 5633
diff changeset
138 enum mailbox_list_flags old_list_flags;
5633
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
139 bool use_snarfing = FALSE;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
140
6249
2ebca5088938 Crashfixes
Timo Sirainen <tss@iki.fi>
parents: 5633
diff changeset
141 list = mail_storage_get_list(storage);
2ebca5088938 Crashfixes
Timo Sirainen <tss@iki.fi>
parents: 5633
diff changeset
142 old_list_flags = list->flags;
2ebca5088938 Crashfixes
Timo Sirainen <tss@iki.fi>
parents: 5633
diff changeset
143
5633
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
144 if (strcasecmp(name, "INBOX") == 0 && !mstorage->open_spool_inbox) {
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
145 if (stat(mstorage->snarf_inbox_path, &st) == 0) {
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
146 /* use ~/mbox as the INBOX */
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
147 name = mstorage->snarf_inbox_path;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
148 use_snarfing = TRUE;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
149 storage->flags |= MAIL_STORAGE_FLAG_FULL_FS_ACCESS;
6249
2ebca5088938 Crashfixes
Timo Sirainen <tss@iki.fi>
parents: 5633
diff changeset
150 list->flags |= MAILBOX_LIST_FLAG_FULL_FS_ACCESS;
5633
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
151 } else if (errno != ENOENT) {
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
152 mail_storage_set_critical(storage,
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
153 "stat(%s) failed: %m",
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
154 mstorage->snarf_inbox_path);
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
155 }
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
156 }
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
157
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
158 box = mstorage->module_ctx.super.
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
159 mailbox_open(storage, name, input, flags);
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
160 storage->flags = old_flags;
6249
2ebca5088938 Crashfixes
Timo Sirainen <tss@iki.fi>
parents: 5633
diff changeset
161 list->flags = old_list_flags;
5633
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
162
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
163 if (box == NULL || !use_snarfing)
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
164 return box;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
165
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
166 mbox = p_new(box->pool, struct mbox_snarf_mailbox, 1);
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
167 mbox->module_ctx.super = box->v;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
168
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
169 box->v.sync_init = mbox_snarf_sync_init;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
170 MODULE_CONTEXT_SET(box, mbox_snarf_storage_module, mbox);
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
171 return box;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
172 }
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
173
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
174 static void mbox_snarf_mail_storage_created(struct mail_storage *storage)
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
175 {
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
176 struct mbox_snarf_mail_storage *mstorage;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
177
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
178 if (mbox_snarf_next_hook_mail_storage_created != NULL)
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
179 mbox_snarf_next_hook_mail_storage_created(storage);
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
180
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
181 mstorage = p_new(storage->pool, struct mbox_snarf_mail_storage, 1);
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
182 mstorage->snarf_inbox_path =
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
183 p_strdup(storage->pool, home_expand(getenv("MBOX_SNARF")));
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
184 mstorage->module_ctx.super = storage->v;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
185 storage->v.mailbox_open = mbox_snarf_mailbox_open;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
186
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
187 MODULE_CONTEXT_SET(storage, mbox_snarf_storage_module, mstorage);
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
188 }
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
189
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
190 void mbox_snarf_plugin_init(void)
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
191 {
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
192 const char *path;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
193
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
194 path = getenv("MBOX_SNARF");
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
195 if (path != NULL) {
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
196 mbox_snarf_next_hook_mail_storage_created =
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
197 hook_mail_storage_created;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
198 hook_mail_storage_created = mbox_snarf_mail_storage_created;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
199 }
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
200 }
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
201
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
202 void mbox_snarf_plugin_deinit(void)
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
203 {
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
204 if (getenv("MBOX_SNARF") != NULL) {
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
205 hook_mail_storage_created =
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
206 mbox_snarf_next_hook_mail_storage_created;
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
207 }
fbb4bdbbf374 Added mbox snarf plugin to move mails from /var/spool/mail to ~/mbox if it
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
208 }