]> diplodocus.org Git - nmh/blobdiff - uip/post.c
Tweaked check of -outfile in test-mhstore.
[nmh] / uip / post.c
index 35cf91fcb3ebbd07c10800f724e4270c1ac99b12..69f5b82103f1a7109bacdb9793ca8f5ce767477b 100644 (file)
 #include <h/dropsbr.h>
 #include <h/mime.h>
 #include <h/utils.h>
-
 #include <h/tws.h>
 #include <h/mts.h>
 
-#include <errno.h>
-#include <signal.h>
-
 #ifdef HAVE_SYS_TIME_H
 # include <sys/time.h>
 #endif
     X("user", SASLminc(-4), USERSW) \
     X("port server port name/number", 4, PORTSW) \
     X("tls", TLSminc(-3), TLSSW) \
+    X("initialtls", TLSminc(-10), INITTLSSW) \
     X("notls", TLSminc(-5), NTLSSW) \
     X("fileproc", -4, FILEPROCSW) \
     X("mhlproc", -3, MHLPROCSW) \
     X("mts smtp|sendmail/smtp|sendmail/pipe", 2, MTSSW) \
+    X("credentials legacy|file:filename", 0, CREDENTIALSSW) \
     X("messageid localname|random", 2, MESSAGEIDSW) \
 
 #define X(sw, minchars, id) id,
@@ -261,7 +259,7 @@ static int insert (struct mailname *);
 static void pl (void);
 static void anno (void);
 static int annoaux (struct mailname *);
-static void insert_fcc (struct headers *, unsigned char *);
+static void insert_fcc (struct headers *, char *);
 static void make_bcc_file (int);
 static void verify_all_addresses (int, char *);
 static void chkadr (void);
@@ -468,7 +466,11 @@ main (int argc, char **argv)
                    continue;
 
                case TLSSW:
-                   tls++;
+                   tls = 1;
+                   continue;
+
+               case INITTLSSW:
+                   tls = 2;
                    continue;
 
                case NTLSSW:
@@ -493,6 +495,21 @@ main (int argc, char **argv)
                     save_mts_method (cp);
                    continue;
 
+               case CREDENTIALSSW: {
+                   /* post doesn't read the profile, so insert credentials
+                      entry the hard way. */
+                   struct node *np = (struct node *) mh_xmalloc (sizeof *np);
+
+                   if (!(cp = *argp++) || *cp == '-')
+                       adios (NULL, "missing argument to %s", argp[-2]);
+                   np->n_name = "credentials";
+                   np->n_field = cp;
+                   np->n_context = 0;
+                   np->n_next = m_defs;
+                   m_defs = np;
+                   continue;
+               }
+
                case MESSAGEIDSW:
                    if (!(cp = *argp++) || *cp == '-')
                        adios (NULL, "missing argument to %s", argp[-2]);
@@ -921,8 +938,7 @@ putfmt (char *name, char *str, FILE *out)
 static void
 start_headers (void)
 {
-    unsigned char  *cp;
-    char sigbuf[BUFSIZ];
+    char  *cp, sigbuf[BUFSIZ];
     struct mailname *mp;
 
     time (&tclock);
@@ -1072,7 +1088,7 @@ get_header (char *header, struct headers *table)
     struct headers *h;
 
     for (h = table; h->value; h++)
-       if (!mh_strcasecmp (header, h->value))
+       if (!strcasecmp (header ? header : "", h->value ? h->value : ""))
            return (h - table);
 
     return NOTOK;
@@ -1173,9 +1189,11 @@ insert (struct mailname *np)
            : &netaddrs;
            mp->m_next;
            mp = mp->m_next)
-       if (!mh_strcasecmp (np->m_host, mp->m_next->m_host)
-               && !mh_strcasecmp (np->m_mbox, mp->m_next->m_mbox)
-               && np->m_bcc == mp->m_next->m_bcc)
+       if (!strcasecmp (np->m_host ? np->m_host : "",
+                        mp->m_next->m_host ? mp->m_next->m_host : "") &&
+           !strcasecmp (np->m_mbox ? np->m_mbox : "",
+                        mp->m_next->m_mbox ? mp->m_next->m_mbox : "") &&
+           np->m_bcc == mp->m_next->m_bcc)
            return 0;
 
     mp->m_next = np;
@@ -1253,13 +1271,13 @@ annoaux (struct mailname *mp)
 
 
 static void
-insert_fcc (struct headers *hdr, unsigned char *pp)
+insert_fcc (struct headers *hdr, char *pp)
 {
-    unsigned char *cp;
+    char *cp;
 
-    for (cp = pp; isspace (*cp); cp++)
+    for (cp = pp; isspace ((unsigned char) *cp); cp++)
        continue;
-    for (pp += strlen (pp) - 1; pp > cp && isspace (*pp); pp--)
+    for (pp += strlen (pp) - 1; pp > cp && isspace ((unsigned char) *pp); pp--)
        continue;
     if (pp >= cp)
        *++pp = 0;
@@ -1399,7 +1417,7 @@ static int
 find_prefix (void)
 {
     int        result = OK;
-    unsigned char buffer[BUFSIZ];
+    char buffer[BUFSIZ];
     FILE *in;
 
     if ((in = fopen (tmpfil, "r")) == NULL)
@@ -1407,10 +1425,10 @@ find_prefix (void)
 
     while (fgets (buffer, sizeof(buffer) - 1, in))
        if (buffer[0] == '-' && buffer[1] == '-') {
-           unsigned char *cp;
+           char *cp;
 
            for (cp = buffer + strlen (buffer) - 1; cp >= buffer; cp--)
-               if (!isspace (*cp))
+               if (!isspace ((unsigned char) *cp))
                    break;
            *++cp = '\0';
            if (strcmp (buffer + 2, prefix) == 0) {
@@ -1507,7 +1525,8 @@ post (char *file, int bccque, int talk, char *envelope)
     sigon ();
 
     if (sm_mts == MTS_SENDMAIL_PIPE) {
-       char *sargv[16], **argp;
+       char **argp, *program;
+       int argc;
 
        for (i = 0; (child_id = fork()) == NOTOK && i < 5; i++)
            sleep (5);
@@ -1520,17 +1539,16 @@ post (char *file, int bccque, int talk, char *envelope)
                    adios (file, "can't reopen for sendmail");
                }
 
-               argp = sargv;
-               *argp++ = "sendmail";
-               *argp++ = "-t"; /* read msg for recipients */
-               *argp++ = "-i"; /* don't stop on "." */
+               argp = argsplit(sendmail, &program, &argc);
+               argp[argc++] = "-t"; /* read msg for recipients */
+               argp[argc++] = "-i"; /* don't stop on "." */
                if (whomsw)
-                   *argp++ = "-bv";
+                   argp[argc++] = "-bv";
                if (snoop)
-                   *argp++ = "-v";
-               *argp = NULL;
+                   argp[argc++] = "-v";
+               argp[argc] = NULL;
 
-               execv (sendmail, sargv);
+               execv (program, argp);
                adios (sendmail, "can't exec");
 
            default: