]> diplodocus.org Git - nmh/commitdiff
Removed send and post -eai switches. Instead, post now enables
authorDavid Levine <levinedl@acm.org>
Sat, 24 Sep 2016 21:01:32 +0000 (17:01 -0400)
committerDavid Levine <levinedl@acm.org>
Sat, 24 Sep 2016 21:01:32 +0000 (17:01 -0400)
SMTPUTF8 if it finds any 8-bit characters in header field bodies.

test/mhl/test-rfc6532
test/post/test-rfc6531
uip/post.c
uip/send.c
uip/sendsbr.c
uip/whatnowsbr.c
uip/whom.c

index db3754d..96ee873 100755 (executable)
@@ -57,7 +57,7 @@ MIME-Version: 1.0'
 # check with incompatible locale
 # This is here as a place holder.  We should either try to run the (8-bit) text
 # through iconv, or refuse to display it if the locale is incompatible.  In the
 # check with incompatible locale
 # This is here as a place holder.  We should either try to run the (8-bit) text
 # through iconv, or refuse to display it if the locale is incompatible.  In the
-# cAse of EAI, that means not UTF-8.
+# case of EAI, that means not UTF-8.
 # start_test 'incompatible locale'
 # LC_ALL=C
 # run_test "$mhl -form mhl.headers `mhpath last`" \
 # start_test 'incompatible locale'
 # LC_ALL=C
 # run_test "$mhl -form mhl.headers `mhpath last`" \
index 48d9d15..b86936b 100755 (executable)
@@ -66,7 +66,7 @@ Computing Edge 1:6, June 2015,
 http://www.computer.org/cms/computing-edge/ce-jun15-final.pdf, p. 50.
 EOF
 
 http://www.computer.org/cms/computing-edge/ce-jun15-final.pdf, p. 50.
 EOF
 
-test_post "${testname}.actual" "${testname}.expected" -eai
+test_post "${testname}.actual" "${testname}.expected"
 
 
 finish_test
 
 
 finish_test
index 488d49b..810d678 100644 (file)
@@ -64,8 +64,6 @@
     X("library directory", -7, LIBSW) /* interface from send, whom */ \
     X("mime", 0, MIMESW) \
     X("nomime", 0, NMIMESW) \
     X("library directory", -7, LIBSW) /* interface from send, whom */ \
     X("mime", 0, MIMESW) \
     X("nomime", 0, NMIMESW) \
-    X("eai", 0, EAISW) \
-    X("noeai", 0, NEAISW) \
     X("msgid", 0, MSGDSW) \
     X("nomsgid", 0, NMSGDSW) \
     X("verbose", 0, VERBSW) \
     X("msgid", 0, MSGDSW) \
     X("nomsgid", 0, NMSGDSW) \
     X("verbose", 0, VERBSW) \
@@ -225,7 +223,6 @@ static int badmsg = 0;              /* message has bad semantics             */
 static int verbose = 0;                /* spell it out                          */
 static int format = 1;         /* format addresses                      */
 static int mime = 0;           /* use MIME-style encapsulations for Bcc */
 static int verbose = 0;                /* spell it out                          */
 static int format = 1;         /* format addresses                      */
 static int mime = 0;           /* use MIME-style encapsulations for Bcc */
-static int eai = 0;            /* use EAI (SMTPUTF8)                    */
 static int msgid = 0;          /* add msgid                             */
 static int debug = 0;          /* debugging post                        */
 static int watch = 0;          /* watch the delivery process            */
 static int msgid = 0;          /* add msgid                             */
 static int debug = 0;          /* debugging post                        */
 static int watch = 0;          /* watch the delivery process            */
@@ -281,7 +278,7 @@ static char *partno = NULL;
 /*
  * static prototypes
  */
 /*
  * static prototypes
  */
