From 8c5d388a6e12d1a8bd4aa565920238f8a921414a Mon Sep 17 00:00:00 2001 From: Jeremy Harris Date: Wed, 9 Dec 2015 17:29:26 +0000 Subject: [PATCH] I18N: Move EAI support from Experimental to mainline --- doc/doc-docbook/spec.xfpt | 186 +++++++++++++++++- doc/doc-txt/ChangeLog | 3 + doc/doc-txt/experimental-spec.txt | 96 --------- src/src/EDITME | 16 +- src/src/acl.c | 16 +- src/src/config.h.defaults | 3 +- src/src/deliver.c | 10 +- src/src/dns.c | 4 +- src/src/exim.c | 20 +- src/src/expand.c | 14 +- src/src/functions.h | 6 +- src/src/globals.c | 8 +- src/src/globals.h | 4 +- src/src/imap_utf7.c | 2 +- src/src/macros.h | 2 +- src/src/queue.c | 4 +- src/src/readconf.c | 2 +- src/src/receive.c | 4 +- src/src/routers/redirect.c | 4 +- src/src/smtp_in.c | 16 +- src/src/spool_in.c | 6 +- src/src/spool_out.c | 2 +- src/src/string.c | 8 +- src/src/structs.h | 4 +- src/src/tls-gnu.c | 2 +- src/src/tls-openssl.c | 2 +- src/src/transports/smtp.c | 20 +- src/src/utf8.c | 2 +- src/src/verify.c | 14 +- test/scripts/4200-International/REQUIRES | 2 +- .../4210-GnuTLS-International/REQUIRES | 2 +- .../4220-OpenSSL-International/REQUIRES | 2 +- 32 files changed, 285 insertions(+), 201 deletions(-) diff --git a/doc/doc-docbook/spec.xfpt b/doc/doc-docbook/spec.xfpt index 418cb1a11..aabf85865 100644 --- a/doc/doc-docbook/spec.xfpt +++ b/doc/doc-docbook/spec.xfpt @@ -9373,6 +9373,19 @@ you can use condition = ${if >{$acl_m4}{3}} .endd + + +.new +.vitem &*${imapfolder{*&<&'foldername'&>&*}}*& +.cindex expansion "imap folder" +.cindex "&%imapfolder%& expansion item" +This item converts a (possibly multilevel, or with non-ASCII characters) +folder specification to a Maildir name for filesystem use. +For information on internationalisation support see &<>&. +.wen + + + .vitem &*${length{*&<&'string1'&>&*}{*&<&'string2'&>&*}}*& .cindex "expansion" "string truncation" .cindex "&%length%& expansion item" @@ -10464,6 +10477,23 @@ This forces the letters in the string into upper-case. .cindex "expansion" "utf-8 forcing" .cindex "&%utf8clean%& expansion item" This replaces any invalid utf-8 sequence in the string by the character &`?`&. + +.new +.vitem "&*${utf8_domain_to_alabel:*&<&'string'&>&*}*&" &&& + "&*${utf8_domain_from_alabel:*&<&'string'&>&*}*&" &&& + "&*${utf8_localpart_to_alabel:*&<&'string'&>&*}*&" &&& + "&*${utf8_localpart_from_alabel:*&<&'string'&>&*}*&" +.cindex expansion UTF-8 +.cindex UTF-8 expansion +.cindex EAI +.cindex internationalisation +.cindex "&%utf8_domain_to_alabel%& expansion item" +.cindex "&%utf8_domain_from_alabel%& expansion item" +.cindex "&%utf8_localpart_to_alabel%& expansion item" +.cindex "&%utf8_localpart_from_alabel%& expansion item" +These convert EAI mail name components between UTF-8 and a-label forms. +For information on internationalisation support see &<>&. +.wen .endlist @@ -13615,6 +13645,7 @@ See also the &'Policy controls'& section above. .row &%ignore_fromline_local%& "allow &""From ""& from local SMTP" .row &%pipelining_advertise_hosts%& "advertise pipelining to these hosts" .row &%prdr_enable%& "advertise PRDR to all hosts" +.row &%smtputf8_advertise_hosts%& "advertise SMTPUTF8 to these hosts" .row &%tls_advertise_hosts%& "advertise TLS to these hosts" .endtable @@ -16378,6 +16409,17 @@ example, instead of &"Administrative prohibition"&, it might give: 550 failing address in "From" header is: >& for details of Exim's support for internationalisation. +.wen + + .option spamd_address main string "see below" This option is available when Exim is compiled with the content-scanning extension. It specifies how Exim connects to SpamAssassin's &%spamd%& daemon. @@ -28665,6 +28707,13 @@ data is read. &*Note:*& This control applies only to the current message, not to any others that are being submitted at the same time using &%-bs%& or &%-bS%&. + +.new +.vitem &*control&~=&~utf8_downconvert*& +This control enables conversion of UTF-8 in message addresses +to a-label form. +For details see &<>&. +.wen .endlist vlist @@ -35215,6 +35264,7 @@ extensions (ESMTP), encryption, or authentication were used. If the SMTP session was encrypted, there is an additional X field that records the cipher suite that was used. +.cindex log protocol The protocol is set to &"esmtpsa"& or &"esmtpa"& for messages received from hosts that have authenticated themselves using the SMTP AUTH command. The first value is used when the SMTP connection was encrypted (&"secure"&). In this case @@ -35385,6 +35435,7 @@ the following table: &`id `& message id for incoming message &`P `& on &`<=`& lines: protocol used &` `& on &`=>`& and &`**`& lines: return path +&`PRX `& on &'<='& and&`=>`& lines: proxy address &`QT `& on &`=>`& lines: time spent on queue so far &` `& on &"Completed"& lines: time spent on queue &`R `& on &`<=`& lines: reference for local bounce @@ -38144,13 +38195,13 @@ is an IP address and any subsequent elements are options. Options are a string =. The list of options is in the following table: .display -&`auth `& authentication method -&`name `& authentication username -&`pass `& authentication password -&`port `& tcp port -&`tmo `& connection timeout -&`pri `& priority -&`weight `& selection bias +&'auth '& authentication method +&'name '& authentication username +&'pass '& authentication password +&'port '& tcp port +&'tmo '& connection timeout +&'pri '& priority +&'weight '& selection bias .endd More details on each of these options follows: @@ -38198,6 +38249,127 @@ This will add a component tagged with &"PRX="& to the line. . //////////////////////////////////////////////////////////////////////////// . //////////////////////////////////////////////////////////////////////////// +.chapter "Internationalisation" "CHAPi18n" &&& + "Internationalisation"" +.cindex internationalisation "email address" +.cindex EAI +.cindex i18n +.cindex UTF-8 "mail name handling" + +.new +Exim has support for Internationalised mail names. +To include this it must be built with SUPPORT_I18N and the libidn library. +Standards supported are RFCs 2060, 5890, 6530 and 6533. + +.section "MTA operations" SECTi18nMTA +.cindex SMTPUTF8 "ESMTP option" +The main configuration option &%smtputf8_advertise_hosts%& specifies +a host list. If this matches the sending host and +accept_8bitmime is true (the default) then the ESMTP option +SMTPUTF8 will be advertised. + +If the sender specifies the SMTPUTF8 option on a MAIL command +international handling for the message is enabled and +the expansion variable &$message_smtputf8$& will have value TRUE. + +The option &%allow_utf8_domains%& is set to true for this +message. All DNS lookups are converted to a-label form +whatever the setting of &%allow_utf8_domains%& +when Exim is built with SUPPORT_I18N. + +Both localparts and domain are maintained as the original +UTF-8 form internally; any comparison or regular-expression use will +require appropriate care. Filenames created, eg. by +the appendfile transport, will have UTF-8 names. + +Helo names sent by the smtp transport will have any UTF-8 +components expanded to a-label form, +and any certificate name checks will be done using the a-label +form of the name. + +.cindex log protocol +.cindex SMTPUTF8 logging +Log lines and Received-by: header lines will acquire a "utf8" +prefix on the protocol element, eg. utf8esmtp. + +The following expansion operator can be used: +.code +${utf8_domain_to_alabel:str} +${utf8_domain_from_alabel:str} +${utf8_localpart_to_alabel:str} +${utf8_localpart_from_alabel:str} +.endd + +ACLs may use the following modifier: +.display +control = utf8_downconvert +control = utf8_downconvert/ +.endd +This sets a flag requiring that addresses are converted to +a-label form before smtp delivery, for use in a +Message Submission Agent context. +If a value is appended it may be: +.display +&`1 `& (default) mandatory downconversion +&`0 `& no downconversion +&`-1 `& if SMTPUTF8 not supported by destination host +.endd + +If mua_wrapper is set, the utf8_downconvert control +is initially set to -1. + + +There is no explicit support for VRFY and EXPN. +Configurations supporting these should inspect +&$smtp_command_argument$& for an SMTPUTF8 argument. + +There is no support for LMTP on Unix sockets. +Using the "lmtp" protocol option on an smtp transport, +for LMTP over TCP, should work as expected. + +There is no support for DSN unitext handling, +and no provision for converting logging from or to UTF-8. + + + +.section "MDA operations" SECTi18nMDA +To aid in constructing names suitable for IMAP folders +the following expansion operator can be used: +.code +${imapfolder {} {} {}} +.endd + +The string is converted from the charset specified by +the "headers charset" command (in a filter file) +or &%headers_charset%& main configuration option (otherwise), +to the +modified UTF-7 encoding specified by RFC 2060, +with the following exception: All occurences of +(which has to be a single character) +are replaced with periods ("."), and all periods and slashes that are not + and are not in the string are BASE64 encoded. + +The third argument can be omitted, defaulting to an empty string. +The second argument can be omitted, defaulting to "/". + +This is the encoding used by Courier for Maildir names on disk, and followed +by many other IMAP servers. + +Examples: +.display +&`${imapfolder {Foo/Bar}} `& yields &`Foo.Bar`& +&`${imapfolder {Foo/Bar}{.}{/}} `& yields &`Foo&&AC8-Bar`& +&`${imapfolder {Räksmörgås}} `& yields &`R&&AOQ-ksm&&APY-rg&&AOU-s`& +.endd + +Note that the source charset setting is vital, and also that characters +must be representable in UTF-16. + +.wen + +. //////////////////////////////////////////////////////////////////////////// +. //////////////////////////////////////////////////////////////////////////// + .chapter "Adding new drivers or lookup types" "CHID13" &&& "Adding drivers or lookups" .cindex "adding drivers" diff --git a/doc/doc-txt/ChangeLog b/doc/doc-txt/ChangeLog index c167f8392..eab4f6547 100644 --- a/doc/doc-txt/ChangeLog +++ b/doc/doc-txt/ChangeLog @@ -120,6 +120,9 @@ JH/26 Move PROXY support from Experimental to mainline, enabled for a build is renamed to hosts_proxy, and the proxy_{host,target}_{address,port}. variables are renamed to proxy_{local,external}_{address,port}. +JH/27 Move Internationalisation support from Experimental to mainline, enabled + for a build by defining SUPPORT_I18N + Exim version 4.86 ----------------- diff --git a/doc/doc-txt/experimental-spec.txt b/doc/doc-txt/experimental-spec.txt index 45e7d1ba1..aa4cb464d 100644 --- a/doc/doc-txt/experimental-spec.txt +++ b/doc/doc-txt/experimental-spec.txt @@ -1125,102 +1125,6 @@ $tls_out_tlsa_usage (detailed above). -INTERNATIONAL ------------------------------------------------------------- -SMTPUTF8 -Internationalised mail name handling. -RFCs 6530, 6533, 5890 - -Compile with EXPERIMENTAL_INTERNATIONAL and libidn. - -New main config option smtputf8_advertise_hosts, default '*', -a host list. If this matches the sending host and -accept_8bitmime is true (the default) then the ESMTP option -SMTPUTF8 will be advertised. - -If the sender specifies the SMTPUTF8 option on a MAIL command -international handling for the message is enabled and -the expansion variable $message_smtputf8 will have value TRUE. - -The option allow_utf8_domains is set to true for this -message. All DNS lookups are converted to a-label form -whatever the setting of allow_utf8_domains. - -Both localparts and domain are maintained as the original -utf8 form internally; any matching or regex use will -require appropriate care. Filenames created, eg. by -the appendfile transport, will have utf8 name. - -Helo names sent by the smtp transport will have any utf8 -components expanded to a-label form. - -Any certificate name checks will be done using the a-label -form of the name. - -Log lines and Received-by: header lines will aquire a "utf8" -prefix on the protocol element, eg. utf8esmtp. - -New expansion operators: - ${utf8_domain_to_alabel:str} - ${utf8_domain_from_alabel:str} - ${utf8_localpart_to_alabel:str} - ${utf8_localpart_from_alabel:str} - -New "control = utf8_downconvert" ACL modifier, -sets a flag requiring that addresses are converted to -a-label form before smtp delivery, for use in a -Message Submission Agent context. Can also be -phrased as "control = utf8_downconvert/1" and is -mandatory. The flag defaults to zero and can be cleared -by "control = utf8_downconvert/0". The value "-1" -may also be used, to use a-label for only if the -destination host does not support SMTPUTF8. - -If mua_wrapper is set, the utf8_downconvert control -defaults to -1 (convert if needed). - - -There is no explicit support for VRFY and EXPN. -Configurations supporting these should inspect -$smtp_command_argument for an SMTPUTF8 argument. - -There is no support for LMTP on Unix sockets. -Using the "lmtp" protocol option on an smtp transport, -for LMTP over TCP, should work as expected. - -Known issues: - - DSN unitext handling is not present - - no provision for converting logging from or to UTF-8 - ----- -IMAP folder names - -New expansion operator: - -${imapfolder {} {} {}} - -The string is converted from the charset specified by the headers charset -command (in a filter file) or headers_charset global option, to the -modified UTF-7 encoding specified by RFC 2060, with the following -exception: All occurences of (which has to be a single character) -are replaced with periods ("."), and all periods and slashes that aren't - and are not in the string are BASE64 encoded. - -The third argument can be omitted, defaulting to an empty string. -The second argument can be omitted, defaulting to "/". - -This is the encoding used by Courier for Maildir names on disk, and followed -by many other IMAP servers. - - Example 1: ${imapfolder {Foo/Bar}} yields "Foo.Bar". - Example 2: ${imapfolder {Foo/Bar}{.}{/}} yields "Foo&AC8-Bar". - Example 3: ${imapfolder {Räksmörgås}} yields "R&AOQ-ksm&APY-rg&AOU-s". - -Note that the source charset setting is vital, and also that characters -must be representable in UTF-16. - - - DSN extra information --------------------- If compiled with EXPERIMENTAL_DSN_INFO extra information will be added diff --git a/src/src/EDITME b/src/src/EDITME index a67343b3a..de25abd5e 100644 --- a/src/src/EDITME +++ b/src/src/EDITME @@ -496,11 +496,6 @@ EXIM_MONITOR=eximon.bin # Note: Enabling this unconditionally overrides DISABLE_DNSSEC # EXPERIMENTAL_DANE=yes -# Uncomment the following to add Internationalisation features. You need to -# have the IDN library installed. -# EXPERIMENTAL_INTERNATIONAL=yes -# LDFLAGS += -lidn - ############################################################################### # THESE ARE THINGS YOU MIGHT WANT TO SPECIFY # ############################################################################### @@ -931,6 +926,17 @@ ZCAT_COMMAND=/usr/bin/zcat # SUPPORT_PROXY=yes +#------------------------------------------------------------------------------ +# Internationalisation. +# +# Uncomment the following to include Internationalisation features. This is the +# SMTPUTF8 ESMTP extension, and associated facilities for handling UTF8 domain +# and localparts, per RFCs 5890, 6530 and 6533. +# You need to have the IDN library installed. + +# SUPPORT_I18N=yes +# LDFLAGS += -lidn + #------------------------------------------------------------------------------ # Support for authentication via Radius is also available. The Exim support, diff --git a/src/src/acl.c b/src/src/acl.c index 911ecfed2..f310a87d3 100644 --- a/src/src/acl.c +++ b/src/src/acl.c @@ -208,7 +208,7 @@ enum { #endif CONTROL_FAKEDEFER, CONTROL_FAKEREJECT, -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N CONTROL_UTF8_DOWNCONVERT, #endif CONTROL_NO_MULTILINE, @@ -251,7 +251,7 @@ static uschar *controls[] = { #endif US"fakedefer", US"fakereject", -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N US"utf8_downconvert", #endif US"no_multiline_responses", @@ -693,7 +693,7 @@ static unsigned int control_forbids[] = { #endif (1<prop.utf8_msg = message_smtputf8)) { sender_vaddr->prop.utf8_downcvt = message_utf8_downconvert == 1; @@ -3402,7 +3402,7 @@ for (; cb != NULL; cb = cb->next) } return ERROR; - #ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N case CONTROL_UTF8_DOWNCONVERT: if (*p == '/') { @@ -3440,7 +3440,7 @@ for (; cb != NULL; cb = cb->next) break; } return ERROR; - #endif +#endif } break; @@ -4465,7 +4465,7 @@ if (where == ACL_WHERE_RCPT) *log_msgptr = US"defer in percent_hack_domains check"; return DEFER; } -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N if ((addr->prop.utf8_msg = message_smtputf8)) { addr->prop.utf8_downcvt = message_utf8_downconvert == 1; diff --git a/src/src/config.h.defaults b/src/src/config.h.defaults index 6e2c22063..37f47dccf 100644 --- a/src/src/config.h.defaults +++ b/src/src/config.h.defaults @@ -131,8 +131,8 @@ it's a default value. */ #define SPOOL_MODE 0640 #define STRING_SPRINTF_BUFFER_SIZE (8192 * 4) -#define SUPPORT_A6 #define SUPPORT_CRYPTEQ +#define SUPPORT_I18N #define SUPPORT_MAILDIR #define SUPPORT_MAILSTORE #define SUPPORT_MBX @@ -177,7 +177,6 @@ it's a default value. */ #define EXPERIMENTAL_DSN_INFO #define EXPERIMENTAL_DMARC #define EXPERIMENTAL_EVENT -#define EXPERIMENTAL_INTERNATIONAL #define EXPERIMENTAL_REDIS #define EXPERIMENTAL_SPF #define EXPERIMENTAL_SRS diff --git a/src/src/deliver.c b/src/src/deliver.c index 53712b269..b816b1a77 100644 --- a/src/src/deliver.c +++ b/src/src/deliver.c @@ -872,7 +872,7 @@ else if (LOGGING(sender_on_delivery) || msg) s = string_append(s, &size, &ptr, 3, US" F=<", -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N testflag(addr, af_utf8_downcvt) ? string_address_utf8_to_alabel(sender_address, NULL) : @@ -5771,7 +5771,7 @@ if (process_recipients != RECIP_IGNORE) recipient_item *r = recipients_list + i; address_item *new = deliver_make_addr(r->address, FALSE); new->prop.errors_address = r->errors_to; -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N if ((new->prop.utf8_msg = message_smtputf8)) { new->prop.utf8_downcvt = message_utf8_downconvert == 1; @@ -7327,7 +7327,7 @@ wording. */ } /* output machine readable part */ -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N if (message_smtputf8) fprintf(f, "--%s\n" "Content-type: message/global-delivery-status\n\n" @@ -7428,7 +7428,7 @@ wording. */ } } -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N if (message_smtputf8) fputs(topt & topt_no_body ? "Content-type: message/global-headers\n\n" : "Content-type: message/global\n\n", @@ -8074,7 +8074,7 @@ if (!regex_PRDR) regex_PRDR = regex_must_compile(US"\\n250[\\s\\-]PRDR(\\s|\\n|$)", FALSE, TRUE); #endif -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N if (!regex_UTF8) regex_UTF8 = regex_must_compile(US"\\n250[\\s\\-]SMTPUTF8(\\s|\\n|$)", FALSE, TRUE); #endif diff --git a/src/src/dns.c b/src/src/dns.c index 9859e8365..02eef25a6 100644 --- a/src/src/dns.c +++ b/src/src/dns.c @@ -620,7 +620,7 @@ if (previous != NULL) return previous->data.val; } -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N /* Convert all names to a-label form before doing lookup */ { uschar * alabel; @@ -851,7 +851,7 @@ for (i = 0; i < 10; i++) if ( rr_name && Ustrcmp(rr_name, *fully_qualified_name) != 0 && rr_name[0] != '*' -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N && ( !string_is_utf8(*fully_qualified_name) || Ustrcmp(rr_name, string_domain_utf8_to_alabel(*fully_qualified_name, NULL)) != 0 diff --git a/src/src/exim.c b/src/src/exim.c index 4e90ca8fd..0fd95dd0c 100644 --- a/src/src/exim.c +++ b/src/src/exim.c @@ -823,6 +823,9 @@ fprintf(f, "Support for:"); #ifndef DISABLE_DNSSEC fprintf(f, " DNSSEC"); #endif +#ifdef SUPPORT_I18N + fprintf(f, " I18N"); +#endif #ifndef DISABLE_OCSP fprintf(f, " OCSP"); #endif @@ -856,9 +859,6 @@ fprintf(f, "Support for:"); #ifdef EXPERIMENTAL_DSN_INFO fprintf(f, " Experimental_DSN_info"); #endif -#ifdef EXPERIMENTAL_INTERNATIONAL - fprintf(f, " Experimental_International"); -#endif #ifdef EXPERIMENTAL_EVENT fprintf(f, " Experimental_Event"); #endif @@ -1031,7 +1031,7 @@ DEBUG(D_any) do { #ifdef SUPPORT_TLS tls_version_report(f); #endif -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N utf8_version_report(f); #endif @@ -2561,12 +2561,12 @@ for (i = 1; i < argc; i++) if (temp >= argrest && *temp == '.') f_end_dot = TRUE; allow_domain_literals = TRUE; strip_trailing_dot = TRUE; -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N allow_utf8_domains = TRUE; #endif sender_address = parse_extract_address(argrest, &errmess, &dummy_start, &dummy_end, &sender_address_domain, TRUE); -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N message_smtputf8 = string_is_utf8(sender_address); allow_utf8_domains = FALSE; #endif @@ -3736,7 +3736,7 @@ is equivalent to the ability to modify a setuid binary! This needs to happen before we read the main configuration. */ init_lookup_list(); -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N if (running_in_test_harness) smtputf8_advertise_hosts = NULL; #endif @@ -5121,7 +5121,7 @@ if (mua_wrapper) deliver_drop_privilege = TRUE; queue_smtp = FALSE; queue_smtp_domains = NULL; -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N message_utf8_downconvert = -1; /* convert-if-needed */ #endif } @@ -5414,7 +5414,7 @@ while (more) errors_sender_rc : EXIT_FAILURE; } -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N { BOOL b = allow_utf8_domains; allow_utf8_domains = TRUE; @@ -5422,7 +5422,7 @@ while (more) recipient = parse_extract_address(s, &errmess, &start, &end, &domain, FALSE); -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N if (string_is_utf8(recipient)) message_smtputf8 = TRUE; else diff --git a/src/src/expand.c b/src/src/expand.c index a5f14364c..55b3d8c29 100644 --- a/src/src/expand.c +++ b/src/src/expand.c @@ -111,7 +111,7 @@ static uschar *item_table[] = { US"hash", US"hmac", US"if", -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N US"imapfolder", #endif US"length", @@ -141,7 +141,7 @@ enum { EITEM_HASH, EITEM_HMAC, EITEM_IF, -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N EITEM_IMAPFOLDER, #endif EITEM_LENGTH, @@ -173,7 +173,7 @@ static uschar *op_table_underscore[] = { US"reverse_ip", US"time_eval", US"time_interval" -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N ,US"utf8_domain_from_alabel", US"utf8_domain_to_alabel", US"utf8_localpart_from_alabel", @@ -188,7 +188,7 @@ enum { EOP_REVERSE_IP, EOP_TIME_EVAL, EOP_TIME_INTERVAL -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N ,EOP_UTF8_DOMAIN_FROM_ALABEL, EOP_UTF8_DOMAIN_TO_ALABEL, EOP_UTF8_LOCALPART_FROM_ALABEL, @@ -573,7 +573,7 @@ static var_entry var_table[] = { { "message_id", vtype_stringptr, &message_id }, { "message_linecount", vtype_int, &message_linecount }, { "message_size", vtype_int, &message_size }, -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N { "message_smtputf8", vtype_bool, &message_smtputf8 }, #endif #ifdef WITH_CONTENT_SCAN @@ -4095,7 +4095,7 @@ while (*s != 0) continue; } -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N case EITEM_IMAPFOLDER: { /* ${imapfolder {name}{sep]{specials}} */ uschar *sub_arg[3]; @@ -6757,7 +6757,7 @@ while (*s != 0) continue; } -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N case EOP_UTF8_DOMAIN_TO_ALABEL: { uschar * error = NULL; diff --git a/src/src/functions.h b/src/src/functions.h index e9f7ab658..edc72bc0d 100644 --- a/src/src/functions.h +++ b/src/src/functions.h @@ -424,7 +424,7 @@ extern BOOL string_format(uschar *, int, const char *, ...) ALMOST_PRINTF(3,4 extern uschar *string_format_size(int, uschar *); extern int string_interpret_escape(const uschar **); extern int string_is_ip_address(const uschar *, int *); -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N extern BOOL string_is_utf8(const uschar *); #endif extern uschar *string_log_address(address_item *, BOOL, BOOL); @@ -433,7 +433,7 @@ extern uschar *string_open_failed(int, const char *, ...) PRINTF_FUNCTION(2,3); extern const uschar *string_printing2(const uschar *, BOOL); extern uschar *string_split_message(uschar *); extern uschar *string_unprinting(uschar *); -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N extern uschar *string_address_utf8_to_alabel(const uschar *, uschar **); extern uschar *string_domain_alabel_to_utf8(const uschar *, uschar **); extern uschar *string_domain_utf8_to_alabel(const uschar *, uschar **); @@ -474,7 +474,7 @@ extern void tree_walk(tree_node *, void (*)(uschar*, uschar*, void*), void *) #ifdef WITH_CONTENT_SCAN extern void unspool_mbox(void); #endif -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N extern void utf8_version_report(FILE *); #endif diff --git a/src/src/globals.c b/src/src/globals.c index 6bd33a1a5..9ecb59652 100644 --- a/src/src/globals.c +++ b/src/src/globals.c @@ -178,7 +178,7 @@ BOOL prdr_requested = FALSE; const pcre *regex_PRDR = NULL; #endif -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N const pcre *regex_UTF8 = NULL; #endif @@ -395,7 +395,7 @@ address_item address_defaults = { #ifdef EXPERIMENTAL_SRS NULL, /* srs_sender */ #endif -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N FALSE, /* utf8 */ #endif } @@ -943,7 +943,7 @@ int message_linecount = 0; BOOL message_logs = TRUE; int message_size = 0; uschar *message_size_limit = US"50M"; -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N BOOL message_smtputf8 = FALSE; int message_utf8_downconvert = 0; /* -1 ifneeded; 0 never; 1 always */ #endif @@ -1316,7 +1316,7 @@ int smtp_rlr_limit = 0; int smtp_rlr_threshold = INT_MAX; BOOL smtp_use_pipelining = FALSE; BOOL smtp_use_size = FALSE; -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N uschar *smtputf8_advertise_hosts = US"*"; /* overridden under test-harness */ #endif diff --git a/src/src/globals.h b/src/src/globals.h index 899471116..c969214c8 100644 --- a/src/src/globals.h +++ b/src/src/globals.h @@ -576,7 +576,7 @@ extern int message_linecount; /* As it says */ extern BOOL message_logs; /* TRUE to write message logs */ extern int message_size; /* Size of message */ extern uschar *message_size_limit; /* As it says */ -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N extern BOOL message_smtputf8; /* Internationalized mail handling */ extern int message_utf8_downconvert; /* convert from utf8 */ const extern pcre *regex_UTF8; /* For recognizing SMTPUTF8 settings */ @@ -836,7 +836,7 @@ extern int smtp_rlr_limit; /* Max delay */ extern int smtp_rlr_threshold; /* Threshold for RCPT rate limit */ extern BOOL smtp_use_pipelining; /* Global for passed connections */ extern BOOL smtp_use_size; /* Global for passed connections */ -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N extern uschar *smtputf8_advertise_hosts; /* ingress control */ #endif diff --git a/src/src/imap_utf7.c b/src/src/imap_utf7.c index 739e47f41..dcccaeef8 100644 --- a/src/src/imap_utf7.c +++ b/src/src/imap_utf7.c @@ -1,6 +1,6 @@ #include "exim.h" -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N uschar * imap_utf7_encode(uschar *string, const uschar *charset, uschar sep, diff --git a/src/src/macros.h b/src/src/macros.h index 1cec4abd5..66abffa37 100644 --- a/src/src/macros.h +++ b/src/src/macros.h @@ -533,7 +533,7 @@ to conflict with system errno values. */ #define ERRNO_PROXYFAIL (-47) /* Negotiation failed for proxy configured host */ #define ERRNO_AUTHPROB (-48) /* Authenticator "other" failure */ -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N # define ERRNO_UTF8_FWD (-49) /* target not supporting SMTPUTF8 */ #endif diff --git a/src/src/queue.c b/src/src/queue.c index dc1c320c7..bf62aea88 100644 --- a/src/src/queue.c +++ b/src/src/queue.c @@ -1274,7 +1274,7 @@ switch(action) { if (action == MSG_ADD_RECIPIENT) { -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N if (string_is_utf8(recipient)) allow_utf8_domains = message_smtputf8 = TRUE; #endif receive_add_recipient(recipient, -1); @@ -1300,7 +1300,7 @@ switch(action) } else /* MSG_EDIT_SENDER */ { -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N if (string_is_utf8(recipient)) allow_utf8_domains = message_smtputf8 = TRUE; #endif sender_address = recipient; diff --git a/src/src/readconf.c b/src/src/readconf.c index 9b0b26e42..30ff757ac 100644 --- a/src/src/readconf.c +++ b/src/src/readconf.c @@ -413,7 +413,7 @@ static optionlist optionlist_config[] = { { "smtp_receive_timeout", opt_func, &fn_smtp_receive_timeout }, { "smtp_reserve_hosts", opt_stringptr, &smtp_reserve_hosts }, { "smtp_return_error_details",opt_bool, &smtp_return_error_details }, -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N { "smtputf8_advertise_hosts", opt_stringptr, &smtputf8_advertise_hosts }, #endif #ifdef WITH_CONTENT_SCAN diff --git a/src/src/receive.c b/src/src/receive.c index dc228d921..585cb9025 100644 --- a/src/src/receive.c +++ b/src/src/receive.c @@ -2303,7 +2303,7 @@ if (extract_recip) for (p = s; p < ss; p++) if (*p != '\n') *pp++ = *p; *pp = 0; -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N { BOOL b = allow_utf8_domains; allow_utf8_domains = TRUE; @@ -2311,7 +2311,7 @@ if (extract_recip) recipient = parse_extract_address(recipient, &errmess, &start, &end, &domain, FALSE); -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N if (string_is_utf8(recipient)) message_smtputf8 = TRUE; else diff --git a/src/src/routers/redirect.c b/src/src/routers/redirect.c index 371377317..7bbaa82e4 100644 --- a/src/src/routers/redirect.c +++ b/src/src/routers/redirect.c @@ -451,7 +451,7 @@ while (generated != NULL) } } -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N next->prop.utf8_msg = string_is_utf8(next->address) || (sender_address && string_is_utf8(sender_address)); #endif @@ -475,7 +475,7 @@ while (generated != NULL) else debug_printf("gid=unset "); -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N if (next->prop.utf8_msg) debug_printf("utf8 "); #endif diff --git a/src/src/smtp_in.c b/src/src/smtp_in.c index 86b0d21cf..3fce125d3 100644 --- a/src/src/smtp_in.c +++ b/src/src/smtp_in.c @@ -135,7 +135,7 @@ static BOOL rcpt_smtp_response_same; static BOOL rcpt_in_progress; static int nonmail_command_count; static BOOL smtp_exit_function_called = 0; -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N static BOOL smtputf8_advertised; #endif static int synprot_error_count; @@ -239,7 +239,7 @@ enum { ENV_MAIL_OPT_PRDR, #endif ENV_MAIL_OPT_RET, ENV_MAIL_OPT_ENVID, -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N ENV_MAIL_OPT_UTF8, #endif }; @@ -258,7 +258,7 @@ static env_mail_type_t env_mail_type_list[] = { #endif { US"RET", ENV_MAIL_OPT_RET, TRUE }, { US"ENVID", ENV_MAIL_OPT_ENVID, TRUE }, -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N { US"SMTPUTF8",ENV_MAIL_OPT_UTF8, FALSE }, /* rfc6531 */ #endif /* keep this the last entry */ @@ -1544,7 +1544,7 @@ spf_received = NULL; spf_result = NULL; spf_smtp_comment = NULL; #endif -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N message_smtputf8 = FALSE; #endif body_linecount = body_zerocount = 0; @@ -1882,7 +1882,7 @@ tls_in.ocsp = OCSP_NOT_REQ; tls_advertised = FALSE; #endif dsn_advertised = FALSE; -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N smtputf8_advertised = FALSE; #endif @@ -3577,7 +3577,7 @@ while (done <= 0) tls_advertised = FALSE; #endif dsn_advertised = FALSE; -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N smtputf8_advertised = FALSE; #endif @@ -3771,7 +3771,7 @@ while (done <= 0) } #endif -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N if ( accept_8bitmime && verify_check_host(&smtputf8_advertise_hosts) != FAIL) { @@ -4054,7 +4054,7 @@ while (done <= 0) break; #endif -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N case ENV_MAIL_OPT_UTF8: if (smtputf8_advertised) { diff --git a/src/src/spool_in.c b/src/src/spool_in.c index a7095bbaa..59192ef30 100644 --- a/src/src/spool_in.c +++ b/src/src/spool_in.c @@ -303,7 +303,7 @@ spam_score = NULL; spam_score_int = NULL; #endif -#if defined(EXPERIMENTAL_INTERNATIONAL) && !defined(COMPILE_UTILITY) +#if defined(SUPPORT_I18N) && !defined(COMPILE_UTILITY) message_smtputf8 = FALSE; message_utf8_downconvert = 0; #endif @@ -582,7 +582,7 @@ for (;;) else if (Ustrncmp(p, "pam_score_int ", 14) == 0) spam_score_int = string_copy(big_buffer + 16); #endif -#if defined(EXPERIMENTAL_INTERNATIONAL) && !defined(COMPILE_UTILITY) +#if defined(SUPPORT_I18N) && !defined(COMPILE_UTILITY) else if (Ustrncmp(p, "mtputf8", 7) == 0) message_smtputf8 = TRUE; #endif @@ -609,7 +609,7 @@ for (;;) break; #endif -#if defined(EXPERIMENTAL_INTERNATIONAL) && !defined(COMPILE_UTILITY) +#if defined(SUPPORT_I18N) && !defined(COMPILE_UTILITY) case 'u': if (Ustrncmp(p, "tf8_downcvt", 11) == 0) message_utf8_downconvert = 1; diff --git a/src/src/spool_out.c b/src/src/spool_out.c index e7a6a6535..8d0ee7c71 100644 --- a/src/src/spool_out.c +++ b/src/src/spool_out.c @@ -247,7 +247,7 @@ if (tls_in.ourcert) if (tls_in.ocsp) fprintf(f, "-tls_ocsp %d\n", tls_in.ocsp); #endif -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N if (message_smtputf8) { fprintf(f, "-smtputf8\n"); diff --git a/src/src/string.c b/src/src/string.c index b76b0abbc..d01383f65 100644 --- a/src/src/string.c +++ b/src/src/string.c @@ -1553,7 +1553,7 @@ uschar * s; s = addr->prefix; if (testflag(addr, af_include_affixes) && s) { -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N if (testflag(addr, af_utf8_downcvt)) s = string_localpart_utf8_to_alabel(s, NULL); #endif @@ -1561,7 +1561,7 @@ if (testflag(addr, af_include_affixes) && s) } s = addr->local_part; -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N if (testflag(addr, af_utf8_downcvt)) s = string_localpart_utf8_to_alabel(s, NULL); #endif @@ -1570,7 +1570,7 @@ yield = string_cat(yield, sizeptr, ptrptr, s, Ustrlen(s)); s = addr->suffix; if (testflag(addr, af_include_affixes) && s) { -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N if (testflag(addr, af_utf8_downcvt)) s = string_localpart_utf8_to_alabel(s, NULL); #endif @@ -1641,7 +1641,7 @@ else yield = string_get_localpart(addr, yield, &size, &ptr); yield = string_cat(yield, &size, &ptr, US"@", 1); s = addr->domain; -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N if (testflag(addr, af_utf8_downcvt)) s = string_localpart_utf8_to_alabel(s, NULL); #endif diff --git a/src/src/structs.h b/src/src/structs.h index 713702ea5..5fe8551cd 100644 --- a/src/src/structs.h +++ b/src/src/structs.h @@ -467,7 +467,7 @@ typedef struct address_item_propagated { #ifdef EXPERIMENTAL_SRS uschar *srs_sender; /* Change return path when delivering */ #endif - #ifdef EXPERIMENTAL_INTERNATIONAL + #ifdef SUPPORT_I18N BOOL utf8_msg:1; /* requires SMTPUTF8 processing */ BOOL utf8_downcvt:1; /* mandatory downconvert on delivery */ BOOL utf8_downcvt_maybe:1; /* optional downconvert on delivery */ @@ -510,7 +510,7 @@ typedef struct address_item_propagated { #ifdef EXPERIMENTAL_DANE # define af_dane_verified 0x20000000 /* TLS cert verify done with DANE */ #endif -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N # define af_utf8_downcvt 0x40000000 /* downconvert was done for delivery */ #endif diff --git a/src/src/tls-gnu.c b/src/src/tls-gnu.c index c316d0a24..c2f073833 100644 --- a/src/src/tls-gnu.c +++ b/src/src/tls-gnu.c @@ -1834,7 +1834,7 @@ tls_client_setup_hostname_checks(host_item * host, exim_gnutls_state_st * state, if (verify_check_given_host(&ob->tls_verify_cert_hostnames, host) == OK) { state->exp_tls_verify_cert_hostnames = -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N string_domain_utf8_to_alabel(host->name, NULL); #else host->name; diff --git a/src/src/tls-openssl.c b/src/src/tls-openssl.c index c68b25d83..704522b50 100644 --- a/src/src/tls-openssl.c +++ b/src/src/tls-openssl.c @@ -1860,7 +1860,7 @@ if ((rc = setup_certs(ctx, ob->tls_verify_certificates, if (verify_check_given_host(&ob->tls_verify_cert_hostnames, host) == OK) { cbinfo->verify_cert_hostnames = -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N string_domain_utf8_to_alabel(host->name, NULL); #else host->name; diff --git a/src/src/transports/smtp.c b/src/src/transports/smtp.c index 30facda00..c53ae2386 100644 --- a/src/src/transports/smtp.c +++ b/src/src/transports/smtp.c @@ -596,7 +596,7 @@ if (*errno_value == ERRNO_WRITEINCOMPLETE) return FALSE; } -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N /* Handle lack of advertised SMTPUTF8, for international message */ if (*errno_value == ERRNO_UTF8_FWD) { @@ -1403,7 +1403,7 @@ BOOL pass_message = FALSE; BOOL prdr_offered = FALSE; BOOL prdr_active; #endif -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N BOOL utf8_needed = FALSE; BOOL utf8_offered = FALSE; #endif @@ -1535,7 +1535,7 @@ if (continue_hostname == NULL) delayed till here so that $sending_interface and $sending_port are set. */ helo_data = expand_string(ob->helo_data); -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N if (helo_data) { uschar * errstr = NULL; @@ -1709,7 +1709,7 @@ goto SEND_QUIT; {DEBUG(D_transport) debug_printf("PRDR usable\n");} #endif -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N if (addrlist->prop.utf8_msg) { utf8_needed = !addrlist->prop.utf8_downcvt @@ -1950,7 +1950,7 @@ if (continue_hostname == NULL {DEBUG(D_transport) debug_printf("PRDR usable\n");} #endif -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N if (addrlist->prop.utf8_msg) utf8_offered = esmtp && pcre_exec(regex_UTF8, NULL, CS buffer, Ustrlen(buffer), 0, @@ -1983,7 +1983,7 @@ message-specific. */ setting_up = FALSE; -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N /* If this is an international message we need the host to speak SMTPUTF8 */ if (utf8_needed && !utf8_offered) { @@ -2068,7 +2068,7 @@ if (prdr_offered) } #endif -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N if (addrlist->prop.utf8_msg && !addrlist->prop.utf8_downcvt && utf8_offered) sprintf(CS p, " SMTPUTF8"), p += 9; #endif @@ -2128,7 +2128,7 @@ pending_MAIL = TRUE; /* The block starts with MAIL */ { uschar * s = return_path; -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N uschar * errstr = NULL; /* If we must downconvert, do the from-address here. Remember we had to @@ -2239,7 +2239,7 @@ for (addr = first_addr; rcpt_addr = transport_rcpt_address(addr, tblock->rcpt_include_affixes); -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N { uschar * dummy_errstr; if ( testflag(addrlist, af_utf8_downcvt) @@ -2679,7 +2679,7 @@ if (!ok) switch(save_errno) { -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N case ERRNO_UTF8_FWD: code = '5'; /*FALLTHROUGH*/ diff --git a/src/src/utf8.c b/src/src/utf8.c index 8a7cf38a3..84ad1dc18 100644 --- a/src/src/utf8.c +++ b/src/src/utf8.c @@ -8,7 +8,7 @@ #include "exim.h" -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N #include #include diff --git a/src/src/verify.c b/src/src/verify.c index 6c228abbf..17c99d174 100644 --- a/src/src/verify.c +++ b/src/src/verify.c @@ -174,7 +174,7 @@ dbdata_callout_cache new_domain_record; dbdata_callout_cache_address new_address_record; host_item *host; time_t callout_start_time; -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N BOOL utf8_offered = FALSE; #endif @@ -924,7 +924,7 @@ can do it there for the non-rcpt-verify case. For this we keep an addresscount. } } -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N else if ( addr->prop.utf8_msg && !addr->prop.utf8_downcvt && !( esmtp @@ -976,7 +976,7 @@ can do it there for the non-rcpt-verify case. For this we keep an addresscount. /* Send the MAIL command */ (smtp_write_command(&outblock, FALSE, -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N addr->prop.utf8_msg && !addr->prop.utf8_downcvt ? "MAIL FROM:<%s>%s SMTPUTF8\r\n" : @@ -1022,7 +1022,7 @@ can do it there for the non-rcpt-verify case. For this we keep an addresscount. { const uschar * rcpt_domain = addr->domain; -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N uschar * errstr = NULL; if ( testflag(addr, af_utf8_downcvt) && (rcpt_domain = string_domain_utf8_to_alabel(rcpt_domain, @@ -1084,7 +1084,7 @@ can do it there for the non-rcpt-verify case. For this we keep an addresscount. '2', callout) && smtp_write_command(&outblock, FALSE, -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N addr->prop.utf8_msg && !addr->prop.utf8_downcvt ? "MAIL FROM:<%s> SMTPUTF8\r\n" : @@ -1124,7 +1124,7 @@ can do it there for the non-rcpt-verify case. For this we keep an addresscount. uschar * rcpt = transport_rcpt_address(addr, addr->transport ? addr->transport->rcpt_include_affixes : FALSE); -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N /*XXX should the conversion be moved into transport_rcpt_address() ? */ uschar * dummy_errstr = NULL; if ( testflag(addr, af_utf8_downcvt) @@ -1229,7 +1229,7 @@ can do it there for the non-rcpt-verify case. For this we keep an addresscount. HDEBUG(D_verify) debug_printf("SMTP timeout\n"); send_quit = FALSE; } -#ifdef EXPERIMENTAL_INTERNATIONAL +#ifdef SUPPORT_I18N else if (errno == ERRNO_UTF8_FWD) { extern int acl_where; /* src/acl.c */ diff --git a/test/scripts/4200-International/REQUIRES b/test/scripts/4200-International/REQUIRES index c66f68046..3024f81eb 100644 --- a/test/scripts/4200-International/REQUIRES +++ b/test/scripts/4200-International/REQUIRES @@ -1 +1 @@ -support Experimental_International +support I18N diff --git a/test/scripts/4210-GnuTLS-International/REQUIRES b/test/scripts/4210-GnuTLS-International/REQUIRES index d75e95074..09843a4cc 100644 --- a/test/scripts/4210-GnuTLS-International/REQUIRES +++ b/test/scripts/4210-GnuTLS-International/REQUIRES @@ -1,2 +1,2 @@ -support Experimental_International +support I18N support GnuTLS diff --git a/test/scripts/4220-OpenSSL-International/REQUIRES b/test/scripts/4220-OpenSSL-International/REQUIRES index 74b249f4c..ada714079 100644 --- a/test/scripts/4220-OpenSSL-International/REQUIRES +++ b/test/scripts/4220-OpenSSL-International/REQUIRES @@ -1,2 +1,2 @@ -support Experimental_International +support I18N support OpenSSL -- 2.25.1