Mercurial > dovecot > core-2.2
annotate src/lib-storage/index/dbox-single/sdbox-storage.c @ 12646:87f84a76fb1e
lib-storage: Return STATUS replies from mailbox list index only when it's fully up-to-date.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Wed, 09 Feb 2011 01:31:40 +0200 |
parents | a349c50cddaa |
children | baa0314ed610 |
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, |
12586
a2780b694b2d
lib-storage: mailbox_alloc() now takes a virtual mailbox name and other related API changes.
Timo Sirainen <tss@iki.fi>
parents:
12583
diff
changeset
|
33 const char *vname, 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 |
12586
a2780b694b2d
lib-storage: mailbox_alloc() now takes a virtual mailbox name and other related API changes.
Timo Sirainen <tss@iki.fi>
parents:
12583
diff
changeset
|
50 index_storage_mailbox_alloc(&mbox->box, vname, |
a2780b694b2d
lib-storage: mailbox_alloc() now takes a virtual mailbox name and other related API changes.
Timo Sirainen <tss@iki.fi>
parents:
12583
diff
changeset
|
51 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
|
52 |
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
|
53 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
|
54 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
|
55 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
|
56 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
|
57 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
|
58 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
|
59 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
60 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
|
61 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
|
62 } |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
63 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
64 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
|
65 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
|
66 { |
11658
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
67 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
|
68 const void *data; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
69 size_t data_size; |
11658
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
70 int ret; |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
71 |
11658
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
72 view = mail_index_view_open(mbox->box.index); |
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
73 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
|
74 &data, &data_size); |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
75 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
|
76 (!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
|
77 if (log_error) { |
d16bfa082e88
sdbox: Avoid logging multiple adjacent "Invalid dbox header size" errors.
Timo Sirainen <tss@iki.fi>
parents:
11023
diff
changeset
|
78 mail_storage_set_critical( |
d16bfa082e88
sdbox: Avoid logging multiple adjacent "Invalid dbox header size" errors.
Timo Sirainen <tss@iki.fi>
parents:
11023
diff
changeset
|
79 &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
|
80 "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
|
81 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
|
82 } |
11658
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
83 ret = -1; |
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
84 } else { |
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
85 memset(hdr, 0, sizeof(*hdr)); |
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
86 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
|
87 ret = 0; |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
88 } |
11658
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
89 mail_index_view_close(&view); |
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
90 return ret; |
9977
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 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
93 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
|
94 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
|
95 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
|
96 { |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
97 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
|
98 |
11024
d16bfa082e88
sdbox: Avoid logging multiple adjacent "Invalid dbox header size" errors.
Timo Sirainen <tss@iki.fi>
parents:
11023
diff
changeset
|
99 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
|
100 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
|
101 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
102 new_hdr = hdr; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
103 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
104 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
|
105 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
|
106 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
|
107 } 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
|
108 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
|
109 } |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
110 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
111 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
|
112 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
|
113 &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
|
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 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
117 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
|
118 const struct mailbox_update *update, |
7fc5db26f6eb
dbox, mdbox: Fixed race conditions when creating mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11476
diff
changeset
|
119 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
|
120 { |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
121 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
|
122 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
|
123 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
|
124 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
|
125 |
11484
7fc5db26f6eb
dbox, mdbox: Fixed race conditions when creating mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11476
diff
changeset
|
126 if (trans == NULL) { |
7fc5db26f6eb
dbox, mdbox: Fixed race conditions when creating mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11476
diff
changeset
|
127 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
|
128 trans = new_trans; |
7fc5db26f6eb
dbox, mdbox: Fixed race conditions when creating mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11476
diff
changeset
|
129 } |
7fc5db26f6eb
dbox, mdbox: Fixed race conditions when creating mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11476
diff
changeset
|
130 |
10657
e7f066508299
lib-storage: Moved struct mail_index_* from index_mailbox to mailbox.
Timo Sirainen <tss@iki.fi>
parents:
10656
diff
changeset
|
131 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
|
132 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
|
133 uid_validity = update->uid_validity; |
11023
46ede677961d
sdbox: mailbox_update() could have changed UIDVALIDITY incorrectly.
Timo Sirainen <tss@iki.fi>
parents:
10806
diff
changeset
|
134 else if (hdr->uid_validity != 0) |
46ede677961d
sdbox: mailbox_update() could have changed UIDVALIDITY incorrectly.
Timo Sirainen <tss@iki.fi>
parents:
10806
diff
changeset
|
135 uid_validity = hdr->uid_validity; |
46ede677961d
sdbox: mailbox_update() could have changed UIDVALIDITY incorrectly.
Timo Sirainen <tss@iki.fi>
parents:
10806
diff
changeset
|
136 else { |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
137 /* set uidvalidity */ |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
138 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
|
139 } |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
140 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
141 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
|
142 if (hdr->uid_validity != 0) { |
a3ec94b25456
mailbox_update(): Updating uid_validity requires also reseting index.
Timo Sirainen <tss@iki.fi>
parents:
10726
diff
changeset
|
143 /* 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
|
144 mail_index_reset(trans); |
a3ec94b25456
mailbox_update(): Updating uid_validity requires also reseting index.
Timo Sirainen <tss@iki.fi>
parents:
10726
diff
changeset
|
145 } |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
146 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
|
147 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
|
148 &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
|
149 } |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
150 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
|
151 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
|
152 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
|
153 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
|
154 &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
|
155 } |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
156 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
|
157 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
|
158 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
|
159 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
|
160 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
|
161 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
|
162 } |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
163 |
10731
a3ec94b25456
mailbox_update(): Updating uid_validity requires also reseting index.
Timo Sirainen <tss@iki.fi>
parents:
10726
diff
changeset
|
164 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
|
165 if (new_trans != NULL) { |
7fc5db26f6eb
dbox, mdbox: Fixed race conditions when creating mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11476
diff
changeset
|
166 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
|
167 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
|
168 mail_index_reset_error(box->index); |
7fc5db26f6eb
dbox, mdbox: Fixed race conditions when creating mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11476
diff
changeset
|
169 return -1; |
7fc5db26f6eb
dbox, mdbox: Fixed race conditions when creating mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11476
diff
changeset
|
170 } |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
171 } |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
172 return 0; |
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 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
175 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
|
176 const struct mailbox_update *update, |
7fc5db26f6eb
dbox, mdbox: Fixed race conditions when creating mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11476
diff
changeset
|
177 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
|
178 { |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
179 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
|
180 int ret; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
181 |
10652
bdb1ea37ccee
dbox: Moved more mailbox creation code to dbox-common.
Timo Sirainen <tss@iki.fi>
parents:
10582
diff
changeset
|
182 mbox->creating = TRUE; |
11484
7fc5db26f6eb
dbox, mdbox: Fixed race conditions when creating mailboxes.
Timo Sirainen <tss@iki.fi>
parents:
11476
diff
changeset
|
183 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
|
184 mbox->creating = FALSE; |
bdb1ea37ccee
dbox: Moved more mailbox creation code to dbox-common.
Timo Sirainen <tss@iki.fi>
parents:
10582
diff
changeset
|
185 return ret; |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
186 } |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
187 |
12312
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
188 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
|
189 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
|
190 { |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
191 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
|
192 |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
193 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
|
194 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
|
195 file->uid); |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
196 } |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
197 |
11658
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
198 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
|
199 { |
11658
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
200 struct sdbox_mailbox *mbox = (struct sdbox_mailbox *)box; |
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
201 struct sdbox_index_header hdr; |
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
202 |
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
203 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
|
204 mbox->corrupted_rebuild_count = 1; |
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
205 else |
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
206 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
|
207 } |
de0ed7bea201
mdbox: Avoid rebuilding storage if another process already did it.
Timo Sirainen <tss@iki.fi>
parents:
11132
diff
changeset
|
208 |
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
|
209 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
|
210 { |
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 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
|
212 |
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 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
|
214 } |
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
|
215 |
12312
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
216 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
|
217 { |
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_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
|
219 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
|
220 |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
221 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
|
222 return -1; |
12521
b22766c1aa51
lib-storage: Don't allocate index until mailbox_open()
Timo Sirainen <tss@iki.fi>
parents:
12520
diff
changeset
|
223 mbox->hdr_ext_id = |
b22766c1aa51
lib-storage: Don't allocate index until mailbox_open()
Timo Sirainen <tss@iki.fi>
parents:
12520
diff
changeset
|
224 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
|
225 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
|
226 |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
227 /* 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
|
228 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
|
229 /* 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
|
230 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
|
231 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
|
232 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
|
233 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
|
234 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
|
235 |
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 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
|
237 &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
|
238 (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
|
239 |
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 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
|
241 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
|
242 } |
12312
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
243 |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
244 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
|
245 /* regenerate it */ |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
246 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
|
247 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
|
248 return -1; |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
249 } |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
250 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
|
251 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
|
252 return 0; |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
253 } |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
254 |
11658
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
255 static void sdbox_mailbox_close(struct mailbox *box) |
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
256 { |
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
257 struct sdbox_mailbox *mbox = (struct sdbox_mailbox *)box; |
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
258 |
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
259 if (mbox->corrupted_rebuild_count != 0) |
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
260 (void)sdbox_sync(mbox, 0); |
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
261 index_storage_mailbox_close(box); |
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
262 } |
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
263 |
12312
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
264 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
|
265 { |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
266 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
|
267 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
|
268 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
|
269 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
|
270 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
|
271 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
|
272 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
|
273 |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
274 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
|
275 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
|
276 |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
277 /* 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
|
278 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
|
279 return -1; |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
280 |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
281 /* 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
|
282 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
|
283 |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
284 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
|
285 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
|
286 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
|
287 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
|
288 |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
289 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
|
290 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
|
291 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
|
292 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
|
293 (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
|
294 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
|
295 } |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
296 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
|
297 |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
298 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
|
299 /* 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
|
300 } |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
301 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
|
302 |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
303 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
|
304 } |
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
305 |
10685
3609c8a35c36
lib-storage: STATUS_GUID moved to mailbox_get_guid() that can fail.
Timo Sirainen <tss@iki.fi>
parents:
10676
diff
changeset
|
306 static int |
12550
2c299c0e3bc8
lib-storage: Moved some items from mailbox_get_status() to a new mailbox_get_metadata().
Timo Sirainen <tss@iki.fi>
parents:
12545
diff
changeset
|
307 sdbox_mailbox_get_metadata(struct mailbox *box, |
2c299c0e3bc8
lib-storage: Moved some items from mailbox_get_status() to a new mailbox_get_metadata().
Timo Sirainen <tss@iki.fi>
parents:
12545
diff
changeset
|
308 enum mailbox_metadata_items items, |
2c299c0e3bc8
lib-storage: Moved some items from mailbox_get_status() to a new mailbox_get_metadata().
Timo Sirainen <tss@iki.fi>
parents:
12545
diff
changeset
|
309 struct mailbox_metadata *metadata_r) |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
310 { |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
311 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
|
312 |
12550
2c299c0e3bc8
lib-storage: Moved some items from mailbox_get_status() to a new mailbox_get_metadata().
Timo Sirainen <tss@iki.fi>
parents:
12545
diff
changeset
|
313 if ((items & MAILBOX_METADATA_GUID) != 0) { |
2c299c0e3bc8
lib-storage: Moved some items from mailbox_get_status() to a new mailbox_get_metadata().
Timo Sirainen <tss@iki.fi>
parents:
12545
diff
changeset
|
314 memcpy(metadata_r->guid, mbox->mailbox_guid, |
2c299c0e3bc8
lib-storage: Moved some items from mailbox_get_status() to a new mailbox_get_metadata().
Timo Sirainen <tss@iki.fi>
parents:
12545
diff
changeset
|
315 MAIL_GUID_128_SIZE); |
2c299c0e3bc8
lib-storage: Moved some items from mailbox_get_status() to a new mailbox_get_metadata().
Timo Sirainen <tss@iki.fi>
parents:
12545
diff
changeset
|
316 } |
2c299c0e3bc8
lib-storage: Moved some items from mailbox_get_status() to a new mailbox_get_metadata().
Timo Sirainen <tss@iki.fi>
parents:
12545
diff
changeset
|
317 return index_mailbox_get_metadata(box, items, metadata_r); |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
318 } |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
319 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
320 static int |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
321 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
|
322 { |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
323 if (!box->opened) { |
12597
a349c50cddaa
dbox: mailbox_create/update() might not have updated index header correctly.
Timo Sirainen <tss@iki.fi>
parents:
12586
diff
changeset
|
324 if (mailbox_open(box) < 0) |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
325 return -1; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
326 } |
10806
c77e71e0c5bd
dbox: mailbox_update() ignored cache_fields.
Timo Sirainen <tss@iki.fi>
parents:
10731
diff
changeset
|
327 if (update->cache_fields != NULL) |
c77e71e0c5bd
dbox: mailbox_update() ignored cache_fields.
Timo Sirainen <tss@iki.fi>
parents:
10731
diff
changeset
|
328 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
|
329 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
|
330 } |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
331 |
11820
76ee1fa16012
Renamed "dbox" to "sdbox". Keep also dbox as an alias for it.
Timo Sirainen <tss@iki.fi>
parents:
11707
diff
changeset
|
332 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
|
333 .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
|
334 .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
|
335 |
76ee1fa16012
Renamed "dbox" to "sdbox". Keep also dbox as an alias for it.
Timo Sirainen <tss@iki.fi>
parents:
11707
diff
changeset
|
336 .v = { |
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_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
|
339 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
|
340 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
|
341 NULL, |
76ee1fa16012
Renamed "dbox" to "sdbox". Keep also dbox as an alias for it.
Timo Sirainen <tss@iki.fi>
parents:
11707
diff
changeset
|
342 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
|
343 NULL, |
76ee1fa16012
Renamed "dbox" to "sdbox". Keep also dbox as an alias for it.
Timo Sirainen <tss@iki.fi>
parents:
11707
diff
changeset
|
344 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
|
345 NULL |
76ee1fa16012
Renamed "dbox" to "sdbox". Keep also dbox as an alias for it.
Timo Sirainen <tss@iki.fi>
parents:
11707
diff
changeset
|
346 } |
76ee1fa16012
Renamed "dbox" to "sdbox". Keep also dbox as an alias for it.
Timo Sirainen <tss@iki.fi>
parents:
11707
diff
changeset
|
347 }; |
76ee1fa16012
Renamed "dbox" to "sdbox". Keep also dbox as an alias for it.
Timo Sirainen <tss@iki.fi>
parents:
11707
diff
changeset
|
348 |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
349 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
|
350 .name = "dbox", /* alias */ |
10410
b757dab45756
Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents:
9977
diff
changeset
|
351 .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
|
352 |
10410
b757dab45756
Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents:
9977
diff
changeset
|
353 .v = { |
9977
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_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
|
356 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
|
357 dbox_storage_destroy, |
10715
be5590207f20
lib-storage: Changed mailbox_list.iter_is_mailbox() API.
Timo Sirainen <tss@iki.fi>
parents:
10711
diff
changeset
|
358 NULL, |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
359 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
|
360 NULL, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
361 sdbox_mailbox_alloc, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
362 NULL |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
363 } |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
364 }; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
365 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
366 struct mailbox sdbox_mailbox = { |
10410
b757dab45756
Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents:
9977
diff
changeset
|
367 .v = { |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
368 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
|
369 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
|
370 index_storage_mailbox_enable, |
12583
4073ccc8123f
lib-storage: Replaced mailbox_list_get_name_status() with mailbox_exists().
Timo Sirainen <tss@iki.fi>
parents:
12550
diff
changeset
|
371 index_storage_mailbox_exists, |
12312
28eaaa23f2c6
lib-storage: Added support for saving mail attachments separately via filesystem API.
Timo Sirainen <tss@iki.fi>
parents:
12174
diff
changeset
|
372 sdbox_mailbox_open, |
11658
9d9be6aa3a55
single-dbox: Fixed broken mailbox handling.
Timo Sirainen <tss@iki.fi>
parents:
11652
diff
changeset
|
373 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
|
374 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
|
375 dbox_mailbox_create, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
376 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
|
377 sdbox_mailbox_delete, |
10711
292562f9b12c
lib-storage: Mailbox renaming API changed.
Timo Sirainen <tss@iki.fi>
parents:
10710
diff
changeset
|
378 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
|
379 index_storage_get_status, |
12550
2c299c0e3bc8
lib-storage: Moved some items from mailbox_get_status() to a new mailbox_get_metadata().
Timo Sirainen <tss@iki.fi>
parents:
12545
diff
changeset
|
380 sdbox_mailbox_get_metadata, |
12646
87f84a76fb1e
lib-storage: Return STATUS replies from mailbox list index only when it's fully up-to-date.
Timo Sirainen <tss@iki.fi>
parents:
12597
diff
changeset
|
381 index_storage_list_index_has_changed, |
87f84a76fb1e
lib-storage: Return STATUS replies from mailbox list index only when it's fully up-to-date.
Timo Sirainen <tss@iki.fi>
parents:
12597
diff
changeset
|
382 index_storage_list_index_update_sync, |
9977
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
383 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
|
384 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
|
385 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
|
386 NULL, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
387 dbox_notify_changes, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
388 index_transaction_begin, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
389 index_transaction_commit, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
390 index_transaction_rollback, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
391 NULL, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
392 dbox_mail_alloc, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
393 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
|
394 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
|
395 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
|
396 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
|
397 sdbox_save_alloc, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
398 sdbox_save_begin, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
399 dbox_save_continue, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
400 sdbox_save_finish, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
401 sdbox_save_cancel, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
402 sdbox_copy, |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
403 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
|
404 } |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
405 }; |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
406 |
0bb321c347ae
Split dbox (single-dbox) and mdbox (multi-dbox) into separate storage backends.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
407 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
|
408 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
|
409 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
|
410 sdbox_mail_open, |
11216
de0ed7bea201
mdbox: Avoid rebuilding storage if another process already did it.
Timo Sirainen <tss@iki.fi>
parents:
11132
diff
changeset
|
411 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
|
412 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
|
413 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
|
414 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
|
415 }; |