Mercurial > dovecot > core-2.2
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 |
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 |