a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen#ifndef MAIL_STORAGE_SETTINGS_H
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen#define MAIL_STORAGE_SETTINGS_H
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen#include "file-lock.h"
b780aa272b742a43579cdb523cc79cc8d4521306Timo Sirainen#include "fsync-mode.h"
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen
2fb9ae42f9e36388ec6db24188b9108434043fd0Timo Sirainen#define MAIL_STORAGE_SET_DRIVER_NAME "MAIL"
2fb9ae42f9e36388ec6db24188b9108434043fd0Timo Sirainen
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainenstruct mail_user;
46e917c9fa05cbe7bddf805d3a9838b61e3960e1Timo Sirainenstruct mail_namespace;
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainenstruct mail_storage;
e98ba66a8ead146be66ba8219038a45fbf87b62cStephan Boschstruct message_address;
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainenstruct mail_storage_settings {
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen const char *mail_location;
b9f564d00b7a115f465ffd6840341c7b8f9bfc8aTimo Sirainen const char *mail_attachment_fs;
b9f564d00b7a115f465ffd6840341c7b8f9bfc8aTimo Sirainen const char *mail_attachment_dir;
b9f564d00b7a115f465ffd6840341c7b8f9bfc8aTimo Sirainen const char *mail_attachment_hash;
b9f564d00b7a115f465ffd6840341c7b8f9bfc8aTimo Sirainen uoff_t mail_attachment_min_size;
62041dfb7d6ac6e9c633a557075999cdfcff7bd5Timo Sirainen const char *mail_attribute_dict;
e15b305e90c9834734ccf35ed78f0ad29d570ee9Timo Sirainen unsigned int mail_prefetch_count;
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen const char *mail_cache_fields;
872d122a6f570e462f40341b7dd581dbd7d59f90Timo Sirainen const char *mail_always_cache_fields;
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen const char *mail_never_cache_fields;
186c198e258401b0d2d9374d7ac7e248dc4d7377Stephan Bosch const char *mail_server_comment;
186c198e258401b0d2d9374d7ac7e248dc4d7377Stephan Bosch const char *mail_server_admin;
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen unsigned int mail_cache_min_mail_count;
2ae85e9ccfdb416201d5a2043a64d198f8983874Timo Sirainen unsigned int mail_cache_unaccessed_field_drop;
2ae85e9ccfdb416201d5a2043a64d198f8983874Timo Sirainen uoff_t mail_cache_record_max_size;
2ae85e9ccfdb416201d5a2043a64d198f8983874Timo Sirainen uoff_t mail_cache_compress_min_size;
2ae85e9ccfdb416201d5a2043a64d198f8983874Timo Sirainen unsigned int mail_cache_compress_delete_percentage;
2ae85e9ccfdb416201d5a2043a64d198f8983874Timo Sirainen unsigned int mail_cache_compress_continued_percentage;
2ae85e9ccfdb416201d5a2043a64d198f8983874Timo Sirainen unsigned int mail_cache_compress_header_continue_count;
2ae85e9ccfdb416201d5a2043a64d198f8983874Timo Sirainen uoff_t mail_index_rewrite_min_log_bytes;
2ae85e9ccfdb416201d5a2043a64d198f8983874Timo Sirainen uoff_t mail_index_rewrite_max_log_bytes;
2ae85e9ccfdb416201d5a2043a64d198f8983874Timo Sirainen uoff_t mail_index_log_rotate_min_size;
2ae85e9ccfdb416201d5a2043a64d198f8983874Timo Sirainen uoff_t mail_index_log_rotate_max_size;
2ae85e9ccfdb416201d5a2043a64d198f8983874Timo Sirainen unsigned int mail_index_log_rotate_min_age;
2ae85e9ccfdb416201d5a2043a64d198f8983874Timo Sirainen unsigned int mail_index_log2_max_age;
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen unsigned int mailbox_idle_check_interval;
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen unsigned int mail_max_keyword_length;
036626b19f14bef582f96e556913ae91b1d67881Timo Sirainen unsigned int mail_max_lock_timeout;
68b5e132f1f8bb2528482310daffcc06c2f019d3Timo Sirainen unsigned int mail_temp_scan_interval;
a758be690d736655ed7c1e3dfb46d3aaf4dd5db2Timo Sirainen unsigned int mail_vsize_bg_after_count;
a85cf0bdd86ba36e6f1243e9b6848a335625185bTimo Sirainen unsigned int mail_sort_max_read_count;
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen bool mail_save_crlf;
b780aa272b742a43579cdb523cc79cc8d4521306Timo Sirainen const char *mail_fsync;
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen bool mmap_disable;
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen bool dotlock_use_excl;
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen bool mail_nfs_storage;
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen bool mail_nfs_index;
dc53fff3700362b544dcba166ff81420db227a60Timo Sirainen bool mailbox_list_index;
53cc097d3f8cd789f3c8fa0dfdd02bcda776230eTimo Sirainen bool mailbox_list_index_very_dirty_syncs;
e4122867044b44e9715c85ac373dbb1c03e0963dTimo Sirainen bool mailbox_list_index_include_inbox;
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen bool mail_debug;
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen bool mail_full_filesystem_access;
dca6d617a23e3f93af3b8df59acb46478179fe55Timo Sirainen bool maildir_stat_dirs;
0bd259973f98837cf0e41fdee3e2a578e51ad09eTimo Sirainen bool mail_shared_explicit_inbox;
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen const char *lock_method;
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen const char *pop3_uidl_format;
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen
c2ea6b029715a74b1f3724c7db05b222537371cdStephan Bosch const char *postmaster_address;
e98ba66a8ead146be66ba8219038a45fbf87b62cStephan Bosch
c2ea6b029715a74b1f3724c7db05b222537371cdStephan Bosch const char *hostname;
c2ea6b029715a74b1f3724c7db05b222537371cdStephan Bosch const char *recipient_delimiter;
c2ea6b029715a74b1f3724c7db05b222537371cdStephan Bosch
16cb5d65265dd0b216542803fd80c4b999ae118eTimo Sirainen const char *ssl_client_ca_dir;
56d1345c43bbd28c36b7faa85e4163bd9e874290Timo Sirainen const char *ssl_client_ca_file;
16cb5d65265dd0b216542803fd80c4b999ae118eTimo Sirainen const char *ssl_crypto_device;
8855d5f5d9962d8431c12974b9c4968844223c2bAki Tuomi const char *mail_attachment_detection_options;
16cb5d65265dd0b216542803fd80c4b999ae118eTimo Sirainen
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen enum file_lock_method parsed_lock_method;
b780aa272b742a43579cdb523cc79cc8d4521306Timo Sirainen enum fsync_mode parsed_fsync_mode;
3b4d146372a1d443c8482070bf4014a23d3a9cc5Timo Sirainen /* May be NULL - use mail_storage_get_postmaster_address() instead of
3b4d146372a1d443c8482070bf4014a23d3a9cc5Timo Sirainen directly accessing this. */
3b4d146372a1d443c8482070bf4014a23d3a9cc5Timo Sirainen const struct message_address *_parsed_postmaster_address;
8855d5f5d9962d8431c12974b9c4968844223c2bAki Tuomi
8855d5f5d9962d8431c12974b9c4968844223c2bAki Tuomi const char *const *parsed_mail_attachment_content_type_filter;
8855d5f5d9962d8431c12974b9c4968844223c2bAki Tuomi bool parsed_mail_attachment_exclude_inlined;
8855d5f5d9962d8431c12974b9c4968844223c2bAki Tuomi bool parsed_mail_attachment_detection_add_flags_on_save;
8855d5f5d9962d8431c12974b9c4968844223c2bAki Tuomi bool parsed_mail_attachment_detection_add_flags_on_fetch;
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen};
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainenstruct mail_namespace_settings {
f330867f937b7a8505807a02edd21524600822eeTimo Sirainen const char *name;
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen const char *type;
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen const char *separator;
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen const char *prefix;
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen const char *location;
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen const char *alias_for;
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen bool inbox;
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen bool hidden;
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen const char *list;
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen bool subscriptions;
de83c1e095ba081ef80f630bcd933e5e28aff94bTimo Sirainen bool ignore_on_failure;
57b819d3aa978b88ef478e4f2397c32db231ebb7Timo Sirainen bool disabled;
50053223085da761ce3f9491f428381503ce3ec9Timo Sirainen unsigned int order;
b215a8a123623782554a83f3025ef4e771bd8f01Timo Sirainen
4ee00532a265bdfb38539d811fcd12d51210ac35Timo Sirainen ARRAY(struct mailbox_settings *) mailboxes;
b215a8a123623782554a83f3025ef4e771bd8f01Timo Sirainen struct mail_user_settings *user_set;
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen};
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen
eb1572d7c44ebc7b0b039d085c3dbab2ef7043ddTimo Sirainen/* <settings checks> */
eb1572d7c44ebc7b0b039d085c3dbab2ef7043ddTimo Sirainen#define MAILBOX_SET_AUTO_NO "no"
eb1572d7c44ebc7b0b039d085c3dbab2ef7043ddTimo Sirainen#define MAILBOX_SET_AUTO_CREATE "create"
eb1572d7c44ebc7b0b039d085c3dbab2ef7043ddTimo Sirainen#define MAILBOX_SET_AUTO_SUBSCRIBE "subscribe"
eb1572d7c44ebc7b0b039d085c3dbab2ef7043ddTimo Sirainen/* </settings checks> */
eb1572d7c44ebc7b0b039d085c3dbab2ef7043ddTimo Sirainenstruct mailbox_settings {
eb1572d7c44ebc7b0b039d085c3dbab2ef7043ddTimo Sirainen const char *name;
eb1572d7c44ebc7b0b039d085c3dbab2ef7043ddTimo Sirainen const char *autocreate;
ed354926406e28254b581f821bb052f38d9c14e8Timo Sirainen const char *special_use;
d2e74f2af690b8e2d536400f02f397cbed1334b7Timo Sirainen const char *driver;
186c198e258401b0d2d9374d7ac7e248dc4d7377Stephan Bosch const char *comment;
1ae5d61ec366fdb2f3c5b150ca378d6141b0f4bdTimo Sirainen unsigned int autoexpunge;
8f0503ea115c4bb1eb1857023cc5051cf4bed807Baofeng Wang unsigned int autoexpunge_max_mails;
eb1572d7c44ebc7b0b039d085c3dbab2ef7043ddTimo Sirainen};
eb1572d7c44ebc7b0b039d085c3dbab2ef7043ddTimo Sirainen
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainenstruct mail_user_settings {
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen const char *base_dir;
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen const char *auth_socket_path;
55a14bce15b9f44441b5f56616d73651a294d770Timo Sirainen const char *mail_temp_dir;
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen const char *mail_uid;
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen const char *mail_gid;
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen const char *mail_home;
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen const char *mail_chroot;
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen const char *mail_access_groups;
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen const char *mail_privileged_group;
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen const char *valid_chroot_dirs;
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen unsigned int first_valid_uid, last_valid_uid;
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen unsigned int first_valid_gid, last_valid_gid;
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen const char *mail_plugins;
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen const char *mail_plugin_dir;
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen
d1fff80640050631b06bfab904a34b2ad24601e8Timo Sirainen const char *mail_log_prefix;
d1fff80640050631b06bfab904a34b2ad24601e8Timo Sirainen
4ee00532a265bdfb38539d811fcd12d51210ac35Timo Sirainen ARRAY(struct mail_namespace_settings *) namespaces;
4ee00532a265bdfb38539d811fcd12d51210ac35Timo Sirainen ARRAY(const char *) plugin_envs;
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen};
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen
7744586e3e0fd60158abfbb03a233d3bd8d6c48bTimo Sirainenextern const struct setting_parser_info mail_user_setting_parser_info;
7744586e3e0fd60158abfbb03a233d3bd8d6c48bTimo Sirainenextern const struct setting_parser_info mail_namespace_setting_parser_info;
7744586e3e0fd60158abfbb03a233d3bd8d6c48bTimo Sirainenextern const struct setting_parser_info mail_storage_setting_parser_info;
7744586e3e0fd60158abfbb03a233d3bd8d6c48bTimo Sirainenextern const struct mail_namespace_settings mail_namespace_default_settings;
eb1572d7c44ebc7b0b039d085c3dbab2ef7043ddTimo Sirainenextern const struct mailbox_settings mailbox_default_settings;
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainenconst void *
2fb9ae42f9e36388ec6db24188b9108434043fd0Timo Sirainenmail_user_set_get_driver_settings(const struct setting_parser_info *info,
2fb9ae42f9e36388ec6db24188b9108434043fd0Timo Sirainen const struct mail_user_settings *set,
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen const char *driver);
46e917c9fa05cbe7bddf805d3a9838b61e3960e1Timo Sirainen
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainenconst struct mail_storage_settings *
2fb9ae42f9e36388ec6db24188b9108434043fd0Timo Sirainenmail_user_set_get_storage_set(struct mail_user *user);
46e917c9fa05cbe7bddf805d3a9838b61e3960e1Timo Sirainen/* Get storage-specific settings, which may be namespace-specific. */
46e917c9fa05cbe7bddf805d3a9838b61e3960e1Timo Sirainenconst void *mail_namespace_get_driver_settings(struct mail_namespace *ns,
46e917c9fa05cbe7bddf805d3a9838b61e3960e1Timo Sirainen struct mail_storage *storage);
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen
5d03d9f439e41c90215a3c938ffebe4c2a8ae257Timo Sirainenconst struct dynamic_settings_parser *
5d03d9f439e41c90215a3c938ffebe4c2a8ae257Timo Sirainenmail_storage_get_dynamic_parsers(pool_t pool);
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen
3b4d146372a1d443c8482070bf4014a23d3a9cc5Timo Sirainenbool mail_storage_get_postmaster_address(const struct mail_storage_settings *set,
3b4d146372a1d443c8482070bf4014a23d3a9cc5Timo Sirainen const struct message_address **address_r,
3b4d146372a1d443c8482070bf4014a23d3a9cc5Timo Sirainen const char **error_r);
3b4d146372a1d443c8482070bf4014a23d3a9cc5Timo Sirainen
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen#endif