1 #ifndef MAIL_STORAGE_SETTINGS_H
2 #define MAIL_STORAGE_SETTINGS_H
3 
4 #include "file-lock.h"
5 #include "fsync-mode.h"
6 
7 #define MAIL_STORAGE_SET_DRIVER_NAME "MAIL"
8 
9 struct mail_user;
10 struct mail_namespace;
11 struct mail_storage;
12 struct message_address;
13 struct smtp_address;
14 
15 struct mail_storage_settings {
16 	const char *mail_location;
17 	const char *mail_attachment_fs;
18 	const char *mail_attachment_dir;
19 	const char *mail_attachment_hash;
20 	uoff_t mail_attachment_min_size;
21 	const char *mail_attribute_dict;
22 	unsigned int mail_prefetch_count;
23 	const char *mail_cache_fields;
24 	const char *mail_always_cache_fields;
25 	const char *mail_never_cache_fields;
26 	const char *mail_server_comment;
27 	const char *mail_server_admin;
28 	unsigned int mail_cache_min_mail_count;
29 	unsigned int mail_cache_unaccessed_field_drop;
30 	uoff_t mail_cache_record_max_size;
31 	uoff_t mail_cache_max_size;
32 	uoff_t mail_cache_purge_min_size;
33 	unsigned int mail_cache_purge_delete_percentage;
34 	unsigned int mail_cache_purge_continued_percentage;
35 	unsigned int mail_cache_purge_header_continue_count;
36 	uoff_t mail_index_rewrite_min_log_bytes;
37 	uoff_t mail_index_rewrite_max_log_bytes;
38 	uoff_t mail_index_log_rotate_min_size;
39 	uoff_t mail_index_log_rotate_max_size;
40 	unsigned int mail_index_log_rotate_min_age;
41 	unsigned int mail_index_log2_max_age;
42 	unsigned int mailbox_idle_check_interval;
43 	unsigned int mail_max_keyword_length;
44 	unsigned int mail_max_lock_timeout;
45 	unsigned int mail_temp_scan_interval;
46 	unsigned int mail_vsize_bg_after_count;
47 	unsigned int mail_sort_max_read_count;
48 	bool mail_save_crlf;
49 	const char *mail_fsync;
50 	bool mmap_disable;
51 	bool dotlock_use_excl;
52 	bool mail_nfs_storage;
53 	bool mail_nfs_index;
54 	bool mailbox_list_index;
55 	bool mailbox_list_index_very_dirty_syncs;
56 	bool mailbox_list_index_include_inbox;
57 	bool mail_debug;
58 	bool mail_full_filesystem_access;
59 	bool maildir_stat_dirs;
60 	bool mail_shared_explicit_inbox;
61 	const char *lock_method;
62 	const char *pop3_uidl_format;
63 
64 	const char *hostname;
65 	const char *recipient_delimiter;
66 
67 	const char *mail_attachment_detection_options;
68 
69 	enum file_lock_method parsed_lock_method;
70 	enum fsync_mode parsed_fsync_mode;
71 
72 	const char *const *parsed_mail_attachment_content_type_filter;
73 	bool parsed_mail_attachment_exclude_inlined;
74 	bool parsed_mail_attachment_detection_add_flags;
75 	bool parsed_mail_attachment_detection_no_flags_on_fetch;
76 };
77 
78 struct mail_namespace_settings {
79 	const char *name;
80 	const char *type;
81 	const char *separator;
82 	const char *prefix;
83 	const char *location;
84 	const char *alias_for;
85 
86 	bool inbox;
87 	bool hidden;
88 	const char *list;
89 	bool subscriptions;
90 	bool ignore_on_failure;
91 	bool disabled;
92 	unsigned int order;
93 
94 	ARRAY(struct mailbox_settings *) mailboxes;
95 	struct mail_user_settings *user_set;
96 };
97 
98 /* <settings checks> */
99 #define MAILBOX_SET_AUTO_NO "no"
100 #define MAILBOX_SET_AUTO_CREATE "create"
101 #define MAILBOX_SET_AUTO_SUBSCRIBE "subscribe"
102 /* </settings checks> */
103 struct mailbox_settings {
104 	const char *name;
105 	const char *autocreate;
106 	const char *special_use;
107 	const char *driver;
108 	const char *comment;
109 	unsigned int autoexpunge;
110 	unsigned int autoexpunge_max_mails;
111 };
112 
113 struct mail_user_settings {
114 	const char *base_dir;
115 	const char *auth_socket_path;
116 	const char *mail_temp_dir;
117 
118 	const char *mail_uid;
119 	const char *mail_gid;
120 	const char *mail_home;
121 	const char *mail_chroot;
122 	const char *mail_access_groups;
123 	const char *mail_privileged_group;
124 	const char *valid_chroot_dirs;
125 
126 	unsigned int first_valid_uid, last_valid_uid;
127 	unsigned int first_valid_gid, last_valid_gid;
128 
129 	const char *mail_plugins;
130 	const char *mail_plugin_dir;
131 
132 	const char *mail_log_prefix;
133 
134 	const char *hostname;
135 	const char *postmaster_address;
136 
137 	ARRAY(struct mail_namespace_settings *) namespaces;
138 	ARRAY(const char *) plugin_envs;
139 
140 	/* May be NULL - use mail_storage_get_postmaster_address() instead of
141 	   directly accessing this. */
142 	const struct message_address *_parsed_postmaster_address;
143 	const struct smtp_address *_parsed_postmaster_address_smtp;
144 };
145 
146 extern const struct setting_parser_info mail_user_setting_parser_info;
147 extern const struct setting_parser_info mail_namespace_setting_parser_info;
148 extern const struct setting_parser_info mail_storage_setting_parser_info;
149 extern const struct mail_namespace_settings mail_namespace_default_settings;
150 extern const struct mailbox_settings mailbox_default_settings;
151 
152 struct ssl_iostream_settings;
153 
154 const void *
155 mail_user_set_get_driver_settings(const struct setting_parser_info *info,
156 				  const struct mail_user_settings *set,
157 				  const char *driver);
158 
159 const struct mail_storage_settings *
160 mail_user_set_get_storage_set(struct mail_user *user);
161 /* Get storage-specific settings, which may be namespace-specific. */
162 const void *mail_namespace_get_driver_settings(struct mail_namespace *ns,
163 					       struct mail_storage *storage);
164 
165 const struct dynamic_settings_parser *
166 mail_storage_get_dynamic_parsers(pool_t pool);
167 
168 bool mail_user_set_get_postmaster_address(const struct mail_user_settings *set,
169 					  const struct message_address **address_r,
170 					  const char **error_r);
171 bool mail_user_set_get_postmaster_smtp(const struct mail_user_settings *set,
172 				       const struct smtp_address **address_r,
173 				       const char **error_r);
174 
175 #endif
176