annotate src/lib-storage/list/mailbox-list-index.h @ 21322:5ab8dc1a4a6f

global: Change string position/length from unsigned int to size_t Mainly to avoid truncating >4GB strings, which might potentially cause some security holes. Normally there are other limits, which prevent such excessive strings from being created in the first place. I'm sure this didn't find everything. Maybe everything could be found with compiler warnings. -Wconversion kind of does it, but it gives way too many unnecessary warnings. These were mainly found with: grep " = strlen" egrep "unsigned int.*(size|len)"
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Mon, 12 Dec 2016 07:19:55 +0200
parents 72af7bbcb8e2
children 0754351f9f75
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13586
8800d0429b7c Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents: 13584
diff changeset
1 #ifndef MAILBOX_LIST_INDEX_H
8800d0429b7c Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents: 13584
diff changeset
2 #define MAILBOX_LIST_INDEX_H
4848
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3
13591
612b8a73ada7 mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents: 13590
diff changeset
4 /* Mailbox list index basically contains:
612b8a73ada7 mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents: 13590
diff changeset
5
612b8a73ada7 mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents: 13590
diff changeset
6 Header contains ID => name mapping. The name isn't the full mailbox name,
612b8a73ada7 mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents: 13590
diff changeset
7 but rather each hierarchy level has its own ID and name. For example a
612b8a73ada7 mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents: 13590
diff changeset
8 mailbox name "foo/bar" (with '/' as separator) would have separate IDs for
612b8a73ada7 mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents: 13590
diff changeset
9 "foo" and "bar" names.
612b8a73ada7 mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents: 13590
diff changeset
10
612b8a73ada7 mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents: 13590
diff changeset
11 The records contain { parent_uid, uid, name_id } field that can be used to
612b8a73ada7 mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents: 13590
diff changeset
12 build the whole mailbox tree. parent_uid=0 means root, otherwise it's the
612b8a73ada7 mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents: 13590
diff changeset
13 parent node's uid.
612b8a73ada7 mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents: 13590
diff changeset
14
612b8a73ada7 mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents: 13590
diff changeset
15 Each record also contains GUID for each selectable mailbox. If a mailbox
612b8a73ada7 mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents: 13590
diff changeset
16 is recreated using the same name, its GUID also changes. Note however that
612b8a73ada7 mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents: 13590
diff changeset
17 the UID doesn't change, because the UID refers to the mailbox name, not to
612b8a73ada7 mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents: 13590
diff changeset
18 the mailbox itself.
612b8a73ada7 mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents: 13590
diff changeset
19
612b8a73ada7 mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents: 13590
diff changeset
20 The records may contain also extensions for allowing mailbox_get_status()
612b8a73ada7 mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents: 13590
diff changeset
21 to return values directly from the mailbox list index. Storage backends
612b8a73ada7 mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents: 13590
diff changeset
22 may also add their own extensions to figure out if a record is up to date.
612b8a73ada7 mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents: 13590
diff changeset
23 */
612b8a73ada7 mailbox list indexes: Added comment.
Timo Sirainen <tss@iki.fi>
parents: 13590
diff changeset
24
5450
7a6db5ec047d Better type safety to module_contexts arrays. Already fixed some bugs.
Timo Sirainen <tss@iki.fi>
parents: 5324
diff changeset
25 #include "module-context.h"
14898
a16d77a075bb lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents: 14342
diff changeset
26 #include "mail-types.h"
15167
0fa075f2e85a lib-storage: Added initial implementation for layout=index.
Timo Sirainen <tss@iki.fi>
parents: 15081
diff changeset
27 #include "mail-storage.h"
4848
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
28 #include "mailbox-list-private.h"
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
29
17955
93a3335ec0d5 Compiling fix for some systems.
Timo Sirainen <tss@iki.fi>
parents: 17910
diff changeset
30 #include <sys/time.h>
93a3335ec0d5 Compiling fix for some systems.
Timo Sirainen <tss@iki.fi>
parents: 17910
diff changeset
31
15167
0fa075f2e85a lib-storage: Added initial implementation for layout=index.
Timo Sirainen <tss@iki.fi>
parents: 15081
diff changeset
32 #define MAILBOX_LIST_INDEX_HIERARHCY_SEP '~'
4848
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
33
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
34 #define INDEX_LIST_CONTEXT(obj) \
13586
8800d0429b7c Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents: 13584
diff changeset
35 MODULE_CONTEXT(obj, mailbox_list_index_module)
4848
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
36
13588
940ddec22822 mailbox list indexes: Moved syncing code to separate file.
Timo Sirainen <tss@iki.fi>
parents: 13587
diff changeset
37 struct mail_index_view;
18907
46cbde67f50b lib-storage: If mailboxes' vsizes are used, keep them updated also in mailbox list index.
Timo Sirainen <tss@iki.fi>
parents: 17955
diff changeset
38 struct mailbox_index_vsize;
13588
940ddec22822 mailbox list indexes: Moved syncing code to separate file.
Timo Sirainen <tss@iki.fi>
parents: 13587
diff changeset
39
12641
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
40 /* stored in mail_index_record.flags: */
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
41 enum mailbox_list_index_flags {
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
42 MAILBOX_LIST_INDEX_FLAG_NONEXISTENT = MAIL_DELETED,
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
43 MAILBOX_LIST_INDEX_FLAG_NOSELECT = MAIL_DRAFT,
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
44 MAILBOX_LIST_INDEX_FLAG_NOINFERIORS = MAIL_ANSWERED,
21137
6bdcc7190a55 LAYOUT=index: Don't write corrupted mailbox names to box-name header.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21131
diff changeset
45 MAILBOX_LIST_INDEX_FLAG_CORRUPTED_NAME = MAIL_SEEN,
12641
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
46
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
47 /* set during syncing for mailboxes that still exist */
13590
6912969d94e8 mailbox list indexes: Code cleanups.
Timo Sirainen <tss@iki.fi>
parents: 13589
diff changeset
48 MAILBOX_LIST_INDEX_FLAG_SYNC_EXISTS = MAIL_FLAGGED
12641
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
49 };
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
50
12645
d3d5f104ca40 lib-storage: Mailbox list indexes now refresh the index on create/delete/rename.
Timo Sirainen <tss@iki.fi>
parents: 12641
diff changeset
51 struct mailbox_list_index_header {
d3d5f104ca40 lib-storage: Mailbox list indexes now refresh the index on create/delete/rename.
Timo Sirainen <tss@iki.fi>
parents: 12641
diff changeset
52 uint8_t refresh_flag;
d3d5f104ca40 lib-storage: Mailbox list indexes now refresh the index on create/delete/rename.
Timo Sirainen <tss@iki.fi>
parents: 12641
diff changeset
53 /* array of { uint32_t id; char name[]; } */
d3d5f104ca40 lib-storage: Mailbox list indexes now refresh the index on create/delete/rename.
Timo Sirainen <tss@iki.fi>
parents: 12641
diff changeset
54 };
d3d5f104ca40 lib-storage: Mailbox list indexes now refresh the index on create/delete/rename.
Timo Sirainen <tss@iki.fi>
parents: 12641
diff changeset
55
12641
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
56 struct mailbox_list_index_record {
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
57 /* points to given id in header */
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
58 uint32_t name_id;
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
59 /* parent mailbox's UID, 0 = root */
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
60 uint32_t parent_uid;
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
61
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
62 /* the following fields are temporarily zero while unknown,
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
63 also permanently zero for \NoSelect and \Nonexistent mailboxes: */
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
64
13287
957060ca5b69 Moved GUID code to liblib. Use guid_128_t type consistently everywhere.
Timo Sirainen <tss@iki.fi>
parents: 12650
diff changeset
65 guid_128_t guid;
12641
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
66 uint32_t uid_validity;
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
67 };
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
68
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
69 struct mailbox_list_index_msgs_record {
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
70 uint32_t messages;
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
71 uint32_t unseen;
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
72 uint32_t recent;
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
73 uint32_t uidnext;
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
74 };
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
75
13586
8800d0429b7c Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents: 13584
diff changeset
76 struct mailbox_list_index_node {
8800d0429b7c Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents: 13584
diff changeset
77 struct mailbox_list_index_node *parent;
8800d0429b7c Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents: 13584
diff changeset
78 struct mailbox_list_index_node *next;
8800d0429b7c Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents: 13584
diff changeset
79 struct mailbox_list_index_node *children;
12641
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
80
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
81 uint32_t name_id, uid;
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
82 enum mailbox_list_index_flags flags;
21131
a93530968d51 lib-storage: Fix invalid parents in LAYOUT=index
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21129
diff changeset
83 /* parent_uid is corrupted on disk - need to update it */
a93530968d51 lib-storage: Fix invalid parents in LAYOUT=index
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21129
diff changeset
84 bool corrupted_parent;
12641
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
85 const char *name;
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
86 };
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
87
13586
8800d0429b7c Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents: 13584
diff changeset
88 struct mailbox_list_index {
5450
7a6db5ec047d Better type safety to module_contexts arrays. Already fixed some bugs.
Timo Sirainen <tss@iki.fi>
parents: 5324
diff changeset
89 union mailbox_list_module_context module_ctx;
4848
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
90
12641
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
91 const char *path;
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
92 struct mail_index *index;
15027
fcd480c4a0db NOTIFY: Implemented SubscriptionChange
Timo Sirainen <tss@iki.fi>
parents: 14923
diff changeset
93 uint32_t ext_id, msgs_ext_id, hmodseq_ext_id, subs_hdr_ext_id;
19421
82e6a3baa001 Added mailbox { autoexpunge } setting.
Timo Sirainen <tss@iki.fi>
parents: 18907
diff changeset
94 uint32_t vsize_ext_id, first_saved_ext_id;
17388
60d2cfdc3140 lib-storage: Avoid refreshing mailbox list index too often.
Timo Sirainen <tss@iki.fi>
parents: 17209
diff changeset
95 struct timeval last_refresh_timeval;
12641
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
96
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
97 pool_t mailbox_pool;
14923
96fd2c3bf932 Reverted "support for non-pointers" part of the hash table API changes.
Timo Sirainen <tss@iki.fi>
parents: 14918
diff changeset
98 /* uin32_t id => name */
96fd2c3bf932 Reverted "support for non-pointers" part of the hash table API changes.
Timo Sirainen <tss@iki.fi>
parents: 14918
diff changeset
99 HASH_TABLE(void *, char *) mailbox_names;
12641
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
100 uint32_t highest_name_id;
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
101
16842
ab341f7509b5 LAYOUT=index: Fixed race condition during mailbox creation.
Timo Sirainen <tss@iki.fi>
parents: 16506
diff changeset
102 struct mailbox_list_index_sync_context *sync_ctx;
12641
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
103 uint32_t sync_log_file_seq;
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
104 uoff_t sync_log_file_offset;
12645
d3d5f104ca40 lib-storage: Mailbox list indexes now refresh the index on create/delete/rename.
Timo Sirainen <tss@iki.fi>
parents: 12641
diff changeset
105 uint32_t sync_stamp;
14898
a16d77a075bb lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents: 14342
diff changeset
106 struct timeout *to_refresh;
12645
d3d5f104ca40 lib-storage: Mailbox list indexes now refresh the index on create/delete/rename.
Timo Sirainen <tss@iki.fi>
parents: 12641
diff changeset
107
14923
96fd2c3bf932 Reverted "support for non-pointers" part of the hash table API changes.
Timo Sirainen <tss@iki.fi>
parents: 14918
diff changeset
108 /* uint32_t uid => node */
96fd2c3bf932 Reverted "support for non-pointers" part of the hash table API changes.
Timo Sirainen <tss@iki.fi>
parents: 14918
diff changeset
109 HASH_TABLE(void *, struct mailbox_list_index_node *) mailbox_hash;
13586
8800d0429b7c Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents: 13584
diff changeset
110 struct mailbox_list_index_node *mailbox_tree;
14342
0274c4132052 mailbox_list_index=yes: Delay opening/creating the index until it's needed.
Timo Sirainen <tss@iki.fi>
parents: 14334
diff changeset
111
15864
f703e1fd7c21 mailbox_list_index: Delay allocating the index so mbox can override the index path.
Timo Sirainen <tss@iki.fi>
parents: 15848
diff changeset
112 unsigned int pending_init:1;
14342
0274c4132052 mailbox_list_index=yes: Delay opening/creating the index until it's needed.
Timo Sirainen <tss@iki.fi>
parents: 14334
diff changeset
113 unsigned int opened:1;
14898
a16d77a075bb lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents: 14342
diff changeset
114 unsigned int syncing:1;
15267
b5a5f5139148 lib-storage: Avoid assert-crashing when updating mailbox list index.
Timo Sirainen <tss@iki.fi>
parents: 15167
diff changeset
115 unsigned int updating_status:1;
15167
0fa075f2e85a lib-storage: Added initial implementation for layout=index.
Timo Sirainen <tss@iki.fi>
parents: 15081
diff changeset
116 unsigned int has_backing_store:1;
17209
6fd12fbe6848 lib-storage: Avoid rebuilding the whole mailbox list index when one mailbox changes.
Timo Sirainen <tss@iki.fi>
parents: 17152
diff changeset
117 unsigned int index_last_check_changed:1;
21222
60fee9dbcfb7 lib-storage: Rename mailbox_list_index.corrupted to corrupted_names_or_parents
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21137
diff changeset
118 unsigned int corrupted_names_or_parents:1;
21226
a4d4a5dffa09 lib-storge: Call mail_storage.list_index_corrupted() when needed
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21222
diff changeset
119 unsigned int handling_corruption:1;
a4d4a5dffa09 lib-storge: Call mail_storage.list_index_corrupted() when needed
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21222
diff changeset
120 unsigned int call_corruption_callback:1;
4848
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
121 };
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
122
13586
8800d0429b7c Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents: 13584
diff changeset
123 struct mailbox_list_index_iterate_context {
4848
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
124 struct mailbox_list_iterate_context ctx;
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
125 struct mailbox_list_iterate_context *backend_ctx;
16427
e90e9a7c4ff8 layout=index: Allow mailbox create/delete/rename during mailbox list iteration.
Timo Sirainen <tss@iki.fi>
parents: 15864
diff changeset
126 pool_t mailbox_pool;
4848
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
127
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
128 struct mailbox_info info;
14334
6cb102aa5d63 mailbox_list_index=yes iteration: Don't allocate returned mailbox names from data stack.
Timo Sirainen <tss@iki.fi>
parents: 14243
diff changeset
129 pool_t info_pool;
6cb102aa5d63 mailbox_list_index=yes iteration: Don't allocate returned mailbox names from data stack.
Timo Sirainen <tss@iki.fi>
parents: 14243
diff changeset
130
21322
5ab8dc1a4a6f global: Change string position/length from unsigned int to size_t
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21316
diff changeset
131 size_t parent_len;
12641
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
132 string_t *path;
13586
8800d0429b7c Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents: 13584
diff changeset
133 struct mailbox_list_index_node *next_node;
4848
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
134
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
135 unsigned int failed:1;
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
136 };
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
137
13586
8800d0429b7c Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents: 13584
diff changeset
138 extern MODULE_CONTEXT_DEFINE(mailbox_list_index_module,
5450
7a6db5ec047d Better type safety to module_contexts arrays. Already fixed some bugs.
Timo Sirainen <tss@iki.fi>
parents: 5324
diff changeset
139 &mailbox_list_module_register);
4848
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
140
13589
75679aca405a mailbox list indexes: Error handling fixes.
Timo Sirainen <tss@iki.fi>
parents: 13588
diff changeset
141 void mailbox_list_index_set_index_error(struct mailbox_list *list);
13586
8800d0429b7c Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents: 13584
diff changeset
142 struct mailbox_list_index_node *
8800d0429b7c Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents: 13584
diff changeset
143 mailbox_list_index_lookup(struct mailbox_list *list, const char *name);
14898
a16d77a075bb lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents: 14342
diff changeset
144 struct mailbox_list_index_node *
a16d77a075bb lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents: 14342
diff changeset
145 mailbox_list_index_lookup_uid(struct mailbox_list_index *ilist, uint32_t uid);
a16d77a075bb lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents: 14342
diff changeset
146 void mailbox_list_index_node_get_path(const struct mailbox_list_index_node *node,
a16d77a075bb lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents: 14342
diff changeset
147 char sep, string_t *str);
15167
0fa075f2e85a lib-storage: Added initial implementation for layout=index.
Timo Sirainen <tss@iki.fi>
parents: 15081
diff changeset
148 void mailbox_list_index_node_unlink(struct mailbox_list_index *ilist,
0fa075f2e85a lib-storage: Added initial implementation for layout=index.
Timo Sirainen <tss@iki.fi>
parents: 15081
diff changeset
149 struct mailbox_list_index_node *node);
12641
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
150
17152
346981286d20 lib-storage: Fixed assert-crash in mailbox rename with layout=index
Timo Sirainen <tss@iki.fi>
parents: 16842
diff changeset
151 int mailbox_list_index_index_open(struct mailbox_list *list);
14243
ba2b4f8a1bb1 mailbox list indexes: Avoid unnecessary refresh flag writes.
Timo Sirainen <tss@iki.fi>
parents: 13591
diff changeset
152 bool mailbox_list_index_need_refresh(struct mailbox_list_index *ilist,
ba2b4f8a1bb1 mailbox list indexes: Avoid unnecessary refresh flag writes.
Timo Sirainen <tss@iki.fi>
parents: 13591
diff changeset
153 struct mail_index_view *view);
17910
96f79038038f lib-storage: Fixed some race condition crashes with LAYOUT=index
Timo Sirainen <tss@iki.fi>
parents: 17388
diff changeset
154 /* Refresh the index, but only if it hasn't been refreshed "recently"
96f79038038f lib-storage: Fixed some race condition crashes with LAYOUT=index
Timo Sirainen <tss@iki.fi>
parents: 17388
diff changeset
155 (= within this same ioloop run) */
13586
8800d0429b7c Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents: 13584
diff changeset
156 int mailbox_list_index_refresh(struct mailbox_list *list);
17910
96f79038038f lib-storage: Fixed some race condition crashes with LAYOUT=index
Timo Sirainen <tss@iki.fi>
parents: 17388
diff changeset
157 /* Refresh the index regardless of when the last refresh was done. */
96f79038038f lib-storage: Fixed some race condition crashes with LAYOUT=index
Timo Sirainen <tss@iki.fi>
parents: 17388
diff changeset
158 int mailbox_list_index_refresh_force(struct mailbox_list *list);
13586
8800d0429b7c Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents: 13584
diff changeset
159 void mailbox_list_index_refresh_later(struct mailbox_list *list);
21226
a4d4a5dffa09 lib-storge: Call mail_storage.list_index_corrupted() when needed
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21222
diff changeset
160 int mailbox_list_index_handle_corruption(struct mailbox_list *list);
a4d4a5dffa09 lib-storge: Call mail_storage.list_index_corrupted() when needed
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21222
diff changeset
161 int mailbox_list_index_set_uncorrupted(struct mailbox_list *list);
12641
ad002fdc6a6c lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
162
13588
940ddec22822 mailbox list indexes: Moved syncing code to separate file.
Timo Sirainen <tss@iki.fi>
parents: 13587
diff changeset
163 struct mailbox_list_index_node *
940ddec22822 mailbox list indexes: Moved syncing code to separate file.
Timo Sirainen <tss@iki.fi>
parents: 13587
diff changeset
164 mailbox_list_index_node_find_sibling(struct mailbox_list_index_node *node,
940ddec22822 mailbox list indexes: Moved syncing code to separate file.
Timo Sirainen <tss@iki.fi>
parents: 13587
diff changeset
165 const char *name);
940ddec22822 mailbox list indexes: Moved syncing code to separate file.
Timo Sirainen <tss@iki.fi>
parents: 13587
diff changeset
166 void mailbox_list_index_reset(struct mailbox_list_index *ilist);
15167
0fa075f2e85a lib-storage: Added initial implementation for layout=index.
Timo Sirainen <tss@iki.fi>
parents: 15081
diff changeset
167 int mailbox_list_index_parse(struct mailbox_list *list,
13589
75679aca405a mailbox list indexes: Error handling fixes.
Timo Sirainen <tss@iki.fi>
parents: 13588
diff changeset
168 struct mail_index_view *view, bool force);
13588
940ddec22822 mailbox list indexes: Moved syncing code to separate file.
Timo Sirainen <tss@iki.fi>
parents: 13587
diff changeset
169
13587
cd7b56e965d2 mailbox list indexes: Moved iteration code to separate file.
Timo Sirainen <tss@iki.fi>
parents: 13586
diff changeset
170 struct mailbox_list_iterate_context *
cd7b56e965d2 mailbox list indexes: Moved iteration code to separate file.
Timo Sirainen <tss@iki.fi>
parents: 13586
diff changeset
171 mailbox_list_index_iter_init(struct mailbox_list *list,
cd7b56e965d2 mailbox list indexes: Moved iteration code to separate file.
Timo Sirainen <tss@iki.fi>
parents: 13586
diff changeset
172 const char *const *patterns,
cd7b56e965d2 mailbox list indexes: Moved iteration code to separate file.
Timo Sirainen <tss@iki.fi>
parents: 13586
diff changeset
173 enum mailbox_list_iter_flags flags);
cd7b56e965d2 mailbox list indexes: Moved iteration code to separate file.
Timo Sirainen <tss@iki.fi>
parents: 13586
diff changeset
174 const struct mailbox_info *
cd7b56e965d2 mailbox list indexes: Moved iteration code to separate file.
Timo Sirainen <tss@iki.fi>
parents: 13586
diff changeset
175 mailbox_list_index_iter_next(struct mailbox_list_iterate_context *ctx);
cd7b56e965d2 mailbox list indexes: Moved iteration code to separate file.
Timo Sirainen <tss@iki.fi>
parents: 13586
diff changeset
176 int mailbox_list_index_iter_deinit(struct mailbox_list_iterate_context *ctx);
cd7b56e965d2 mailbox list indexes: Moved iteration code to separate file.
Timo Sirainen <tss@iki.fi>
parents: 13586
diff changeset
177
14898
a16d77a075bb lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents: 14342
diff changeset
178 bool mailbox_list_index_status(struct mailbox_list *list,
a16d77a075bb lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents: 14342
diff changeset
179 struct mail_index_view *view,
a16d77a075bb lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents: 14342
diff changeset
180 uint32_t seq, enum mailbox_status_items items,
a16d77a075bb lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents: 14342
diff changeset
181 struct mailbox_status *status_r,
18907
46cbde67f50b lib-storage: If mailboxes' vsizes are used, keep them updated also in mailbox list index.
Timo Sirainen <tss@iki.fi>
parents: 17955
diff changeset
182 uint8_t *mailbox_guid,
46cbde67f50b lib-storage: If mailboxes' vsizes are used, keep them updated also in mailbox list index.
Timo Sirainen <tss@iki.fi>
parents: 17955
diff changeset
183 struct mailbox_index_vsize *vsize_r);
13586
8800d0429b7c Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents: 13584
diff changeset
184 void mailbox_list_index_status_set_info_flags(struct mailbox *box, uint32_t uid,
12650
0cadba9597cb lib-storage: Use RECENT count in mailbox list index to set \Marked and \UnMarked LIST flag.
Timo Sirainen <tss@iki.fi>
parents: 12645
diff changeset
185 enum mailbox_info_flags *flags);
15848
2529f4e12665 lib-storage: Fixed mailbox_update() when using mailbox_list_index=yes
Timo Sirainen <tss@iki.fi>
parents: 15412
diff changeset
186 void mailbox_list_index_update_mailbox_index(struct mailbox *box,
2529f4e12665 lib-storage: Fixed mailbox_update() when using mailbox_list_index=yes
Timo Sirainen <tss@iki.fi>
parents: 15412
diff changeset
187 const struct mailbox_update *update);
12650
0cadba9597cb lib-storage: Use RECENT count in mailbox list index to set \Marked and \UnMarked LIST flag.
Timo Sirainen <tss@iki.fi>
parents: 12645
diff changeset
188
14898
a16d77a075bb lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents: 14342
diff changeset
189 int mailbox_list_index_notify_init(struct mailbox_list *list,
a16d77a075bb lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents: 14342
diff changeset
190 enum mailbox_list_notify_event mask,
a16d77a075bb lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents: 14342
diff changeset
191 struct mailbox_list_notify **notify_r);
a16d77a075bb lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents: 14342
diff changeset
192 void mailbox_list_index_notify_deinit(struct mailbox_list_notify *notify);
a16d77a075bb lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents: 14342
diff changeset
193 int mailbox_list_index_notify_next(struct mailbox_list_notify *notify,
a16d77a075bb lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents: 14342
diff changeset
194 const struct mailbox_list_notify_rec **rec_r);
a16d77a075bb lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents: 14342
diff changeset
195 void mailbox_list_index_notify_wait(struct mailbox_list_notify *notify,
a16d77a075bb lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents: 14342
diff changeset
196 void (*callback)(void *context),
a16d77a075bb lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents: 14342
diff changeset
197 void *context);
a16d77a075bb lib-storage: Added mailbox-list-notify API for tracking changes in all mailboxes.
Timo Sirainen <tss@iki.fi>
parents: 14342
diff changeset
198
15167
0fa075f2e85a lib-storage: Added initial implementation for layout=index.
Timo Sirainen <tss@iki.fi>
parents: 15081
diff changeset
199 void mailbox_list_index_status_init_mailbox(struct mailbox *box);
0fa075f2e85a lib-storage: Added initial implementation for layout=index.
Timo Sirainen <tss@iki.fi>
parents: 15081
diff changeset
200 void mailbox_list_index_backend_init_mailbox(struct mailbox *box);
15864
f703e1fd7c21 mailbox_list_index: Delay allocating the index so mbox can override the index path.
Timo Sirainen <tss@iki.fi>
parents: 15848
diff changeset
201 void mailbox_list_index_status_init_finish(struct mailbox_list *list);
4848
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
202
967de900c73a Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
203 #endif