annotate src/plugins/mbox-snarf/mbox-snarf-plugin.c @ 7086:7ed926ed7aa4 HEAD

Updated copyright notices to include year 2008.
author Timo Sirainen <tss@iki.fi>
date Tue, 01 Jan 2008 22:05:21 +0200
parents 1a3604c8ee05
children 068f6eefc62b 077bb84e9e77
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7086
7ed926ed7aa4 Updated copyright notices to include year 2008.
Timo Sirainen <tss@iki.fi>
parents: 6512
diff changeset
1 /* Copyright (c) 2007-2008 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 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
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 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
41 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
42 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
43 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
44 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
45
6463
aeee5076f99f Use mailbox_sync() instead of our own implementation.
Timo Sirainen <tss@iki.fi>
parents: 6430
diff changeset
46 if (mailbox_sync(srcbox, MAILBOX_SYNC_FLAG_FULL_READ, 0, NULL) < 0)
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
47 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
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 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
50 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
51
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 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
53 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
54 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
55 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
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 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
58 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
59 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
60 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
61 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
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 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
64 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
65 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
66 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
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 }
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_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
70 }
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 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
72
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 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
74 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
75
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 /* 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
77 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
78 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
79 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
80 mailbox_transaction_rollback(&dest_trans);
6512
1a3604c8ee05 mailbox_transaction_commit*() doesn't sync the mailbox anymore, so it
Timo Sirainen <tss@iki.fi>
parents: 6463
diff changeset
81 else if (mailbox_transaction_commit(&dest_trans) < 0)
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
82 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
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 (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
85 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
86 else {
6512
1a3604c8ee05 mailbox_transaction_commit*() doesn't sync the mailbox anymore, so it
Timo Sirainen <tss@iki.fi>
parents: 6463
diff changeset
87 if (mailbox_transaction_commit(&src_trans) < 0)
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
88 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
89 }
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 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
91 }
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
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 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
94 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
95 {
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 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
97 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
98 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
99
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 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
101 /* 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
102 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
103 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
104 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
105 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
106 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
107 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
108 }
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
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 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
111 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
112
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 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
114 }
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
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 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
117 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
118 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
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 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
121 MBOX_SNARF_CONTEXT(storage);
6249
2ebca5088938 Crashfixes
Timo Sirainen <tss@iki.fi>
parents: 5633
diff changeset
122 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
123 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
124 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
125 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
126 enum mail_storage_flags old_flags = storage->flags;
6249
2ebca5088938 Crashfixes
Timo Sirainen <tss@iki.fi>
parents: 5633
diff changeset
127 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
128 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
129
6249
2ebca5088938 Crashfixes
Timo Sirainen <tss@iki.fi>
parents: 5633
diff changeset
130 list = mail_storage_get_list(storage);
2ebca5088938 Crashfixes
Timo Sirainen <tss@iki.fi>
parents: 5633
diff changeset
131 old_list_flags = list->flags;
2ebca5088938 Crashfixes
Timo Sirainen <tss@iki.fi>
parents: 5633
diff changeset
132
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
133 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
134 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
135 /* 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
136 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
137 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
138 storage->flags |= MAIL_STORAGE_FLAG_FULL_FS_ACCESS;
6249
2ebca5088938 Crashfixes
Timo Sirainen <tss@iki.fi>
parents: 5633
diff changeset
139 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
140 } 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
141 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
142 "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
143 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
144 }
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 }
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
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 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
148 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
149 storage->flags = old_flags;
6249
2ebca5088938 Crashfixes
Timo Sirainen <tss@iki.fi>
parents: 5633
diff changeset
150 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
151
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 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
153 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
154
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 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
156 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
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->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
159 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
160 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
161 }
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 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
164 {
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 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
166
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 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
168 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
169
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 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
171 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
172 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
173 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
174 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
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 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
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
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 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
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 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
182
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 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
184 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
185 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
186 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
187 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
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
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 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
192 {
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 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
194 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
195 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
196 }
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 }