Mercurial > dovecot > original-hg > dovecot-1.2
annotate src/lib-storage/mailbox-list.c @ 5472:21ccc57946b8 HEAD
cleanup
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Fri, 30 Mar 2007 22:36:19 +0300 |
parents | 7df495c556ff |
children | b5404d36494f |
rev | line source |
---|---|
5448
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
1 /* Copyright (C) 2006-2007 Timo Sirainen */ |
4808
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
3 #include "lib.h" |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
4 #include "array.h" |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
5 #include "ioloop.h" |
5318
3a3906587641
Create index/control dirs if they don't exist
Timo Sirainen <tss@iki.fi>
parents:
4906
diff
changeset
|
6 #include "mkdir-parents.h" |
5448
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
7 #include "unlink-directory.h" |
4808
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
8 #include "mailbox-list-private.h" |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
9 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
10 #include <time.h> |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
11 #include <dirent.h> |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
12 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
13 /* 20 * (200+1) < 4096 which is the standard PATH_MAX. Having these settings |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
14 prevents malicious user from creating eg. "a/a/a/.../a" mailbox name and |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
15 then start renaming them to larger names from end to beginning, which |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
16 eventually would start causing the failures when trying to use too |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
17 long mailbox names. */ |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
18 #define MAILBOX_MAX_HIERARCHY_LEVELS 20 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
19 #define MAILBOX_MAX_HIERARCHY_NAME_LENGTH 200 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
20 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
21 /* Message to show to users when critical error occurs */ |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
22 #define CRITICAL_MSG \ |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
23 "Internal error occurred. Refer to server log for more information." |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
24 #define CRITICAL_MSG_STAMP CRITICAL_MSG " [%Y-%m-%d %H:%M:%S]" |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
25 |
5450
7a6db5ec047d
Better type safety to module_contexts arrays. Already fixed some bugs.
Timo Sirainen <tss@iki.fi>
parents:
5448
diff
changeset
|
26 struct mailbox_list_module_register mailbox_list_module_register = { 0 }; |
4814 | 27 |
4808
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
28 void (*hook_mailbox_list_created)(struct mailbox_list *list); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
29 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
30 static ARRAY_DEFINE(mailbox_list_drivers, const struct mailbox_list *); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
31 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
32 static bool mailbox_list_driver_find(const char *name, unsigned int *idx_r) |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
33 { |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
34 const struct mailbox_list *const *drivers; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
35 unsigned int i, count; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
36 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
37 drivers = array_get(&mailbox_list_drivers, &count); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
38 for (i = 0; i < count; i++) { |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
39 if (strcasecmp(drivers[i]->name, name) == 0) { |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
40 *idx_r = i; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
41 return TRUE; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
42 } |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
43 } |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
44 return FALSE; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
45 } |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
46 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
47 void mailbox_list_register(const struct mailbox_list *list) |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
48 { |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
49 if (!array_is_created(&mailbox_list_drivers)) |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
50 i_array_init(&mailbox_list_drivers, 4); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
51 else { |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
52 unsigned int idx; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
53 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
54 if (mailbox_list_driver_find(list->name, &idx)) { |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
55 i_fatal("mailbox_list_register(%s): duplicate driver", |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
56 list->name); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
57 } |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
58 } |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
59 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
60 array_append(&mailbox_list_drivers, &list, 1); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
61 } |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
62 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
63 void mailbox_list_unregister(const struct mailbox_list *list) |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
64 { |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
65 unsigned int idx; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
66 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
67 if (!mailbox_list_driver_find(list->name, &idx)) { |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
68 i_fatal("mailbox_list_unregister(%s): unknown driver", |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
69 list->name); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
70 } |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
71 array_delete(&mailbox_list_drivers, idx, 1); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
72 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
73 if (array_count(&mailbox_list_drivers) == 0) |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
74 array_free(&mailbox_list_drivers); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
75 } |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
76 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
77 int mailbox_list_init(const char *driver, |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
78 const struct mailbox_list_settings *set, |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
79 enum mailbox_list_flags flags, |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
80 struct mailbox_list **list_r, const char **error_r) |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
81 { |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
82 const struct mailbox_list *const *class_p; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
83 struct mailbox_list *list; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
84 unsigned int idx; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
85 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
86 if (!mailbox_list_driver_find(driver, &idx)) { |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
87 *error_r = "Unknown mailbox list driver"; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
88 return -1; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
89 } |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
90 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
91 i_assert(*set->root_dir != '\0'); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
92 i_assert(*set->subscription_fname != '\0'); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
93 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
94 class_p = array_idx(&mailbox_list_drivers, idx); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
95 list = (*class_p)->v.alloc(); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
96 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
97 list->flags = flags; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
98 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
99 /* copy settings */ |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
100 list->set.root_dir = p_strdup(list->pool, set->root_dir); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
101 list->set.index_dir = set->index_dir == NULL || |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
102 strcmp(set->index_dir, set->root_dir) == 0 ? NULL : |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
103 p_strdup(list->pool, set->index_dir); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
104 list->set.control_dir = set->control_dir == NULL || |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
105 strcmp(set->control_dir, set->root_dir) == 0 ? NULL : |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
106 p_strdup(list->pool, set->control_dir); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
107 |
5318
3a3906587641
Create index/control dirs if they don't exist
Timo Sirainen <tss@iki.fi>
parents:
4906
diff
changeset
|
108 if (list->set.index_dir != NULL) { |
3a3906587641
Create index/control dirs if they don't exist
Timo Sirainen <tss@iki.fi>
parents:
4906
diff
changeset
|
109 if (mkdir_parents(list->set.index_dir, 0700) < 0 && |
3a3906587641
Create index/control dirs if they don't exist
Timo Sirainen <tss@iki.fi>
parents:
4906
diff
changeset
|
110 errno != EEXIST) |
3a3906587641
Create index/control dirs if they don't exist
Timo Sirainen <tss@iki.fi>
parents:
4906
diff
changeset
|
111 i_error("mkdir(%s) failed: %m", list->set.index_dir); |
3a3906587641
Create index/control dirs if they don't exist
Timo Sirainen <tss@iki.fi>
parents:
4906
diff
changeset
|
112 } |
3a3906587641
Create index/control dirs if they don't exist
Timo Sirainen <tss@iki.fi>
parents:
4906
diff
changeset
|
113 if (list->set.control_dir != NULL) { |
3a3906587641
Create index/control dirs if they don't exist
Timo Sirainen <tss@iki.fi>
parents:
4906
diff
changeset
|
114 if (mkdir_parents(list->set.control_dir, 0700) < 0 && |
3a3906587641
Create index/control dirs if they don't exist
Timo Sirainen <tss@iki.fi>
parents:
4906
diff
changeset
|
115 errno != EEXIST) |
3a3906587641
Create index/control dirs if they don't exist
Timo Sirainen <tss@iki.fi>
parents:
4906
diff
changeset
|
116 i_error("mkdir(%s) failed: %m", list->set.control_dir); |
3a3906587641
Create index/control dirs if they don't exist
Timo Sirainen <tss@iki.fi>
parents:
4906
diff
changeset
|
117 } |
3a3906587641
Create index/control dirs if they don't exist
Timo Sirainen <tss@iki.fi>
parents:
4906
diff
changeset
|
118 |
4808
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
119 list->set.inbox_path = p_strdup(list->pool, set->inbox_path); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
120 list->set.subscription_fname = |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
121 p_strdup(list->pool, set->subscription_fname); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
122 list->set.maildir_name = p_strdup(list->pool, set->maildir_name); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
123 |
4848
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
4814
diff
changeset
|
124 list->set.mail_storage_flags = set->mail_storage_flags; |
4876
f1d77064884c
Lock handling changes. Everything goes through file-lock API now and there's
Timo Sirainen <tss@iki.fi>
parents:
4848
diff
changeset
|
125 list->set.lock_method = set->lock_method; |
4848
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
4814
diff
changeset
|
126 |
4808
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
127 if ((flags & MAILBOX_LIST_FLAG_DEBUG) != 0) { |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
128 i_info("%s: root=%s, index=%s, control=%s, inbox=%s", |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
129 driver, list->set.root_dir, |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
130 list->set.index_dir == NULL ? "" : list->set.index_dir, |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
131 list->set.control_dir == NULL ? |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
132 "" : list->set.control_dir, |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
133 list->set.inbox_path == NULL ? |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
134 "" : list->set.inbox_path); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
135 } |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
136 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
137 array_create(&list->module_contexts, list->pool, sizeof(void *), 5); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
138 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
139 if (hook_mailbox_list_created != NULL) |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
140 hook_mailbox_list_created(list); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
141 |
4848
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
4814
diff
changeset
|
142 list->set.mail_storage_flags = NULL; |
4876
f1d77064884c
Lock handling changes. Everything goes through file-lock API now and there's
Timo Sirainen <tss@iki.fi>
parents:
4848
diff
changeset
|
143 list->set.lock_method = NULL; |
4848
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
4814
diff
changeset
|
144 |
4808
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
145 *list_r = list; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
146 return 0; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
147 } |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
148 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
149 void mailbox_list_deinit(struct mailbox_list *list) |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
150 { |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
151 i_free_and_null(list->error); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
152 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
153 list->v.deinit(list); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
154 } |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
155 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
156 const char *mailbox_list_get_driver_name(struct mailbox_list *list) |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
157 { |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
158 return list->name; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
159 } |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
160 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
161 char mailbox_list_get_hierarchy_sep(struct mailbox_list *list) |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
162 { |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
163 return list->hierarchy_sep; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
164 } |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
165 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
166 bool mailbox_list_is_valid_mask(struct mailbox_list *list, const char *mask) |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
167 { |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
168 return list->v.is_valid_mask(list, mask); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
169 } |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
170 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
171 bool mailbox_list_is_valid_existing_name(struct mailbox_list *list, |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
172 const char *name) |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
173 { |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
174 return list->v.is_valid_existing_name(list, name); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
175 } |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
176 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
177 bool mailbox_list_is_valid_create_name(struct mailbox_list *list, |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
178 const char *name) |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
179 { |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
180 return list->v.is_valid_create_name(list, name); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
181 } |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
182 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
183 const char *mailbox_list_get_path(struct mailbox_list *list, const char *name, |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
184 enum mailbox_list_path_type type) |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
185 { |
5470
402796d50c3e
Moved some common code to mailbox-list.c
Timo Sirainen <tss@iki.fi>
parents:
5450
diff
changeset
|
186 mailbox_list_clear_error(list); |
402796d50c3e
Moved some common code to mailbox-list.c
Timo Sirainen <tss@iki.fi>
parents:
5450
diff
changeset
|
187 |
4808
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
188 return list->v.get_path(list, name, type); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
189 } |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
190 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
191 const char *mailbox_list_get_temp_prefix(struct mailbox_list *list) |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
192 { |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
193 return list->v.get_temp_prefix(list); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
194 } |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
195 |
4848
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
4814
diff
changeset
|
196 const char *mailbox_list_join_refmask(struct mailbox_list *list, |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
4814
diff
changeset
|
197 const char *ref, const char *mask) |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
4814
diff
changeset
|
198 { |
5470
402796d50c3e
Moved some common code to mailbox-list.c
Timo Sirainen <tss@iki.fi>
parents:
5450
diff
changeset
|
199 if (list->v.join_refmask != NULL) |
402796d50c3e
Moved some common code to mailbox-list.c
Timo Sirainen <tss@iki.fi>
parents:
5450
diff
changeset
|
200 return list->v.join_refmask(list, ref, mask); |
402796d50c3e
Moved some common code to mailbox-list.c
Timo Sirainen <tss@iki.fi>
parents:
5450
diff
changeset
|
201 |
402796d50c3e
Moved some common code to mailbox-list.c
Timo Sirainen <tss@iki.fi>
parents:
5450
diff
changeset
|
202 /* the default implementation: */ |
402796d50c3e
Moved some common code to mailbox-list.c
Timo Sirainen <tss@iki.fi>
parents:
5450
diff
changeset
|
203 if (*ref != '\0') { |
402796d50c3e
Moved some common code to mailbox-list.c
Timo Sirainen <tss@iki.fi>
parents:
5450
diff
changeset
|
204 /* merge reference and mask */ |
402796d50c3e
Moved some common code to mailbox-list.c
Timo Sirainen <tss@iki.fi>
parents:
5450
diff
changeset
|
205 mask = t_strconcat(ref, mask, NULL); |
402796d50c3e
Moved some common code to mailbox-list.c
Timo Sirainen <tss@iki.fi>
parents:
5450
diff
changeset
|
206 } |
402796d50c3e
Moved some common code to mailbox-list.c
Timo Sirainen <tss@iki.fi>
parents:
5450
diff
changeset
|
207 return mask; |
4848
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
4814
diff
changeset
|
208 } |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
4814
diff
changeset
|
209 |
4808
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
210 int mailbox_list_get_mailbox_name_status(struct mailbox_list *list, |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
211 const char *name, |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
212 enum mailbox_name_status *status) |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
213 { |
5470
402796d50c3e
Moved some common code to mailbox-list.c
Timo Sirainen <tss@iki.fi>
parents:
5450
diff
changeset
|
214 mailbox_list_clear_error(list); |
402796d50c3e
Moved some common code to mailbox-list.c
Timo Sirainen <tss@iki.fi>
parents:
5450
diff
changeset
|
215 |
402796d50c3e
Moved some common code to mailbox-list.c
Timo Sirainen <tss@iki.fi>
parents:
5450
diff
changeset
|
216 if (!mailbox_list_is_valid_existing_name(list, name)) { |
402796d50c3e
Moved some common code to mailbox-list.c
Timo Sirainen <tss@iki.fi>
parents:
5450
diff
changeset
|
217 *status = MAILBOX_NAME_INVALID; |
402796d50c3e
Moved some common code to mailbox-list.c
Timo Sirainen <tss@iki.fi>
parents:
5450
diff
changeset
|
218 return 0; |
402796d50c3e
Moved some common code to mailbox-list.c
Timo Sirainen <tss@iki.fi>
parents:
5450
diff
changeset
|
219 } |
402796d50c3e
Moved some common code to mailbox-list.c
Timo Sirainen <tss@iki.fi>
parents:
5450
diff
changeset
|
220 |
4808
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
221 return list->v.get_mailbox_name_status(list, name, status); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
222 } |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
223 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
224 struct mailbox_list_iterate_context * |
4848
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
4814
diff
changeset
|
225 mailbox_list_iter_init(struct mailbox_list *list, const char *mask, |
4808
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
226 enum mailbox_list_iter_flags flags) |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
227 { |
4848
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
4814
diff
changeset
|
228 return list->v.iter_init(list, mask, flags); |
4808
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
229 } |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
230 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
231 struct mailbox_info * |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
232 mailbox_list_iter_next(struct mailbox_list_iterate_context *ctx) |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
233 { |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
234 return ctx->list->v.iter_next(ctx); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
235 } |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
236 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
237 int mailbox_list_iter_deinit(struct mailbox_list_iterate_context **_ctx) |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
238 { |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
239 struct mailbox_list_iterate_context *ctx = *_ctx; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
240 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
241 *_ctx = NULL; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
242 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
243 return ctx->list->v.iter_deinit(ctx); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
244 } |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
245 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
246 int mailbox_list_set_subscribed(struct mailbox_list *list, |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
247 const char *name, bool set) |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
248 { |
5470
402796d50c3e
Moved some common code to mailbox-list.c
Timo Sirainen <tss@iki.fi>
parents:
5450
diff
changeset
|
249 mailbox_list_clear_error(list); |
402796d50c3e
Moved some common code to mailbox-list.c
Timo Sirainen <tss@iki.fi>
parents:
5450
diff
changeset
|
250 |
4808
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
251 return list->v.set_subscribed(list, name, set); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
252 } |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
253 |
5448
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
254 int mailbox_list_delete_mailbox(struct mailbox_list *list, const char *name) |
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
255 { |
5471
7df495c556ff
Verify that mailbox name is valid before deleting it.
Timo Sirainen <tss@iki.fi>
parents:
5470
diff
changeset
|
256 if (!mailbox_list_is_valid_existing_name(list, name)) { |
7df495c556ff
Verify that mailbox name is valid before deleting it.
Timo Sirainen <tss@iki.fi>
parents:
5470
diff
changeset
|
257 mailbox_list_set_error(list, "Invalid mailbox name"); |
7df495c556ff
Verify that mailbox name is valid before deleting it.
Timo Sirainen <tss@iki.fi>
parents:
5470
diff
changeset
|
258 return -1; |
7df495c556ff
Verify that mailbox name is valid before deleting it.
Timo Sirainen <tss@iki.fi>
parents:
5470
diff
changeset
|
259 } |
5472 | 260 if (strcmp(name, "INBOX") == 0) { |
261 mailbox_list_set_error(list, "INBOX can't be deleted."); | |
262 return -1; | |
263 } | |
5448
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
264 return list->v.delete_mailbox(list, name); |
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
265 } |
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
266 |
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
267 int mailbox_list_rename_mailbox(struct mailbox_list *list, |
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
268 const char *oldname, const char *newname) |
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
269 { |
5470
402796d50c3e
Moved some common code to mailbox-list.c
Timo Sirainen <tss@iki.fi>
parents:
5450
diff
changeset
|
270 if (!mailbox_list_is_valid_existing_name(list, oldname) || |
402796d50c3e
Moved some common code to mailbox-list.c
Timo Sirainen <tss@iki.fi>
parents:
5450
diff
changeset
|
271 !mailbox_list_is_valid_create_name(list, newname)) { |
402796d50c3e
Moved some common code to mailbox-list.c
Timo Sirainen <tss@iki.fi>
parents:
5450
diff
changeset
|
272 mailbox_list_set_error(list, "Invalid mailbox name"); |
402796d50c3e
Moved some common code to mailbox-list.c
Timo Sirainen <tss@iki.fi>
parents:
5450
diff
changeset
|
273 return -1; |
402796d50c3e
Moved some common code to mailbox-list.c
Timo Sirainen <tss@iki.fi>
parents:
5450
diff
changeset
|
274 } |
402796d50c3e
Moved some common code to mailbox-list.c
Timo Sirainen <tss@iki.fi>
parents:
5450
diff
changeset
|
275 |
5448
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
276 return list->v.rename_mailbox(list, oldname, newname); |
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
277 } |
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
278 |
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
279 int mailbox_list_delete_index_control(struct mailbox_list *list, |
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
280 const char *name) |
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
281 { |
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
282 const char *path, *index_dir, *dir; |
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
283 |
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
284 path = mailbox_list_get_path(list, name, |
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
285 MAILBOX_LIST_PATH_TYPE_MAILBOX); |
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
286 |
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
287 /* delete the index directory first, so that if we crash we don't |
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
288 leave indexes for deleted mailboxes lying around */ |
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
289 index_dir = mailbox_list_get_path(list, name, |
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
290 MAILBOX_LIST_PATH_TYPE_INDEX); |
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
291 if (*index_dir != '\0' && strcmp(index_dir, path) != 0) { |
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
292 if (unlink_directory(index_dir, TRUE) < 0 && errno != ENOENT) { |
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
293 mailbox_list_set_critical(list, |
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
294 "unlink_directory(%s) failed: %m", index_dir); |
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
295 return -1; |
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
296 } |
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
297 } |
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
298 |
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
299 /* control directory next */ |
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
300 dir = mailbox_list_get_path(list, name, MAILBOX_LIST_PATH_TYPE_CONTROL); |
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
301 if (*dir != '\0' && strcmp(dir, path) != 0 && |
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
302 strcmp(dir, index_dir) != 0) { |
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
303 if (unlink_directory(dir, TRUE) < 0 && errno != ENOENT) { |
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
304 mailbox_list_set_critical(list, |
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
305 "unlink_directory(%s) failed: %m", dir); |
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
306 return -1; |
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
307 } |
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
308 } |
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
309 return 0; |
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
310 } |
beabd433cdae
Moved delete/rename operations to mailbox_list API. Fixed mbox/maildir to
Timo Sirainen <tss@iki.fi>
parents:
5318
diff
changeset
|
311 |
4808
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
312 bool mailbox_list_name_is_too_large(const char *name, char sep) |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
313 { |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
314 unsigned int levels = 1, level_len = 0; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
315 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
316 for (; *name != '\0'; name++) { |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
317 if (*name == sep) { |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
318 if (level_len > MAILBOX_MAX_HIERARCHY_NAME_LENGTH) |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
319 return TRUE; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
320 levels++; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
321 level_len = 0; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
322 } else { |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
323 level_len++; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
324 } |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
325 } |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
326 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
327 if (level_len > MAILBOX_MAX_HIERARCHY_NAME_LENGTH) |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
328 return TRUE; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
329 if (levels > MAILBOX_MAX_HIERARCHY_LEVELS) |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
330 return TRUE; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
331 return FALSE; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
332 } |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
333 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
334 enum mailbox_list_file_type mailbox_list_get_file_type(const struct dirent *d) |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
335 { |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
336 enum mailbox_list_file_type type; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
337 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
338 #ifdef HAVE_DIRENT_D_TYPE |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
339 switch (d->d_type) { |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
340 case DT_UNKNOWN: |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
341 type = MAILBOX_LIST_FILE_TYPE_UNKNOWN; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
342 break; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
343 case DT_REG: |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
344 type = MAILBOX_LIST_FILE_TYPE_FILE; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
345 break; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
346 case DT_DIR: |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
347 type = MAILBOX_LIST_FILE_TYPE_DIR; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
348 break; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
349 case DT_LNK: |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
350 type = MAILBOX_LIST_FILE_TYPE_SYMLINK; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
351 break; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
352 default: |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
353 type = MAILBOX_LIST_FILE_TYPE_OTHER; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
354 break; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
355 } |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
356 #else |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
357 type = MAILBOX_LIST_FILE_TYPE_UNKNOWN; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
358 #endif |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
359 return type; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
360 } |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
361 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
362 const char *mailbox_list_get_last_error(struct mailbox_list *list, |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
363 bool *temporary_error_r) |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
364 { |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
365 *temporary_error_r = list->temporary_error; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
366 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
367 return list->error; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
368 } |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
369 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
370 void mailbox_list_clear_error(struct mailbox_list *list) |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
371 { |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
372 i_free_and_null(list->error); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
373 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
374 list->temporary_error = FALSE; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
375 } |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
376 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
377 void mailbox_list_set_error(struct mailbox_list *list, const char *error) |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
378 { |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
379 i_free(list->error); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
380 list->error = i_strdup(error); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
381 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
382 list->temporary_error = FALSE; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
383 } |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
384 |
4848
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
4814
diff
changeset
|
385 void mailbox_list_set_internal_error(struct mailbox_list *list) |
4808
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
386 { |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
387 struct tm *tm; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
388 char str[256]; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
389 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
390 tm = localtime(&ioloop_time); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
391 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
392 i_free(list->error); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
393 list->error = |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
394 strftime(str, sizeof(str), CRITICAL_MSG_STAMP, tm) > 0 ? |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
395 i_strdup(str) : i_strdup(CRITICAL_MSG); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
396 list->temporary_error = TRUE; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
397 } |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
398 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
399 void mailbox_list_set_critical(struct mailbox_list *list, const char *fmt, ...) |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
400 { |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
401 va_list va; |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
402 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
403 va_start(va, fmt); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
404 i_error("%s", t_strdup_vprintf(fmt, va)); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
405 va_end(va); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
406 |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
407 /* critical errors may contain sensitive data, so let user |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
408 see only "Internal error" with a timestamp to make it |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
409 easier to look from log files the actual error message. */ |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
410 mailbox_list_set_internal_error(list); |
93bc9770f938
Initial code for separation of mailbox accessing and directory layout
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
411 } |