-static void putfmt (char *, char *, FILE *);
+static void putfmt (char *, char *, int *, FILE *);
 static void start_headers (void);
 static void finish_headers (FILE *);
 static int get_header (char *, struct headers *);
 static void start_headers (void);
 static void finish_headers (FILE *);
 static int get_header (char *, struct headers *);
@@ -293,14 +290,14 @@ static void anno (void);
 static int annoaux (struct mailname *);
 static void insert_fcc (struct headers *, char *);
 static void make_bcc_file (int);
 static int annoaux (struct mailname *);
 static void insert_fcc (struct headers *, char *);
 static void make_bcc_file (int);
-static void verify_all_addresses (int, char *, int, char *);
+static void verify_all_addresses (int, int, char *, int, char *);
 static void chkadr (void);
 static void sigon (void);
 static void sigoff (void);
 static void p_refile (char *);
 static void fcc (char *, char *);
 static void die (char *, char *, ...);
 static void chkadr (void);
 static void sigon (void);
 static void sigoff (void);
 static void p_refile (char *);
 static void fcc (char *, char *);
 static void die (char *, char *, ...);
-static void post (char *, int, int, char *, int, char *);
+static void post (char *, int, int, int, char *, int, char *);
 static void do_text (char *file, int fd);
 static void do_an_address (struct mailname *, int);
 static void do_addresses (int, int);
 static void do_text (char *file, int fd);
 static void do_an_address (struct mailname *, int);
 static void do_addresses (int, int);
@@ -311,6 +308,7 @@ int
 main (int argc, char **argv)
 {
     int state, compnum, dashstuff = 0, swnum, oauth_flag = 0;
 main (int argc, char **argv)
 {
     int state, compnum, dashstuff = 0, swnum, oauth_flag = 0;
+    int eai = 0; /* use Email Address Internationalization (EAI) (SMTPUTF8) */
     char *cp, *msg = NULL, **argp, **arguments, *envelope;
     char buf[BUFSIZ], name[NAMESZ], *auth_svc = NULL;
     FILE *in, *out;
     char *cp, *msg = NULL, **argp, **arguments, *envelope;
     char buf[BUFSIZ], name[NAMESZ], *auth_svc = NULL;
     FILE *in, *out;
@@ -401,13 +399,6 @@ main (int argc, char **argv)
                    mime = 0;
                    continue;
 
                    mime = 0;
                    continue;
 
-               case EAISW:
-                   eai = 1;
-                   continue;
-               case NEAISW:
-                   eai = 0;
-                   continue;
-
                case MSGDSW: 
                    msgid++;
                    continue;
                case MSGDSW: 
                    msgid++;
                    continue;
@@ -595,12 +586,6 @@ main (int argc, char **argv)
     if ((in = fopen (msg, "r")) == NULL)
        adios (msg, "unable to open");
 
     if ((in = fopen (msg, "r")) == NULL)
        adios (msg, "unable to open");
 
-    /* Support EAI. */
-    if (eai) {
-        /* Add eai profile entry, to pass utf-8 setting to getname()/getadrx(). */
-        add_profile_entry ("eai", "utf-8");
-    }
-
     start_headers ();
     if (debug) {
        verbose++;
     start_headers ();
     if (debug) {
        verbose++;
@@ -626,14 +611,14 @@ main (int argc, char **argv)
        switch (state = m_getfld (&gstate, name, buf, &bufsz, in)) {
            case FLD: 
            case FLDPLUS: 
        switch (state = m_getfld (&gstate, name, buf, &bufsz, in)) {
            case FLD: 
            case FLDPLUS: 
-               compnum++;
+                compnum++;
                cp = add (buf, NULL);
                while (state == FLDPLUS) {
                    bufsz = sizeof buf;
                    state = m_getfld (&gstate, name, buf, &bufsz, in);
                    cp = add (buf, cp);
                }
                cp = add (buf, NULL);
                while (state == FLDPLUS) {
                    bufsz = sizeof buf;
                    state = m_getfld (&gstate, name, buf, &bufsz, in);
                    cp = add (buf, cp);
                }
-               putfmt (name, cp, out);
+               putfmt (name, cp, &eai, out);
                free (cp);
                continue;
 
                free (cp);
                continue;
 
@@ -735,7 +720,7 @@ main (int argc, char **argv)
     /* If we are doing a "whom" check */
     if (whomsw) {
        /* This won't work with MTS_SENDMAIL_PIPE. */
     /* If we are doing a "whom" check */
     if (whomsw) {
        /* This won't work with MTS_SENDMAIL_PIPE. */
-        verify_all_addresses (1, envelope, oauth_flag, auth_svc);
+        verify_all_addresses (1, eai, envelope, oauth_flag, auth_svc);
        done (0);
     }
 
        done (0);
     }
 
@@ -747,14 +732,15 @@ main (int argc, char **argv)
                   verify_all_addresses with MTS_SENDMAIL_PIPE, but
                   that might require running sendmail as root.  Note
                   that spost didn't verify addresses. */
                   verify_all_addresses with MTS_SENDMAIL_PIPE, but
                   that might require running sendmail as root.  Note
                   that spost didn't verify addresses. */
-               verify_all_addresses (verbose, envelope, oauth_flag, auth_svc);
+               verify_all_addresses (verbose, eai, envelope, oauth_flag,
+                                      auth_svc);
            }
            }
-           post (tmpfil, 0, verbose, envelope, oauth_flag, auth_svc);
+           post (tmpfil, 0, verbose, eai, envelope, oauth_flag, auth_svc);
        }
        }
-       post (bccfil, 1, verbose, envelope, oauth_flag, auth_svc);
+       post (bccfil, 1, verbose, eai, envelope, oauth_flag, auth_svc);
        (void) m_unlink (bccfil);
     } else {
        (void) m_unlink (bccfil);
     } else {
-       post (tmpfil, 0, isatty (1), envelope, oauth_flag, auth_svc);
+       post (tmpfil, 0, isatty (1), eai, envelope, oauth_flag, auth_svc);
     }
 
     p_refile (tmpfil);
     }
 
     p_refile (tmpfil);
