Mercurial > dovecot > core-2.2
annotate src/lib-storage/index/dbox-single/sdbox-storage.c @ 12545:9507a067233b
lib-storage: Moved mailbox.save_is_attachment() to mail_save_context.part_is_attachment()
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 06 Dec 2010 03:58:17 +0000 |
parents | dc3b59b71fca |
children | 2c299c0e3bc8 |
rev | line source |
---|---|
10582
615eef3139c2
Updated copyright notices to include year 2010.
Timo Sirainen <tss@iki.fi>
parents:
10410
diff
changeset
|
1 /* Copyright (c) 2007-2010 Dovecot authors, see the included COPYING file */ |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
3 #include "lib.h" |
11132
3d585e69aa95
dbox: Use flock() for file locking if possible. If not, require client_limit=1.
Timo Sirainen <tss@iki.fi>
parents:
11024
diff
changeset
|
4 #include "master-service.h" |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
5 #include "mail-index-modseq.h" |
12312
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
6 #include "mail-search-build.h" |
11476
3e51c846f293
Avoid including mailbox-list-private.h everywhere.
Timo Sirainen <tss@iki.fi>
parents:
11216
diff
changeset
|
7 #include "mailbox-list-private.h" |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
8 #include "dbox-mail.h" |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
9 #include "dbox-save.h" |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
10 #include "sdbox-file.h" |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
11 #include "sdbox-sync.h" |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
12 #include "sdbox-storage.h" |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
13 |
11820
76ee1fa16012
Renamed "dbox" to "sdbox". Keep also dbox as an alias for it.
Timo Sirainen <tss@iki.fi>
parents:
11707
diff
changeset
|
14 extern struct mail_storage dbox_storage, sdbox_storage; |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
15 extern struct mailbox sdbox_mailbox; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
16 extern struct dbox_storage_vfuncs sdbox_dbox_storage_vfuncs; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
17 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
18 static struct mail_storage *sdbox_storage_alloc(void) |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
19 { |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
20 struct sdbox_storage *storage; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
21 pool_t pool; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
22 |
11820
76ee1fa16012
Renamed "dbox" to "sdbox". Keep also dbox as an alias for it.
Timo Sirainen <tss@iki.fi>
parents:
11707
diff
changeset
|
23 pool = pool_alloconly_create("sdbox storage", 512+256); |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
24 storage = p_new(pool, struct sdbox_storage, 1); |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
25 storage->storage.v = sdbox_dbox_storage_vfuncs; |
12174
1070b54b9471
sdbox: Use "sdbox" name in the internal storage structure.
Timo Sirainen <tss@iki.fi>
parents:
11824
diff
changeset
|
26 storage->storage.storage = sdbox_storage; |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
27 storage->storage.storage.pool = pool; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
28 return &storage->storage.storage; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
29 } |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
30 |
10690
b7c8221cea5b
lib-storage: Removed input parameter from mailbox_alloc(), added mailbox_open_stream()
Timo Sirainen <tss@iki.fi>
parents:
10685
diff
changeset
|
31 static struct mailbox * |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
32 sdbox_mailbox_alloc(struct mail_storage *storage, struct mailbox_list *list, |
10690
b7c8221cea5b
lib-storage: Removed input parameter from mailbox_alloc(), added mailbox_open_stream()
Timo Sirainen <tss@iki.fi>
parents:
10685
diff
changeset
|
33 const char *name, enum mailbox_flags flags) |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
34 { |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
35 struct sdbox_mailbox *mbox; |
10660
56b1d4dd9c7d
lib-storage: *_mailboxes don't descend from index_mailbox anymore, it's now a context.
Timo Sirainen <tss@iki.fi>
parents:
10657
diff
changeset
|
36 struct index_mailbox_context *ibox; |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
37 pool_t pool; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
38 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
39 /* dbox can't work without index files */ |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
40 flags &= ~MAILBOX_FLAG_NO_INDEX_FILES; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
41 |
11820
76ee1fa16012
Renamed "dbox" to "sdbox". Keep also dbox as an alias for it.
Timo Sirainen <tss@iki.fi>
parents:
11707
diff
changeset
|
42 pool = pool_alloconly_create("sdbox mailbox", 1024*3); |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
43 mbox = p_new(pool, struct sdbox_mailbox, 1); |
10660
56b1d4dd9c7d
lib-storage: *_mailboxes don't descend from index_mailbox anymore, it's now a context.
Timo Sirainen <tss@iki.fi>
parents:
10657
diff
changeset
|
44 mbox->box = sdbox_mailbox; |
56b1d4dd9c7d
lib-storage: *_mailboxes don't descend from index_mailbox anymore, it's now a context.
Timo Sirainen <tss@iki.fi>
parents:
10657
diff
changeset
|
45 mbox->box.pool = pool; |
56b1d4dd9c7d
lib-storage: *_mailboxes don't descend from index_mailbox anymore, it's now a context.
Timo Sirainen <tss@iki.fi>
parents:
10657
diff
changeset
|
46 mbox->box.storage = storage; |
56b1d4dd9c7d
lib-storage: *_mailboxes don't descend from index_mailbox anymore, it's now a context.
Timo Sirainen <tss@iki.fi>
parents:
10657
diff
changeset
|
47 mbox->box.list = list; |
56b1d4dd9c7d
lib-storage: *_mailboxes don't descend from index_mailbox anymore, it's now a context.
Timo Sirainen <tss@iki.fi>
parents:
10657
diff
changeset
|
48 mbox->box.mail_vfuncs = &sdbox_mail_vfuncs; |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
49 |
10690
b7c8221cea5b
lib-storage: Removed input parameter from mailbox_alloc(), added mailbox_open_stream()
Timo Sirainen <tss@iki.fi>
parents:
10685
diff
changeset
|
50 index_storage_mailbox_alloc(&mbox->box, name, flags, DBOX_INDEX_PREFIX); |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
51 |
10660
56b1d4dd9c7d
lib-storage: *_mailboxes don't descend from index_mailbox anymore, it's now a context.
Timo Sirainen <tss@iki.fi>
parents:
10657
diff
changeset
|
52 ibox = INDEX_STORAGE_CONTEXT(&mbox->box); |
56b1d4dd9c7d
lib-storage: *_mailboxes don't descend from index_mailbox anymore, it's now a context.
Timo Sirainen <tss@iki.fi>
parents:
10657
diff
changeset
|
53 ibox->save_commit_pre = sdbox_transaction_save_commit_pre; |
56b1d4dd9c7d
lib-storage: *_mailboxes don't descend from index_mailbox anymore, it's now a context.
Timo Sirainen <tss@iki.fi>
parents:
10657
diff
changeset
|
54 ibox->save_commit_post = sdbox_transaction_save_commit_post; |
56b1d4dd9c7d
lib-storage: *_mailboxes don't descend from index_mailbox anymore, it's now a context.
Timo Sirainen <tss@iki.fi>
parents:
10657
diff
changeset
|
55 ibox->save_rollback = sdbox_transaction_save_rollback; |
56b1d4dd9c7d
lib-storage: *_mailboxes don't descend from index_mailbox anymore, it's now a context.
Timo Sirainen <tss@iki.fi>
parents:
10657
diff
changeset
|
56 ibox->index_flags |= MAIL_INDEX_OPEN_FLAG_KEEP_BACKUPS | |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
57 MAIL_INDEX_OPEN_FLAG_NEVER_IN_MEMORY; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
58 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
59 mbox->storage = (struct sdbox_storage *)storage; |
10660
56b1d4dd9c7d
lib-storage: *_mailboxes don't descend from index_mailbox anymore, it's now a context.
Timo Sirainen <tss@iki.fi>
parents:
10657
diff
changeset
|
60 return &mbox->box; |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
61 } |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
62 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
63 int sdbox_read_header(struct sdbox_mailbox *mbox, |
11024
d16bfa082e88
sdbox: Avoid logging multiple adjacent "Invalid dbox header size" errors.
Timo Sirainen <tss@iki.fi>
parents:
11023
diff
changeset
|
64 struct sdbox_index_header *hdr, bool log_error) |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
65 { |
11658
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
66 struct mail_index_view *view; |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
67 const void *data; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
68 size_t data_size; |
11658
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
69 int ret; |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
70 |
11658
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
71 view = mail_index_view_open(mbox->box.index); |
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
72 mail_index_get_header_ext(view, mbox->hdr_ext_id, |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
73 &data, &data_size); |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
74 if (data_size < SDBOX_INDEX_HEADER_MIN_SIZE && |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
75 (!mbox->creating || data_size != 0)) { |
11024
d16bfa082e88
sdbox: Avoid logging multiple adjacent "Invalid dbox header size" errors.
Timo Sirainen <tss@iki.fi>
parents:
11023
diff
changeset
|
76 if (log_error) { |
d16bfa082e88
sdbox: Avoid logging multiple adjacent "Invalid dbox header size" errors.
Timo Sirainen <tss@iki.fi>
parents:
11023
diff
changeset
|
77 mail_storage_set_critical( |
d16bfa082e88
sdbox: Avoid logging multiple adjacent "Invalid dbox header size" errors.
Timo Sirainen <tss@iki.fi>
parents:
11023
diff
changeset
|
78 &mbox->storage->storage.storage, |
11820
76ee1fa16012
Renamed "dbox" to "sdbox". Keep also dbox as an alias for it.
Timo Sirainen <tss@iki.fi>
parents:
11707
diff
changeset
|
79 "sdbox %s: Invalid dbox header size", |
12520
b26d6da05d48
lib-storage: Lazily look up mailbox path and permissions. Added functions to get them.
Timo Sirainen <tss@iki.fi>
parents:
12414
diff
changeset
|
80 mailbox_get_path(&mbox->box)); |
11024
d16bfa082e88
sdbox: Avoid logging multiple adjacent "Invalid dbox header size" errors.
Timo Sirainen <tss@iki.fi>
parents:
11023
diff
changeset
|
81 } |
11658
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
82 ret = -1; |
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
83 } else { |
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
84 memset(hdr, 0, sizeof(*hdr)); |
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
85 memcpy(hdr, data, I_MIN(data_size, sizeof(*hdr))); |
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
86 ret = 0; |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
87 } |
11658
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
88 mail_index_view_close(&view); |
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
89 return ret; |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
90 } |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
91 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
92 void sdbox_update_header(struct sdbox_mailbox *mbox, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
93 struct mail_index_transaction *trans, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
94 const struct mailbox_update *update) |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
95 { |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
96 struct sdbox_index_header hdr, new_hdr; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
97 |
11024
d16bfa082e88
sdbox: Avoid logging multiple adjacent "Invalid dbox header size" errors.
Timo Sirainen <tss@iki.fi>
parents:
11023
diff
changeset
|
98 if (sdbox_read_header(mbox, &hdr, TRUE) < 0) |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
99 memset(&hdr, 0, sizeof(hdr)); |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
100 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
101 new_hdr = hdr; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
102 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
103 if (update != NULL && !mail_guid_128_is_empty(update->mailbox_guid)) { |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
104 memcpy(new_hdr.mailbox_guid, update->mailbox_guid, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
105 sizeof(new_hdr.mailbox_guid)); |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
106 } else if (mail_guid_128_is_empty(new_hdr.mailbox_guid)) { |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
107 mail_generate_guid_128(new_hdr.mailbox_guid); |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
108 } |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
109 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
110 if (memcmp(&hdr, &new_hdr, sizeof(hdr)) != 0) { |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
111 mail_index_update_header_ext(trans, mbox->hdr_ext_id, 0, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
112 &new_hdr, sizeof(new_hdr)); |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
113 } |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
114 } |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
115 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
116 static int sdbox_write_index_header(struct mailbox *box, |
11484
7fc5db26f6eb
dbox, mdbox: Fixed race conditions when creating mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11476
diff
changeset
|
117 const struct mailbox_update *update, |
7fc5db26f6eb
dbox, mdbox: Fixed race conditions when creating mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11476
diff
changeset
|
118 struct mail_index_transaction *trans) |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
119 { |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
120 struct sdbox_mailbox *mbox = (struct sdbox_mailbox *)box; |
11484
7fc5db26f6eb
dbox, mdbox: Fixed race conditions when creating mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11476
diff
changeset
|
121 struct mail_index_transaction *new_trans = NULL; |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
122 const struct mail_index_header *hdr; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
123 uint32_t uid_validity, uid_next; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
124 |
11484
7fc5db26f6eb
dbox, mdbox: Fixed race conditions when creating mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11476
diff
changeset
|
125 if (trans == NULL) { |
7fc5db26f6eb
dbox, mdbox: Fixed race conditions when creating mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11476
diff
changeset
|
126 new_trans = mail_index_transaction_begin(box->view, 0); |
7fc5db26f6eb
dbox, mdbox: Fixed race conditions when creating mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11476
diff
changeset
|
127 trans = new_trans; |
7fc5db26f6eb
dbox, mdbox: Fixed race conditions when creating mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11476
diff
changeset
|
128 } |
7fc5db26f6eb
dbox, mdbox: Fixed race conditions when creating mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11476
diff
changeset
|
129 |
10657
e7f066508299
lib-storage: Moved struct mail_index_* from index_mailbox to mailbox.
Timo Sirainen <tss@iki.fi>
parents:
10656
diff
changeset
|
130 hdr = mail_index_get_header(box->view); |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
131 if (update != NULL && update->uid_validity != 0) |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
132 uid_validity = update->uid_validity; |
11023
46ede677961d
sdbox: mailbox_update() could have changed UIDVALIDITY incorrectly.
Timo Sirainen <tss@iki.fi>
parents:
10806
diff
changeset
|
133 else if (hdr->uid_validity != 0) |
46ede677961d
sdbox: mailbox_update() could have changed UIDVALIDITY incorrectly.
Timo Sirainen <tss@iki.fi>
parents:
10806
diff
changeset
|
134 uid_validity = hdr->uid_validity; |
46ede677961d
sdbox: mailbox_update() could have changed UIDVALIDITY incorrectly.
Timo Sirainen <tss@iki.fi>
parents:
10806
diff
changeset
|
135 else { |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
136 /* set uidvalidity */ |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
137 uid_validity = dbox_get_uidvalidity_next(box->list); |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
138 } |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
139 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
140 if (hdr->uid_validity != uid_validity) { |
10731
a3ec94b25456
mailbox_update(): Updating uid_validity requires also reseting index.
Timo Sirainen <tss@iki.fi>
parents:
10726
diff
changeset
|
141 if (hdr->uid_validity != 0) { |
a3ec94b25456
mailbox_update(): Updating uid_validity requires also reseting index.
Timo Sirainen <tss@iki.fi>
parents:
10726
diff
changeset
|
142 /* UIDVALIDITY change requires index to be reset */ |
a3ec94b25456
mailbox_update(): Updating uid_validity requires also reseting index.
Timo Sirainen <tss@iki.fi>
parents:
10726
diff
changeset
|
143 mail_index_reset(trans); |
a3ec94b25456
mailbox_update(): Updating uid_validity requires also reseting index.
Timo Sirainen <tss@iki.fi>
parents:
10726
diff
changeset
|
144 } |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
145 mail_index_update_header(trans, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
146 offsetof(struct mail_index_header, uid_validity), |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
147 &uid_validity, sizeof(uid_validity), TRUE); |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
148 } |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
149 if (update != NULL && hdr->next_uid < update->min_next_uid) { |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
150 uid_next = update->min_next_uid; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
151 mail_index_update_header(trans, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
152 offsetof(struct mail_index_header, next_uid), |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
153 &uid_next, sizeof(uid_next), TRUE); |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
154 } |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
155 if (update != NULL && update->min_highest_modseq != 0 && |
10657
e7f066508299
lib-storage: Moved struct mail_index_* from index_mailbox to mailbox.
Timo Sirainen <tss@iki.fi>
parents:
10656
diff
changeset
|
156 mail_index_modseq_get_highest(box->view) < |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
157 update->min_highest_modseq) { |
11707
3f9435c616e4
lib-storage: When mailbox_update() sets highest-modseq, make sure modseqs are enabled.
Timo Sirainen <tss@iki.fi>
parents:
11658
diff
changeset
|
158 mail_index_modseq_enable(box->index); |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
159 mail_index_update_highest_modseq(trans, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
160 update->min_highest_modseq); |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
161 } |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
162 |
10731
a3ec94b25456
mailbox_update(): Updating uid_validity requires also reseting index.
Timo Sirainen <tss@iki.fi>
parents:
10726
diff
changeset
|
163 sdbox_update_header(mbox, trans, update); |
11484
7fc5db26f6eb
dbox, mdbox: Fixed race conditions when creating mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11476
diff
changeset
|
164 if (new_trans != NULL) { |
7fc5db26f6eb
dbox, mdbox: Fixed race conditions when creating mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11476
diff
changeset
|
165 if (mail_index_transaction_commit(&new_trans) < 0) { |
7fc5db26f6eb
dbox, mdbox: Fixed race conditions when creating mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11476
diff
changeset
|
166 mail_storage_set_internal_error(box->storage); |
7fc5db26f6eb
dbox, mdbox: Fixed race conditions when creating mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11476
diff
changeset
|
167 mail_index_reset_error(box->index); |
7fc5db26f6eb
dbox, mdbox: Fixed race conditions when creating mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11476
diff
changeset
|
168 return -1; |
7fc5db26f6eb
dbox, mdbox: Fixed race conditions when creating mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11476
diff
changeset
|
169 } |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
170 } |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
171 return 0; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
172 } |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
173 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
174 static int sdbox_mailbox_create_indexes(struct mailbox *box, |
11484
7fc5db26f6eb
dbox, mdbox: Fixed race conditions when creating mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11476
diff
changeset
|
175 const struct mailbox_update *update, |
7fc5db26f6eb
dbox, mdbox: Fixed race conditions when creating mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11476
diff
changeset
|
176 struct mail_index_transaction *trans) |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
177 { |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
178 struct sdbox_mailbox *mbox = (struct sdbox_mailbox *)box; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
179 int ret; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
180 |
10652
bdb1ea37ccee
dbox: Moved more mailbox creation code to dbox-common.
Timo Sirainen <tss@iki.fi>
parents:
10582
diff
changeset
|
181 mbox->creating = TRUE; |
11484
7fc5db26f6eb
dbox, mdbox: Fixed race conditions when creating mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11476
diff
changeset
|
182 ret = sdbox_write_index_header(box, update, trans); |
10652
bdb1ea37ccee
dbox: Moved more mailbox creation code to dbox-common.
Timo Sirainen <tss@iki.fi>
parents:
10582
diff
changeset
|
183 mbox->creating = FALSE; |
bdb1ea37ccee
dbox: Moved more mailbox creation code to dbox-common.
Timo Sirainen <tss@iki.fi>
parents:
10582
diff
changeset
|
184 return ret; |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
185 } |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
186 |
12312
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
187 static const char * |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
188 sdbox_get_attachment_path_suffix(struct dbox_file *_file) |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
189 { |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
190 struct sdbox_file *file = (struct sdbox_file *)_file; |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
191 |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
192 return t_strdup_printf("-%s-%u", |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
193 mail_guid_128_to_string(file->mbox->mailbox_guid), |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
194 file->uid); |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
195 } |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
196 |
11658
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
197 static void sdbox_set_mailbox_corrupted(struct mailbox *box) |
11216
de0ed7bea201
mdbox: Avoid rebuilding storage if another process already did it.
Timo Sirainen <tss@iki.fi>
parents:
11132
diff
changeset
|
198 { |
11658
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
199 struct sdbox_mailbox *mbox = (struct sdbox_mailbox *)box; |
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
200 struct sdbox_index_header hdr; |
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
201 |
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
202 if (sdbox_read_header(mbox, &hdr, TRUE) < 0 || hdr.rebuild_count == 0) |
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
203 mbox->corrupted_rebuild_count = 1; |
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
204 else |
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
205 mbox->corrupted_rebuild_count = hdr.rebuild_count; |
11216
de0ed7bea201
mdbox: Avoid rebuilding storage if another process already did it.
Timo Sirainen <tss@iki.fi>
parents:
11132
diff
changeset
|
206 } |
de0ed7bea201
mdbox: Avoid rebuilding storage if another process already did it.
Timo Sirainen <tss@iki.fi>
parents:
11132
diff
changeset
|
207 |
11652
ad122febbf26
[m]dbox: If alt-dir exists for a mailbox while trying to create it, rebuild mailbox indexes.
Timo Sirainen <tss@iki.fi>
parents:
11634
diff
changeset
|
208 static void sdbox_set_file_corrupted(struct dbox_file *_file) |
ad122febbf26
[m]dbox: If alt-dir exists for a mailbox while trying to create it, rebuild mailbox indexes.
Timo Sirainen <tss@iki.fi>
parents:
11634
diff
changeset
|
209 { |
ad122febbf26
[m]dbox: If alt-dir exists for a mailbox while trying to create it, rebuild mailbox indexes.
Timo Sirainen <tss@iki.fi>
parents:
11634
diff
changeset
|
210 struct sdbox_file *file = (struct sdbox_file *)_file; |
ad122febbf26
[m]dbox: If alt-dir exists for a mailbox while trying to create it, rebuild mailbox indexes.
Timo Sirainen <tss@iki.fi>
parents:
11634
diff
changeset
|
211 |
ad122febbf26
[m]dbox: If alt-dir exists for a mailbox while trying to create it, rebuild mailbox indexes.
Timo Sirainen <tss@iki.fi>
parents:
11634
diff
changeset
|
212 sdbox_set_mailbox_corrupted(&file->mbox->box); |
ad122febbf26
[m]dbox: If alt-dir exists for a mailbox while trying to create it, rebuild mailbox indexes.
Timo Sirainen <tss@iki.fi>
parents:
11634
diff
changeset
|
213 } |
ad122febbf26
[m]dbox: If alt-dir exists for a mailbox while trying to create it, rebuild mailbox indexes.
Timo Sirainen <tss@iki.fi>
parents:
11634
diff
changeset
|
214 |
12312
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
215 static int sdbox_mailbox_open(struct mailbox *box) |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
216 { |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
217 struct sdbox_mailbox *mbox = (struct sdbox_mailbox *)box; |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
218 struct sdbox_index_header hdr; |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
219 |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
220 if (dbox_mailbox_open(box) < 0) |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
221 return -1; |
12521
b22766c1aa51
lib-storage: Don't allocate index until mailbox_open()
Timo Sirainen <tss@iki.fi>
parents:
12520
diff
changeset
|
222 mbox->hdr_ext_id = |
b22766c1aa51
lib-storage: Don't allocate index until mailbox_open()
Timo Sirainen <tss@iki.fi>
parents:
12520
diff
changeset
|
223 mail_index_ext_register(box->index, "dbox-hdr", |
b22766c1aa51
lib-storage: Don't allocate index until mailbox_open()
Timo Sirainen <tss@iki.fi>
parents:
12520
diff
changeset
|
224 sizeof(struct sdbox_index_header), 0, 0); |
12312
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
225 |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
226 /* get/generate mailbox guid */ |
12414
dbcbf6a46710
sdbox: Fixed race condition when one session opens a mailbox while another is still creating it.
Timo Sirainen <tss@iki.fi>
parents:
12312
diff
changeset
|
227 if (sdbox_read_header(mbox, &hdr, FALSE) < 0) { |
dbcbf6a46710
sdbox: Fixed race condition when one session opens a mailbox while another is still creating it.
Timo Sirainen <tss@iki.fi>
parents:
12312
diff
changeset
|
228 /* it's possible that this mailbox is just now being created |
dbcbf6a46710
sdbox: Fixed race condition when one session opens a mailbox while another is still creating it.
Timo Sirainen <tss@iki.fi>
parents:
12312
diff
changeset
|
229 by another process. lock it first and see if the header is |
dbcbf6a46710
sdbox: Fixed race condition when one session opens a mailbox while another is still creating it.
Timo Sirainen <tss@iki.fi>
parents:
12312
diff
changeset
|
230 available then. */ |
dbcbf6a46710
sdbox: Fixed race condition when one session opens a mailbox while another is still creating it.
Timo Sirainen <tss@iki.fi>
parents:
12312
diff
changeset
|
231 struct mail_index_sync_ctx *sync_ctx; |
dbcbf6a46710
sdbox: Fixed race condition when one session opens a mailbox while another is still creating it.
Timo Sirainen <tss@iki.fi>
parents:
12312
diff
changeset
|
232 struct mail_index_view *view; |
dbcbf6a46710
sdbox: Fixed race condition when one session opens a mailbox while another is still creating it.
Timo Sirainen <tss@iki.fi>
parents:
12312
diff
changeset
|
233 struct mail_index_transaction *trans; |
dbcbf6a46710
sdbox: Fixed race condition when one session opens a mailbox while another is still creating it.
Timo Sirainen <tss@iki.fi>
parents:
12312
diff
changeset
|
234 |
dbcbf6a46710
sdbox: Fixed race condition when one session opens a mailbox while another is still creating it.
Timo Sirainen <tss@iki.fi>
parents:
12312
diff
changeset
|
235 if (mail_index_sync_begin(box->index, &sync_ctx, |
dbcbf6a46710
sdbox: Fixed race condition when one session opens a mailbox while another is still creating it.
Timo Sirainen <tss@iki.fi>
parents:
12312
diff
changeset
|
236 &view, &trans, 0) > 0) |
dbcbf6a46710
sdbox: Fixed race condition when one session opens a mailbox while another is still creating it.
Timo Sirainen <tss@iki.fi>
parents:
12312
diff
changeset
|
237 (void)mail_index_sync_commit(&sync_ctx); |
dbcbf6a46710
sdbox: Fixed race condition when one session opens a mailbox while another is still creating it.
Timo Sirainen <tss@iki.fi>
parents:
12312
diff
changeset
|
238 |
dbcbf6a46710
sdbox: Fixed race condition when one session opens a mailbox while another is still creating it.
Timo Sirainen <tss@iki.fi>
parents:
12312
diff
changeset
|
239 if (sdbox_read_header(mbox, &hdr, TRUE) < 0) |
dbcbf6a46710
sdbox: Fixed race condition when one session opens a mailbox while another is still creating it.
Timo Sirainen <tss@iki.fi>
parents:
12312
diff
changeset
|
240 memset(&hdr, 0, sizeof(hdr)); |
dbcbf6a46710
sdbox: Fixed race condition when one session opens a mailbox while another is still creating it.
Timo Sirainen <tss@iki.fi>
parents:
12312
diff
changeset
|
241 } |
12312
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
242 |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
243 if (mail_guid_128_is_empty(hdr.mailbox_guid)) { |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
244 /* regenerate it */ |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
245 if (sdbox_write_index_header(box, NULL, NULL) < 0 || |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
246 sdbox_read_header(mbox, &hdr, TRUE) < 0) |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
247 return -1; |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
248 } |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
249 memcpy(mbox->mailbox_guid, hdr.mailbox_guid, |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
250 sizeof(mbox->mailbox_guid)); |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
251 return 0; |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
252 } |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
253 |
11658
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
254 static void sdbox_mailbox_close(struct mailbox *box) |
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
255 { |
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
256 struct sdbox_mailbox *mbox = (struct sdbox_mailbox *)box; |
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
257 |
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
258 if (mbox->corrupted_rebuild_count != 0) |
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
259 (void)sdbox_sync(mbox, 0); |
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
260 index_storage_mailbox_close(box); |
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
261 } |
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
262 |
12312
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
263 static int sdbox_mailbox_delete(struct mailbox *box) |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
264 { |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
265 struct sdbox_mailbox *mbox = (struct sdbox_mailbox *)box; |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
266 struct mail_search_context *ctx; |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
267 struct mailbox_transaction_context *t; |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
268 struct mail *mail; |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
269 struct mail_search_args *search_args; |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
270 struct dbox_file *file; |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
271 struct sdbox_file *sfile; |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
272 |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
273 if (!box->opened || mbox->storage->storage.attachment_dir == NULL) |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
274 return index_storage_mailbox_delete(box); |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
275 |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
276 /* mark the mailbox deleted to avoid race conditions */ |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
277 if (mailbox_mark_index_deleted(box, TRUE) < 0) |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
278 return -1; |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
279 |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
280 /* ulink all dbox mails and their attachements in the mailbox. */ |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
281 t = mailbox_transaction_begin(box, 0); |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
282 |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
283 search_args = mail_search_build_init(); |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
284 mail_search_build_add_all(search_args); |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
285 ctx = mailbox_search_init(t, search_args, NULL); |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
286 mail_search_args_unref(&search_args); |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
287 |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
288 mail = mail_alloc(t, 0, NULL); |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
289 while (mailbox_search_next(ctx, mail)) { |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
290 file = sdbox_file_init(mbox, mail->uid); |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
291 sfile = (struct sdbox_file *)file; |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
292 (void)sdbox_file_unlink_with_attachments(sfile); |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
293 dbox_file_unref(&file); |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
294 } |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
295 mail_free(&mail); |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
296 |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
297 if (mailbox_search_deinit(&ctx) < 0) { |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
298 /* maybe we missed some mails. oh well, can't help it. */ |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
299 } |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
300 mailbox_transaction_rollback(&t); |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
301 |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
302 return index_storage_mailbox_delete(box); |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
303 } |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
304 |
10685
3609c8a35c36
lib-storage: STATUS_GUID moved to mailbox_get_guid() that can fail.
Timo Sirainen <tss@iki.fi>
parents:
10676
diff
changeset
|
305 static int |
3609c8a35c36
lib-storage: STATUS_GUID moved to mailbox_get_guid() that can fail.
Timo Sirainen <tss@iki.fi>
parents:
10676
diff
changeset
|
306 sdbox_mailbox_get_guid(struct mailbox *box, uint8_t guid[MAIL_GUID_128_SIZE]) |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
307 { |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
308 struct sdbox_mailbox *mbox = (struct sdbox_mailbox *)box; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
309 |
12312
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
310 memcpy(guid, mbox->mailbox_guid, MAIL_GUID_128_SIZE); |
10685
3609c8a35c36
lib-storage: STATUS_GUID moved to mailbox_get_guid() that can fail.
Timo Sirainen <tss@iki.fi>
parents:
10676
diff
changeset
|
311 return 0; |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
312 } |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
313 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
314 static int |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
315 dbox_mailbox_update(struct mailbox *box, const struct mailbox_update *update) |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
316 { |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
317 if (!box->opened) { |
10660
56b1d4dd9c7d
lib-storage: *_mailboxes don't descend from index_mailbox anymore, it's now a context.
Timo Sirainen <tss@iki.fi>
parents:
10657
diff
changeset
|
318 if (index_storage_mailbox_open(box, FALSE) < 0) |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
319 return -1; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
320 } |
10806
c77e71e0c5bd
dbox: mailbox_update() ignored cache_fields.
Timo Sirainen <tss@iki.fi>
parents:
10731
diff
changeset
|
321 if (update->cache_fields != NULL) |
c77e71e0c5bd
dbox: mailbox_update() ignored cache_fields.
Timo Sirainen <tss@iki.fi>
parents:
10731
diff
changeset
|
322 index_storage_mailbox_update_cache_fields(box, update); |
11484
7fc5db26f6eb
dbox, mdbox: Fixed race conditions when creating mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11476
diff
changeset
|
323 return sdbox_write_index_header(box, update, NULL); |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
324 } |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
325 |
11820
76ee1fa16012
Renamed "dbox" to "sdbox". Keep also dbox as an alias for it.
Timo Sirainen <tss@iki.fi>
parents:
11707
diff
changeset
|
326 struct mail_storage sdbox_storage = { |
76ee1fa16012
Renamed "dbox" to "sdbox". Keep also dbox as an alias for it.
Timo Sirainen <tss@iki.fi>
parents:
11707
diff
changeset
|
327 .name = SDBOX_STORAGE_NAME, |
76ee1fa16012
Renamed "dbox" to "sdbox". Keep also dbox as an alias for it.
Timo Sirainen <tss@iki.fi>
parents:
11707
diff
changeset
|
328 .class_flags = 0, |
76ee1fa16012
Renamed "dbox" to "sdbox". Keep also dbox as an alias for it.
Timo Sirainen <tss@iki.fi>
parents:
11707
diff
changeset
|
329 |
76ee1fa16012
Renamed "dbox" to "sdbox". Keep also dbox as an alias for it.
Timo Sirainen <tss@iki.fi>
parents:
11707
diff
changeset
|
330 .v = { |
76ee1fa16012
Renamed "dbox" to "sdbox". Keep also dbox as an alias for it.
Timo Sirainen <tss@iki.fi>
parents:
11707
diff
changeset
|
331 NULL, |
76ee1fa16012
Renamed "dbox" to "sdbox". Keep also dbox as an alias for it.
Timo Sirainen <tss@iki.fi>
parents:
11707
diff
changeset
|
332 sdbox_storage_alloc, |
12312
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
333 dbox_storage_create, |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
334 dbox_storage_destroy, |
11820
76ee1fa16012
Renamed "dbox" to "sdbox". Keep also dbox as an alias for it.
Timo Sirainen <tss@iki.fi>
parents:
11707
diff
changeset
|
335 NULL, |
76ee1fa16012
Renamed "dbox" to "sdbox". Keep also dbox as an alias for it.
Timo Sirainen <tss@iki.fi>
parents:
11707
diff
changeset
|
336 dbox_storage_get_list_settings, |
76ee1fa16012
Renamed "dbox" to "sdbox". Keep also dbox as an alias for it.
Timo Sirainen <tss@iki.fi>
parents:
11707
diff
changeset
|
337 NULL, |
76ee1fa16012
Renamed "dbox" to "sdbox". Keep also dbox as an alias for it.
Timo Sirainen <tss@iki.fi>
parents:
11707
diff
changeset
|
338 sdbox_mailbox_alloc, |
76ee1fa16012
Renamed "dbox" to "sdbox". Keep also dbox as an alias for it.
Timo Sirainen <tss@iki.fi>
parents:
11707
diff
changeset
|
339 NULL |
76ee1fa16012
Renamed "dbox" to "sdbox". Keep also dbox as an alias for it.
Timo Sirainen <tss@iki.fi>
parents:
11707
diff
changeset
|
340 } |
76ee1fa16012
Renamed "dbox" to "sdbox". Keep also dbox as an alias for it.
Timo Sirainen <tss@iki.fi>
parents:
11707
diff
changeset
|
341 }; |
76ee1fa16012
Renamed "dbox" to "sdbox". Keep also dbox as an alias for it.
Timo Sirainen <tss@iki.fi>
parents:
11707
diff
changeset
|
342 |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
343 struct mail_storage dbox_storage = { |
11820
76ee1fa16012
Renamed "dbox" to "sdbox". Keep also dbox as an alias for it.
Timo Sirainen <tss@iki.fi>
parents:
11707
diff
changeset
|
344 .name = "dbox", /* alias */ |
10410
b757dab45756
Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents:
9977
diff
changeset
|
345 .class_flags = 0, |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
346 |
10410
b757dab45756
Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents:
9977
diff
changeset
|
347 .v = { |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
348 NULL, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
349 sdbox_storage_alloc, |
12312
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
350 dbox_storage_create, |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
351 dbox_storage_destroy, |
10715
be5590207f20
lib-storage: Changed mailbox_list.iter_is_mailbox() API.
Timo Sirainen <tss@iki.fi>
parents:
10711
diff
changeset
|
352 NULL, |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
353 dbox_storage_get_list_settings, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
354 NULL, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
355 sdbox_mailbox_alloc, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
356 NULL |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
357 } |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
358 }; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
359 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
360 struct mailbox sdbox_mailbox = { |
10410
b757dab45756
Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents:
9977
diff
changeset
|
361 .v = { |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
362 index_storage_is_readonly, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
363 index_storage_allow_new_keywords, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
364 index_storage_mailbox_enable, |
12312
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
365 sdbox_mailbox_open, |
11658
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
366 sdbox_mailbox_close, |
10719
debbf3f39e0c
lib-storage: Use a default non-NULL mailbox.free() so plugins don't have to check for it.
Timo Sirainen <tss@iki.fi>
parents:
10718
diff
changeset
|
367 index_storage_mailbox_free, |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
368 dbox_mailbox_create, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
369 dbox_mailbox_update, |
12312
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
370 sdbox_mailbox_delete, |
10711
292562f9b12c
lib-storage: Mailbox renaming API changed.
Timo Sirainen <tss@iki.fi>
parents:
10710
diff
changeset
|
371 index_storage_mailbox_rename, |
10685
3609c8a35c36
lib-storage: STATUS_GUID moved to mailbox_get_guid() that can fail.
Timo Sirainen <tss@iki.fi>
parents:
10676
diff
changeset
|
372 index_storage_get_status, |
3609c8a35c36
lib-storage: STATUS_GUID moved to mailbox_get_guid() that can fail.
Timo Sirainen <tss@iki.fi>
parents:
10676
diff
changeset
|
373 sdbox_mailbox_get_guid, |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
374 NULL, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
375 NULL, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
376 sdbox_storage_sync_init, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
377 index_mailbox_sync_next, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
378 index_mailbox_sync_deinit, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
379 NULL, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
380 dbox_notify_changes, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
381 index_transaction_begin, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
382 index_transaction_commit, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
383 index_transaction_rollback, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
384 NULL, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
385 dbox_mail_alloc, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
386 index_storage_search_init, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
387 index_storage_search_deinit, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
388 index_storage_search_next_nonblock, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
389 index_storage_search_next_update_seq, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
390 sdbox_save_alloc, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
391 sdbox_save_begin, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
392 dbox_save_continue, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
393 sdbox_save_finish, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
394 sdbox_save_cancel, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
395 sdbox_copy, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
396 index_storage_is_inconsistent |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
397 } |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
398 }; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
399 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
400 struct dbox_storage_vfuncs sdbox_dbox_storage_vfuncs = { |
12312
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
401 sdbox_file_free, |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
402 sdbox_file_create_fd, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
403 sdbox_mail_open, |
11216
de0ed7bea201
mdbox: Avoid rebuilding storage if another process already did it.
Timo Sirainen <tss@iki.fi>
parents:
11132
diff
changeset
|
404 sdbox_mailbox_create_indexes, |
12312
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
405 sdbox_get_attachment_path_suffix, |
11652
ad122febbf26
[m]dbox: If alt-dir exists for a mailbox while trying to create it, rebuild mailbox indexes.
Timo Sirainen <tss@iki.fi>
parents:
11634
diff
changeset
|
406 sdbox_set_mailbox_corrupted, |
11216
de0ed7bea201
mdbox: Avoid rebuilding storage if another process already did it.
Timo Sirainen <tss@iki.fi>
parents:
11132
diff
changeset
|
407 sdbox_set_file_corrupted |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
408 }; |