X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/afee8ed17a56617618fb7f963b111d7cf0fb56e7..fc69a9cd8f854da20fc2f4cf99fcf726958485f5:/uip/post.c diff --git a/uip/post.c b/uip/post.c index 7bed6f8a..aadc6271 100644 --- a/uip/post.c +++ b/uip/post.c @@ -15,13 +15,9 @@ #include #include #include - #include #include -#include -#include - #ifdef HAVE_SYS_TIME_H # include #endif @@ -88,10 +84,12 @@ 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, @@ -185,8 +183,6 @@ static short fccind = 0; /* index into fccfold[] */ static short outputlinelen = OUTPUTLINELEN; static int pfd = NOTOK; /* fd to write annotation list to */ -static uid_t myuid= -1; /* my user id */ -static gid_t mygid= -1; /* my group id */ static int recipients = 0; /* how many people will get a copy */ static int unkadr = 0; /* how many of those were unknown */ static int badadr = 0; /* number of bad addrs */ @@ -263,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); @@ -470,7 +466,11 @@ main (int argc, char **argv) continue; case TLSSW: - tls++; + tls = 1; + continue; + + case INITTLSSW: + tls = 2; continue; case NTLSSW: @@ -495,6 +495,13 @@ main (int argc, char **argv) save_mts_method (cp); continue; + case CREDENTIALSSW: { + if (!(cp = *argp++) || *cp == '-') + adios (NULL, "missing argument to %s", argp[-2]); + add_profile_entry ("credentials", cp); + continue; + } + case MESSAGEIDSW: if (!(cp = *argp++) || *cp == '-') adios (NULL, "missing argument to %s", argp[-2]); @@ -923,12 +930,9 @@ 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; - myuid = getuid (); - mygid = getgid (); time (&tclock); /* @@ -1076,7 +1080,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; @@ -1177,9 +1181,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; @@ -1257,13 +1263,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; @@ -1284,9 +1290,9 @@ make_bcc_file (int dashstuff) { int fd, i; pid_t child_id; - char *vec[6]; + char **vec; FILE *out; - char *tfile = NULL; + char *tfile = NULL, *program; tfile = m_mktemp2(NULL, "bccs", NULL, &out); if (tfile == NULL) adios("bcc", "unable to create temporary file"); @@ -1338,8 +1344,6 @@ make_bcc_file (int dashstuff) * of MIME encapsulation. */ if (filter != NULL) { - vec[0] = r1bindex (mhlproc, '/'); - for (i = 0; (child_id = fork()) == NOTOK && i < 5; i++) sleep (5); switch (child_id) { @@ -1349,7 +1353,7 @@ make_bcc_file (int dashstuff) case OK: dup2 (fileno (out), 1); - i = 1; + vec = argsplit(mhlproc, &program, &i); vec[i++] = "-forward"; vec[i++] = "-form"; vec[i++] = filter; @@ -1362,7 +1366,7 @@ make_bcc_file (int dashstuff) vec[i++] = "-nodashstuffing"; vec[i] = NULL; - execvp (mhlproc, vec); + execvp (program, vec); fprintf (stderr, "unable to exec "); perror (mhlproc); _exit (-1); @@ -1405,7 +1409,7 @@ static int find_prefix (void) { int result = OK; - unsigned char buffer[BUFSIZ]; + char buffer[BUFSIZ]; FILE *in; if ((in = fopen (tmpfil, "r")) == NULL) @@ -1413,10 +1417,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) { @@ -1513,7 +1517,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); @@ -1526,17 +1531,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: