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