}
}
+#ifdef EXPERIMENTAL_MAIL_UTF8
void smtp_server_reply_ehlo_add_smtputf8(struct smtp_server_reply *reply)
{
+ struct smtp_server_cmd_ctx *cmd = &reply->command->context;
+ struct smtp_server_connection *conn = cmd->conn;
+ enum smtp_capability caps = conn->set.capabilities;
+
+ if ((caps & SMTP_CAPABILITY_SMTPUTF8) == 0)
+ return;
smtp_server_reply_ehlo_add(reply, "SMTPUTF8");
}
+#endif
void smtp_server_reply_ehlo_add_starttls(struct smtp_server_reply *reply)
{
struct smtp_server_reply *reply);
void smtp_server_reply_ehlo_add_pipelining(struct smtp_server_reply *reply);
void smtp_server_reply_ehlo_add_size(struct smtp_server_reply *reply);
+#ifdef EXPERIMENTAL_MAIL_UTF8
void smtp_server_reply_ehlo_add_smtputf8(struct smtp_server_reply *reply);
+#endif
void smtp_server_reply_ehlo_add_starttls(struct smtp_server_reply *reply);
void smtp_server_reply_ehlo_add_vrfy(struct smtp_server_reply *reply);
void smtp_server_reply_ehlo_add_xclient(struct smtp_server_reply *reply);
SMTP_CAPABILITY_8BITMIME |
SMTP_CAPABILITY_CHUNKING |
SMTP_CAPABILITY_XCLIENT |
+ SMTP_CAPABILITY__ORCPT;
+
#ifdef EXPERIMENTAL_MAIL_UTF8
- SMTP_CAPABILITY_SMTPUTF8 |
+ if (client->lmtp_set->mail_utf8_extensions)
+ lmtp_set.capabilities |= SMTP_CAPABILITY_SMTPUTF8;
#endif
- SMTP_CAPABILITY__ORCPT;
if (!conn_tls && master_service_ssl_is_enabled(master_service))
lmtp_set.capabilities |= SMTP_CAPABILITY_STARTTLS;
lmtp_set.hostname = client->lda_set->hostname;
DEF(BOOLLIST, mail_plugins),
DEF(STR, mail_plugin_dir),
+ DEF(BOOL, mail_utf8_extensions),
SETTING_DEFINE_LIST_END
};
.mail_plugins = ARRAY_INIT,
.mail_plugin_dir = MODULEDIR,
+ .mail_utf8_extensions = FALSE,
};
const struct setting_parser_info lmtp_setting_parser_info = {
{
struct lmtp_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 (lmtp_settings_parse_workarounds(set, error_r) < 0)
return FALSE;
bool lmtp_rcpt_check_quota;
bool lmtp_add_received_header;
bool lmtp_verbose_replies;
+ bool mail_utf8_extensions;
unsigned int lmtp_user_concurrency_limit;
const char *lmtp_hdr_delivery_address;
const char *lmtp_rawlog_dir;
"AUTH", "%s", str_c(param));
}
+ if ((backend_caps & SMTP_CAPABILITY_SMTPUTF8) != 0 &&
+ subm_client->set->mail_utf8_extensions)
+ smtp_server_reply_ehlo_add(reply, "SMTPUTF8");
if ((backend_caps & SMTP_CAPABILITY_BINARYMIME) != 0 &&
(backend_caps & SMTP_CAPABILITY_CHUNKING) != 0)
smtp_server_reply_ehlo_add(reply, "BINARYMIME");
if (array_is_empty(&set->submission_backend_capabilities)) {
subm_client->backend_capabilities = SMTP_CAPABILITY_8BITMIME;
+#ifdef EXPERIMENTAL_MAIL_UTF8
+ if (subm_client->set->mail_utf8_extensions)
+ subm_client->backend_capabilities |= SMTP_CAPABILITY_SMTPUTF8;
+#endif
return;
}
smtp_set.capabilities = SMTP_CAPABILITY_SIZE |
SMTP_CAPABILITY_ENHANCEDSTATUSCODES | SMTP_CAPABILITY_AUTH |
SMTP_CAPABILITY_XCLIENT;
+#ifdef EXPERIMENTAL_MAIL_UTF8
+ if (subm_client->set->mail_utf8_extensions)
+ smtp_set.capabilities |= SMTP_CAPABILITY_SMTPUTF8;
+#endif
if (client_is_tls_enabled(client))
smtp_set.capabilities |= SMTP_CAPABILITY_STARTTLS;
smtp_set.hostname = subm_client->set->hostname;
static const struct setting_define submission_login_setting_defines[] = {
DEF(STR, hostname),
+ DEF(BOOL, mail_utf8_extensions),
DEF(SIZE, submission_max_mail_size),
DEF(BOOLLIST, submission_client_workarounds),
static const struct submission_login_settings submission_login_default_settings = {
.hostname = "",
+ .mail_utf8_extensions = FALSE,
.submission_max_mail_size = 0,
.submission_client_workarounds = ARRAY_INIT,
{
struct submission_login_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 (submission_login_settings_parse_workarounds(set, error_r) < 0)
return FALSE;
struct submission_login_settings {
pool_t pool;
const char *hostname;
+ bool mail_utf8_extensions;
/* submission: */
uoff_t submission_max_mail_size;
/* propagate capabilities */
caps |= SMTP_CAPABILITY_AUTH | SMTP_CAPABILITY_PIPELINING |
SMTP_CAPABILITY_SIZE | SMTP_CAPABILITY_ENHANCEDSTATUSCODES |
- SMTP_CAPABILITY_CHUNKING | SMTP_CAPABILITY_BURL
+ SMTP_CAPABILITY_CHUNKING | SMTP_CAPABILITY_BURL;
#ifdef EXPERIMENTAL_MAIL_UTF8
- | SMTP_CAPABILITY_SMTPUTF8
+ if (client->set->mail_utf8_extensions)
+ caps |= SMTP_CAPABILITY_SMTPUTF8;
#endif
- ;
caps &= SUBMISSION_SUPPORTED_SMTP_CAPABILITIES;
smtp_server_connection_set_capabilities(client->conn, caps);
}
DEF(BOOLLIST, submission_client_workarounds),
DEF(STR_NOVARS, submission_logout_format),
DEF(BOOL, submission_add_received_header),
+ DEF(BOOL, mail_utf8_extensions),
DEF(BOOLLIST, submission_backend_capabilities),
.submission_client_workarounds = ARRAY_INIT,
.submission_logout_format = "in=%{input} out=%{output}",
.submission_add_received_header = TRUE,
+ .mail_utf8_extensions = FALSE,
.submission_backend_capabilities = ARRAY_INIT,
{
struct submission_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 (submission_settings_parse_workarounds(set, error_r) < 0)
return FALSE;
ARRAY_TYPE(const_string) submission_client_workarounds;
const char *submission_logout_format;
bool submission_add_received_header;
+ bool mail_utf8_extensions;
/* submission backend: */
ARRAY_TYPE(const_string) submission_backend_capabilities;