client helo
authorJeremy Harris <jgh146exb@wizmail.org>
Sun, 12 Apr 2015 17:47:03 +0000 (18:47 +0100)
committerJeremy Harris <jgh146exb@wizmail.org>
Sun, 12 Apr 2015 22:36:49 +0000 (23:36 +0100)
TODO
doc/doc-txt/experimental-spec.txt
src/src/transports/smtp.c
src/src/utf8.c

diff --git a/TODO b/TODO
index 4445d0fe413b33431f2ad04269b11b06605b9b0a..19c7ce7f69987b70acb6e143a67cdf41cad493f8 100644 (file)
--- a/TODO
+++ b/TODO
@@ -14,8 +14,8 @@ destination supports the SMTPUTF8 extension
 
 ======================
 
-to-Alabel convert of helo name
-- smtp transport
+++ to-Alabel convert of helo name
+++ - smtp transport
 
 ++ An "international" flag on the message?
 ++ An is-international expansion condition?
index 3dbf13f9da71910a2d9a847480cba19049b958d3..c22288bedb2d2f81322cb3a0af183db01a7a284e 100644 (file)
@@ -1278,7 +1278,7 @@ RFCs 6530, 6533, 5890
 
 Compile with EXPERIMENTAL_INTERNATIONAL and libidn.
 
-Main config option smtputf8_advertise_hosts, default '*',
+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.
@@ -1291,15 +1291,30 @@ 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.
+
 Log lines and Received-by: header lines will aquire a "utf8"
 prefix on the protocol element, eg. utf8esmtp.
 
-Expansion operators:
+New expansion operators:
        ${utf8_domain_to_alabel:str}
        ${utf8_domain_from_alabel:str}
        ${utf8_localpart_to_alabel:str}
        ${utf8_localpart_from_alabel:str}
 
+Known issues:
+ - Currently LMTP is not supported.
+ - DSN unitext handling is not present
+ - no provision for converting logging from UTF-8
+ - VRFY and EXPN not handled
+ - non-smtp input not handled  (!)
+ - MSA mode not handled (!)
 
 --------------------------------------------------------------
 End of file
index 0ca6b4e42de57d9482f042371982f0b2807a91d0..65bb1de223d533ec5e87638567c61ca731b421d9 100644 (file)
@@ -1486,6 +1486,19 @@ 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
+  if (helo_data)
+    {
+    uschar * errstr = NULL;
+    if ((helo_data = string_domain_utf8_to_alabel(helo_data, &errstr)), errstr)
+      {
+      errstr = string_sprintf("failed to expand helo_data: %s", errstr);
+      set_errno(addrlist, ERRNO_EXPANDFAIL, errstr, DEFER, FALSE, NULL);
+      yield = DEFER;
+      goto SEND_QUIT;
+      }
+    }
+#endif
 
   /* The first thing is to wait for an initial OK response. The dreaded "goto"
   is nevertheless a reasonably clean way of programming this kind of logic,
index 6d0c5029b511ea42752b9161062ed62ddaf6410a..6bc0c2ed5a0813929c248d430fa0de7d45bdcef2 100644 (file)
@@ -54,6 +54,7 @@ string_domain_alabel_to_utf8(const uschar * alabel, uschar ** err)
 uschar * s1;
 uschar * s;
 int rc;
+
 if (  (rc = idna_to_unicode_8z8z(CCS alabel, CSS &s1, IDNA_USE_STD3_ASCII_RULES))
    != IDNA_SUCCESS)
   {