SPECIAL-USE flags in mailbox configuration. */
if (!user->have_special_use_mailboxes)
imap_unset_capability(set_instance, "SPECIAL-USE");
+ if (!client->set->mail_utf8_extensions)
+ imap_unset_capability(set_instance, "UTF8=ACCEPT");
const struct imap_settings *modified_set;
if (settings_get(client->user->event, &imap_setting_parser_info,
return;
const struct imap_feature *feat = imap_feature_idx(feature_idx);
+
+ if ((feat->mailbox_features & MAILBOX_FEATURE_UTF8ACCEPT) != 0 &&
+ !client->set->mail_utf8_extensions) {
+ e_debug(client->event, "Client attempted to enable UTF8 when it's disabled");
+ return;
+ }
+
feat->callback(client);
/* set after the callback, so the callback can see what features were
previously set */
DEF(ENUM, imap_fetch_failure),
DEF(BOOL, imap_metadata),
DEF(BOOL, imap_literal_minus),
+ DEF(BOOL, mail_utf8_extensions),
#ifdef BUILD_IMAP_HIBERNATE
DEF(TIME, imap_hibernate_timeout),
#endif
.imap_fetch_failure = "disconnect-immediately:disconnect-after:no-after",
.imap_metadata = FALSE,
.imap_literal_minus = FALSE,
+ .mail_utf8_extensions = FALSE,
#ifdef DOVECOT_PRO_EDITION
.imap_hibernate_timeout = 30,
#else
{ "service/imap/imap_capability/SPECIAL-USE", "yes" },
{ "service/imap/imap_capability/LITERAL+", "yes" },
{ "service/imap/imap_capability/LITERAL-", "yes" },
+ { "service/imap/imap_capability/UTF8=ACCEPT", "yes" },
{ "imap_id_send/name", DOVECOT_NAME },
{ NULL, NULL },
};
{
struct imap_settings *set = _set;
+#ifndef EXPERIMENTAL_MAIL_UTF8
+ if (set->mail_utf8_extensions) {
+ *error_r = "Dovecot not built with --enable-experimental-mail-utf8";
+ return FALSE;
+ }
+#endif
+
if (imap_settings_parse_workarounds(set, error_r) < 0)
return FALSE;