@@ -777,7 +763,7 @@ main (int argc, char **argv)
  */
 
 static void
  */
 
 static void
-putfmt (char *name, char *str, FILE *out)
+putfmt (char *name, char *str, int *eai, FILE *out)
 {
     int count, grp, i, keep;
     char *cp, *pp, *qp;
 {
     int count, grp, i, keep;
     char *cp, *pp, *qp;
@@ -794,8 +780,25 @@ putfmt (char *name, char *str, FILE *out)
        return;
     }
 
        return;
     }
 
+    if (! *eai) {
+        /* Check each header field value to see if it has any 8-bit characters.
+           If it does, enable EAI support. */
+        if (contains8bit(str, NULL)) {
+            if (verbose) {
+                printf ("EAI/SMTPUTF8 enabled\n");
+            }
+
+            /* Enable SMTPUTF8. */
+            *eai = 1;
+
+            /* Add eai profile entry, to pass utf-8 setting to
+               getname()/getadrx(). */
+            add_profile_entry ("eai", "utf-8");
+        }
+    }
+
     if ((i = get_header (name, hdrtab)) == NOTOK) {
     if ((i = get_header (name, hdrtab)) == NOTOK) {
-       if (strncasecmp (name, "nmh-", 4)) {
+        if (strncasecmp (name, "nmh-", 4)) {
            fprintf (out, "%s: %s", name, str);
        } else {
            /* Filter out all Nmh-* headers, because Norm asked.  They
            fprintf (out, "%s: %s", name, str);
        } else {
            /* Filter out all Nmh-* headers, because Norm asked.  They
@@ -843,7 +846,8 @@ putfmt (char *name, char *str, FILE *out)
     }
 
     tmpaddrs.m_next = NULL;
     }
 
     tmpaddrs.m_next = NULL;
-    for (count = 0; (cp = getname (str)); count++)
+
+    for (count = 0; (cp = getname (str)); count++) {
        if ((mp = getm (cp, NULL, 0, error, sizeof(error)))) {
            if (tmpaddrs.m_next)
                np->m_next = mp;
        if ((mp = getm (cp, NULL, 0, error, sizeof(error)))) {
            if (tmpaddrs.m_next)
                np->m_next = mp;
@@ -858,6 +862,7 @@ putfmt (char *name, char *str, FILE *out)
            else
                badmsg++;
        }
            else
                badmsg++;
        }
+    }
 
     if (count < 1) {
        if (hdr->flags & HNIL)
 
     if (count < 1) {
        if (hdr->flags & HNIL)
@@ -1601,8 +1606,8 @@ do_addresses (int bccque, int talk)
  */
 
 static void
  */
 
 static void
-post (char *file, int bccque, int talk, char *envelope, int oauth_flag,
-      char *auth_svc)
+post (char *file, int bccque, int talk, int eai, char *envelope,
+      int oauth_flag, char *auth_svc)
 {
     int fd;
     int        retval, i;
 {
     int fd;
     int        retval, i;
@@ -1684,7 +1689,8 @@ post (char *file, int bccque, int talk, char *envelope, int oauth_flag,
 /* Address Verification */
 
 static void
 /* Address Verification */
 
 static void
-verify_all_addresses (int talk, char *envelope, int oauth_flag, char *auth_svc)
+verify_all_addresses (int talk, int eai, char *envelope, int oauth_flag,
+                      char *auth_svc)
 {
     int retval;
     struct mailname *lp;
 {
     int retval;
     struct mailname *lp;
index d8a92cb..a491198 100644 (file)
@@ -42,8 +42,6 @@
     X("noforward", 0, NFORWSW) \
     X("mime", 0, MIMESW) \
     X("nomime", 0, NMIMESW) \
     X("noforward", 0, NFORWSW) \
     X("mime", 0, MIMESW) \
     X("nomime", 0, NMIMESW) \
-    X("eai", 0, EAISW) \
-    X("noeai", 0, NEAISW) \
     X("msgid", 0, MSGDSW) \
     X("nomsgid", 0, NMSGDSW) \
     X("push", 0, PUSHSW) \
     X("msgid", 0, MSGDSW) \
     X("nomsgid", 0, NMSGDSW) \
     X("push", 0, PUSHSW) \
@@ -238,13 +236,6 @@ main (int argc, char **argv)
                    vec[vecp++] = --cp;
                    continue;
 
                    vec[vecp++] = --cp;
                    continue;
 
-               case EAISW:
-                   vec[vecp++] = --cp;
-                   continue;
-               case NEAISW:
-                   vec[vecp++] = --cp;
-                   continue;
-
                case SNOOPSW:
                     snoop++;
                    vec[vecp++] = --cp;
                case SNOOPSW:
                     snoop++;
                    vec[vecp++] = --cp;
index 6373336..74f7dae 100644 (file)
@@ -76,22 +76,12 @@ sendsbr (char **vec, int vecp, char *program, char *draft, struct stat *st,
        by longjmp. */
     volatile int nvecs = vecp;
     int *nvecsp = (int *) &nvecs;
        by longjmp. */
     volatile int nvecs = vecp;
     int *nvecsp = (int *) &nvecs;
-    int eai = 0;
 
     /*
      * Run the mimebuildproc (which is by default mhbuild) on the message
      * with the addition of the "-auto" flag
      */
 
 
     /*
      * Run the mimebuildproc (which is by default mhbuild) on the message
      * with the addition of the "-auto" flag
      */
 
-    /* Make sure that EAI support is set up before calling buildmimeproc. */
-    for (i = 0; i < vecp; ++i) {
-        if (strcasecmp (vec[i], "-eai") == 0) {
-            eai = 1;
-        } else if (strcasecmp (vec[i], "-noeai") == 0) {
-            eai = 0;
-        }
-    }
-
     switch (child = fork()) {
     case NOTOK:
        adios("fork", "unable to");
     switch (child = fork()) {
     case NOTOK:
        adios("fork", "unable to");
@@ -103,17 +93,6 @@ sendsbr (char **vec, int vecp, char *program, char *draft, struct stat *st,
        if (distfile)
            buildvec[i++] = "-dist";
        buildvec[i++] = (char *) drft;
        if (distfile)
            buildvec[i++] = "-dist";
        buildvec[i++] = (char *) drft;
-       if (eai) {
-           /* Add eai profile entry, to pass utf-8 setting to
-              getname()/getadrx().  This doesn't seem to be necessary
-              now, but it's here just in case the code changes
-              later. */
-           add_profile_entry("eai", "utf-8");
-
-           /* Add mhbuild switch to enable UTF-8 headers. */
-           buildvec[i++] = "-headerencoding";
-           buildvec[i++] = "utf-8";
-       }
        buildvec[i] = NULL;
        execvp(buildprogram, buildvec);
        fprintf(stderr, "unable to exec ");
        buildvec[i] = NULL;
        execvp(buildprogram, buildvec);
        fprintf(stderr, "unable to exec ");
index c2f8bbf..80386e9 100644 (file)
@@ -923,8 +923,6 @@ buildfile (char **argp, char *file)
     X("noforward", 0, NFORWSW) \
     X("mime", 0, MIMESW) \
     X("nomime", 0, NMIMESW) \
     X("noforward", 0, NFORWSW) \
     X("mime", 0, MIMESW) \
     X("nomime", 0, NMIMESW) \
-    X("eai", 0, EAISW) \
-    X("noeai", 0, NEAISW) \
     X("msgid", 0, MSGDSW) \
     X("nomsgid", 0, NMSGDSW) \
     X("push", 0, SPSHSW) \
     X("msgid", 0, MSGDSW) \
     X("nomsgid", 0, NMSGDSW) \
     X("push", 0, SPSHSW) \
@@ -1131,8 +1129,6 @@ sendit (char *sp, char **arg, char *file, int pushed)
                case NBITSTUFFSW:
                case MIMESW:
                case NMIMESW:
                case NBITSTUFFSW:
                case MIMESW:
                case NMIMESW:
-               case EAISW:
-               case NEAISW:
                case MSGDSW:
                case NMSGDSW:
                case WATCSW:
                case MSGDSW:
                case NMSGDSW:
                case WATCSW:
index 081978a..b1e8b1e 100644 (file)
@@ -42,8 +42,6 @@
     X("tls", TLSminc(-3), TLSSW) \
     X("initialtls", TLSminc(-10), INITTLSSW) \
     X("notls", TLSminc(-5), NTLSSW) \
     X("tls", TLSminc(-3), TLSSW) \
     X("initialtls", TLSminc(-10), INITTLSSW) \
     X("notls", TLSminc(-5), NTLSSW) \
-    X("eai", 0, EAISW) \
-    X("noeai", 0, NEAISW) \
     X("mts smtp|sendmail/smtp|sendmail/pipe", 0, MTSSW) \
 
 #define X(sw, minchars, id) id,
     X("mts smtp|sendmail/smtp|sendmail/pipe", 0, MTSSW) \
 
 #define X(sw, minchars, id) id,
@@ -102,8 +100,6 @@ main (int argc, char **argv)
                case TLSSW:
                case INITTLSSW:
                case NTLSSW:
                case TLSSW:
                case INITTLSSW:
                case NTLSSW:
-                case EAISW:
-                case NEAISW:
                    vec[vecp++] = --cp;
                    continue;
 
                    vec[vecp++] = --cp;
                    continue;