X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/e6d87a04919616cf2a6ea6cbda81d5fbc31cc8a2..9322ba2854211794c27fae9468768b80b767c211:/uip/post.c?ds=inline diff --git a/uip/post.c b/uip/post.c index d385219e..9973beb7 100644 --- a/uip/post.c +++ b/uip/post.c @@ -89,6 +89,8 @@ X("tls", TLSminc(-3), TLSSW) \ X("initialtls", TLSminc(-10), INITTLSSW) \ X("notls", TLSminc(-5), NTLSSW) \ + X("certverify", TLSminc(-10), CERTVERSW) \ + X("nocertverify", TLSminc(-12), NOCERTVERSW) \ X("fileproc", -4, FILEPROCSW) \ X("mhlproc", -3, MHLPROCSW) \ X("sendmail program", 0, MTSSM) \ @@ -239,7 +241,7 @@ static int sasl=0; /* Use SASL auth for SMTP */ static char *saslmech=NULL; /* Force use of particular SASL mech */ static char *user=NULL; /* Authenticate as this user */ static char *port="submission"; /* Name of server port for SMTP submission */ -static int tls=-1; /* Use TLS for encryption */ +static int tlsflag=0; /* Flags to control TLS settings */ static int fromcount=0; /* Count of addresses on From: header */ static int seensender=0; /* Have we seen a Sender: header? */ @@ -313,7 +315,8 @@ static int find_prefix (void); int main (int argc, char **argv) { - int state, compnum, dashstuff = 0, swnum, oauth_flag = 0; + int state, compnum, dashstuff = 0, swnum, oauth_flag = 0, tls = -1; + int noverify = 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; @@ -530,6 +533,14 @@ main (int argc, char **argv) tls = 0; continue; + case CERTVERSW: + noverify = 0; + continue; + + case NOCERTVERSW: + noverify++; + continue; + case FILEPROCSW: if (!(cp = *argp++) || *cp == '-') adios (NULL, "missing argument to %s", argp[-2]); @@ -612,7 +623,7 @@ main (int argc, char **argv) case FLD: case FLDPLUS: compnum++; - cp = add (buf, NULL); + cp = mh_xstrdup(buf); while (state == FLDPLUS) { bufsz = sizeof buf; state = m_getfld (&gstate, name, buf, &bufsz, in); @@ -692,6 +703,16 @@ main (int argc, char **argv) #endif /* ! TLS_SUPPORT */ } + if (tls == 1) + tlsflag = S_STARTTLS; + else if (tls == 2) + tlsflag = S_INITTLS; + else + tlsflag = 0; + + if (noverify) + tlsflag |= S_NOVERIFY; + /* * If we were given any oauth flags, store the appropriate profile * entries and make sure an authservice was given (we have to do this @@ -750,7 +771,7 @@ main (int argc, char **argv) if (partno) printf ("Partial Message #%s Processed\n", partno); else - printf ("Message Processed\n"); + puts("Message Processed"); } done (0); @@ -785,7 +806,7 @@ putfmt (char *name, char *str, int *eai, FILE *out) If it does, enable EAI support. */ if (contains8bit(str, NULL)) { if (verbose) { - printf ("EAI/SMTPUTF8 enabled\n"); + puts("EAI/SMTPUTF8 enabled"); } /* Enable SMTPUTF8. */ @@ -804,8 +825,7 @@ putfmt (char *name, char *str, int *eai, FILE *out) should never have reached this point. Warn about any that are non-empty. */ if (strcmp (str, "\n")) { - char *newline = strchr (str, '\n'); - if (newline) *newline = '\0'; + trim_suffix_c(str, '\n'); if (! whomsw) { advise (NULL, "ignoring header line -- %s: %s", name, str); } @@ -827,7 +847,7 @@ putfmt (char *name, char *str, int *eai, FILE *out) msgflags |= (hdr->set & ~(MVIS | MINV)); if (hdr->flags & HSUB) - subject = subject ? add (str, add ("\t", subject)) : getcpy (str); + subject = subject ? add (str, add ("\t", subject)) : mh_xstrdup(str); if (hdr->flags & HFCC) { if ((cp = strrchr(str, '\n'))) *cp = 0; @@ -1042,7 +1062,7 @@ putfmt (char *name, char *str, int *eai, FILE *out) * Strip off any trailing newlines */ - while (strlen(fullfrom) > 0 && fullfrom[strlen(fullfrom) - 1] == '\n') { + while (*fullfrom && fullfrom[strlen(fullfrom) - 1] == '\n') { fullfrom[strlen(fullfrom) - 1] = '\0'; } } @@ -1218,7 +1238,7 @@ putadr (char *name, char *aka, struct mailname *mp, FILE *out, unsigned int flag } if (*aka && mp->m_type != UUCPHOST && !mp->m_pers) - mp->m_pers = getcpy (aka); + mp->m_pers = mh_xstrdup(aka); if (format) { if (mp->m_gname) { snprintf (buffer, sizeof(buffer), "%s;", mp->m_gname); @@ -1334,7 +1354,7 @@ pl (void) printf ("\n\t-- Folder Copies --\nfcc:\t"); for (i = 0; i < fccind; i++) printf ("%s%s", fccfold[i], i + 1 < fccind ? ",\n\t" : ""); - printf ("\n"); + putchar('\n'); } @@ -1390,7 +1410,7 @@ insert_fcc (struct headers *hdr, char *pp) if (fccind >= FCCS) adios (NULL, "too many %ss", hdr->value); - fccfold[fccind++] = getcpy (cp); + fccfold[fccind++] = mh_xstrdup(cp); } /* @@ -1528,7 +1548,7 @@ find_prefix (void) if ((in = fopen (tmpfil, "r")) == NULL) adios (tmpfil, "unable to re-open"); - while (fgets (buffer, sizeof(buffer) - 1, in)) + while (fgets (buffer, sizeof buffer, in)) if (buffer[0] == '-' && buffer[1] == '-') { char *cp; @@ -1573,7 +1593,7 @@ do_addresses (int bccque, int talk) for (lp = localaddrs.m_next; lp; lp = lp->m_next) if (lp->m_bcc ? bccque : !bccque) { if (talk && !state) - printf (" -- Local Recipients --\n"); + puts(" -- Local Recipients --"); do_an_address (lp, talk); state++; } @@ -1582,7 +1602,7 @@ do_addresses (int bccque, int talk) for (lp = uuaddrs.m_next; lp; lp = lp->m_next) if (lp->m_bcc ? bccque : !bccque) { if (talk && !state) - printf (" -- UUCP Recipients --\n"); + puts(" -- UUCP Recipients --"); do_an_address (lp, talk); state++; } @@ -1591,7 +1611,7 @@ do_addresses (int bccque, int talk) for (lp = netaddrs.m_next; lp; lp = lp->m_next) if (lp->m_bcc ? bccque : !bccque) { if (talk && !state) - printf (" -- Network Recipients --\n"); + puts(" -- Network Recipients --"); do_an_address (lp, talk); state++; } @@ -1624,7 +1644,7 @@ post (char *file, int bccque, int talk, int eai, char *envelope, printf (" -- Posting for %s Recipients --\n", bccque ? "Blind" : "Sighted"); else - printf (" -- Posting for All Recipients --\n"); + puts(" -- Posting for All Recipients --"); } sigon (); @@ -1681,7 +1701,7 @@ post (char *file, int bccque, int talk, int eai, char *envelope, if (rp_isbad (retval = sm_init (clientsw, serversw, port, watch, verbose, snoop, sasl, saslmech, user, - oauth_flag ? auth_svc : NULL, tls)) + oauth_flag ? auth_svc : NULL, tlsflag)) || rp_isbad (retval = sm_winit (envelope, eai, eightbit))) { close (fd); die (NULL, "problem initializing server; %s", rp_string (retval)); @@ -1700,7 +1720,7 @@ post (char *file, int bccque, int talk, int eai, char *envelope, printf (" -- %s Recipient Copies Posted --\n", bccque ? "Blind" : "Sighted"); else - printf (" -- Recipient Copies Posted --\n"); + puts(" -- Recipient Copies Posted --"); } fflush (stdout); @@ -1725,32 +1745,32 @@ verify_all_addresses (int talk, int eai, char *envelope, int oauth_flag, if (rp_isbad (retval = sm_init (clientsw, serversw, port, watch, verbose, snoop, sasl, saslmech, user, - oauth_flag ? auth_svc : NULL, tls)) + oauth_flag ? auth_svc : NULL, tlsflag)) || rp_isbad (retval = sm_winit (envelope, eai, eightbit))) { die (NULL, "problem initializing server; %s", rp_string (retval)); } } if (talk && !whomsw) - printf (" -- Address Verification --\n"); + puts(" -- Address Verification --"); if (talk && localaddrs.m_next) - printf (" -- Local Recipients --\n"); + puts(" -- Local Recipients --"); for (lp = localaddrs.m_next; lp; lp = lp->m_next) do_an_address (lp, talk); if (talk && uuaddrs.m_next) - printf (" -- UUCP Recipients --\n"); + puts(" -- UUCP Recipients --"); for (lp = uuaddrs.m_next; lp; lp = lp->m_next) do_an_address (lp, talk); if (talk && netaddrs.m_next) - printf (" -- Network Recipients --\n"); + puts(" -- Network Recipients --"); for (lp = netaddrs.m_next; lp; lp = lp->m_next) do_an_address (lp, talk); chkadr (); if (talk && !whomsw) - printf (" -- Address Verification Successful --\n"); + puts(" -- Address Verification Successful --"); if (!whomsw || checksw) sm_end (DONE); @@ -1802,7 +1822,7 @@ do_an_address (struct mailname *lp, int talk) lp->m_type != UUCPHOST ? lp->m_path : NULL)) { case RP_OK: if (talk) - printf ("address ok\n"); + puts("address ok"); break; case RP_NO: @@ -1847,6 +1867,7 @@ do_text (char *file, int fd) case RP_NO: case RP_NDEL: die (NULL, "posting failed; %s", rp_string (retval)); + /* FALLTHRU */ default: die (NULL, "unexpected response; %s", rp_string (retval)); @@ -1912,11 +1933,11 @@ p_refile (char *file) return; if (verbose) - printf (" -- Filing Folder Copies --\n"); + puts(" -- Filing Folder Copies --"); for (i = 0; i < fccind; i++) fcc (file, fccfold[i]); if (verbose) - printf (" -- Folder Copies Filed --\n"); + puts(" -- Folder Copies Filed --"); } @@ -1971,7 +1992,7 @@ fcc (char *file, char *folder) pidstatus (status, verbose ? stdout : stderr, NULL); } else { if (verbose) - printf ("folder ok\n"); + puts("folder ok"); } }