Mercurial > dovecot > core-2.2
changeset 22781:4b60d9bdc1a7
lib-storage: Add attachment detection settings
author | Aki Tuomi <aki.tuomi@dovecot.fi> |
---|---|
date | Mon, 20 Nov 2017 10:09:23 +0200 |
parents | a982d52a740b |
children | db50f01b8373 |
files | src/lib-storage/mail-storage-settings.c src/lib-storage/mail-storage-settings.h |
diffstat | 2 files changed, 37 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/mail-storage-settings.c Fri Nov 10 14:32:44 2017 +0200 +++ b/src/lib-storage/mail-storage-settings.c Mon Nov 20 10:09:23 2017 +0200 @@ -30,6 +30,7 @@ DEF(SET_STR_VARS, mail_attachment_dir), DEF(SET_STR, mail_attachment_hash), DEF(SET_SIZE, mail_attachment_min_size), + DEF(SET_STR, mail_attachment_detection_options), DEF(SET_STR_VARS, mail_attribute_dict), DEF(SET_UINT, mail_prefetch_count), DEF(SET_STR, mail_cache_fields), @@ -85,6 +86,7 @@ .mail_attachment_dir = "", .mail_attachment_hash = "%{sha1}", .mail_attachment_min_size = 1024*128, + .mail_attachment_detection_options = "", .mail_attribute_dict = "", .mail_prefetch_count = 0, .mail_cache_fields = "flags", @@ -395,7 +397,7 @@ } /* <settings checks> */ -static bool mail_storage_settings_check(void *_set, pool_t pool ATTR_UNUSED, +static bool mail_storage_settings_check(void *_set, pool_t pool, const char **error_r) { struct mail_storage_settings *set = _set; @@ -499,6 +501,34 @@ // FIXME: check set->mail_server_admin syntax (RFC 5464, Section 6.2.2) + /* parse mail_attachment_indicator_options */ + if (*set->mail_attachment_detection_options != '\0') { + ARRAY_TYPE(const_string) content_types; + p_array_init(&content_types, pool, 2); + + const char *const *options = + t_strsplit_spaces(set->mail_attachment_detection_options, " "); + + while(*options != NULL) { + const char *opt = *options; + + if (strcmp(opt, "add-flags-on-save") == 0) { + set->parsed_mail_attachment_detection_add_flags_on_save = TRUE; + } else if (strcmp(opt, "add-flags-on-fetch") == 0) { + set->parsed_mail_attachment_detection_add_flags_on_fetch = TRUE; + } else if (strcmp(opt, "exclude-inlined") == 0) { + set->parsed_mail_attachment_exclude_inlined = TRUE; + } else if (strncmp(opt, "content-type=", 13) == 0) { + const char *value = p_strdup(pool, opt+13); + array_append(&content_types, &value, 1); + } + options++; + } + + array_append_zero(&content_types); + set->parsed_mail_attachment_content_type_filter = array_idx(&content_types, 0); + } + return TRUE; }
--- a/src/lib-storage/mail-storage-settings.h Fri Nov 10 14:32:44 2017 +0200 +++ b/src/lib-storage/mail-storage-settings.h Mon Nov 20 10:09:23 2017 +0200 @@ -61,9 +61,15 @@ const char *ssl_client_ca_dir; const char *ssl_client_ca_file; const char *ssl_crypto_device; + const char *mail_attachment_detection_options; enum file_lock_method parsed_lock_method; enum fsync_mode parsed_fsync_mode; + + const char *const *parsed_mail_attachment_content_type_filter; + bool parsed_mail_attachment_exclude_inlined; + bool parsed_mail_attachment_detection_add_flags_on_save; + bool parsed_mail_attachment_detection_add_flags_on_fetch; }; struct mail_namespace_settings {