X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/a109ec7024b3c857ab1b628788ec6c15c19ca513..f2552a93d977406ed401dc206d7af889e5840f6e:/uip/post.c diff --git a/uip/post.c b/uip/post.c index 02e3283a..08e52426 100644 --- a/uip/post.c +++ b/uip/post.c @@ -323,7 +323,7 @@ main (int argc, char **argv) char *cp, *msg = NULL, **argp, **arguments, *envelope; char buf[NMH_BUFSIZ], name[NAMESZ], *auth_svc = NULL; FILE *in, *out; - m_getfld_state_t gstate = 0; + m_getfld_state_t gstate; if (nmh_init(argv[0], 0 /* use context_foil() */)) { return 1; } @@ -584,8 +584,7 @@ main (int argc, char **argv) } if (msg) adios (NULL, "only one message at a time!"); - else - msg = cp; + msg = cp; } alias (AliasFile); @@ -619,16 +618,17 @@ main (int argc, char **argv) hdrtab = msgstate == NORMAL ? NHeaders : RHeaders; + gstate = m_getfld_state_init(in); for (compnum = 1;;) { int bufsz = sizeof buf; - switch (state = m_getfld (&gstate, name, buf, &bufsz, in)) { + switch (state = m_getfld2(&gstate, name, buf, &bufsz)) { case FLD: case FLDPLUS: compnum++; cp = mh_xstrdup(buf); while (state == FLDPLUS) { bufsz = sizeof buf; - state = m_getfld (&gstate, name, buf, &bufsz, in); + state = m_getfld2(&gstate, name, buf, &bufsz); cp = add (buf, cp); } putfmt (name, cp, &eai, out); @@ -642,7 +642,7 @@ main (int argc, char **argv) fprintf (out, "\n%s", buf); while (state == BODY) { bufsz = sizeof buf; - state = m_getfld (&gstate, name, buf, &bufsz, in); + state = m_getfld2(&gstate, name, buf, &bufsz); fputs (buf, out); } break; @@ -669,9 +669,8 @@ main (int argc, char **argv) if (debug) { pl (); done (0); - } else { - fclose (out); } + fclose (out); /* * Here's how we decide which address to use as the envelope-from @@ -886,7 +885,7 @@ putfmt (char *name, char *str, int *eai, FILE *out) if ((msgstate == RESENT) ? (hdr->set & MRFM) : (hdr->set & MFRM)) { savehdr = fullfrom; savehdr[0] = '\0'; - savehdlen = sizeof(fullfrom); + savehdrlen = sizeof(fullfrom); } tmpaddrs.m_next = NULL; @@ -989,9 +988,8 @@ putfmt (char *name, char *str, int *eai, FILE *out) mp->m_bcc++; if (np->m_ingrp) mp->m_ingrp = np->m_ingrp; - else - if (mp->m_gname) - putgrp (namep, mp->m_gname, out, hdr->flags); + else if (mp->m_gname) + putgrp (namep, mp->m_gname, out, hdr->flags); if (mp->m_ingrp) { if (sm_mts == MTS_SENDMAIL_PIPE) { /* Catch this before sendmail chokes with: @@ -1068,13 +1066,12 @@ putfmt (char *name, char *str, int *eai, FILE *out) mnfree (mp); } -#error - strncpy(fullfrom, str, sizeof(fullfrom)); - fullfrom[sizeof(fullfrom) - 1] = 0; - /* - * Strip off any trailing newlines - */ + /* + * If it was a From header, strip off any trailing newlines from + * the alias-expanded From line. + */ + if ((msgstate == RESENT) ? (hdr->set & MRFM) : (hdr->set & MFRM)) { while (*fullfrom && fullfrom[strlen(fullfrom) - 1] == '\n') { fullfrom[strlen(fullfrom) - 1] = '\0'; } @@ -1298,7 +1295,7 @@ putadr (char *name, char *aka, struct mailname *mp, FILE *out, fputs (cp, out); if (saveappend && shlen + len < savehdrsize) - strncat(savehdr, out); + strncat(savehdr, cp, savehdrsize - shlen + len); linepos += len; @@ -1495,11 +1492,10 @@ make_bcc_file (int dashstuff) while (find_prefix () == NOTOK) { if (*cp < 'z') (*cp)++; - else - if (*++cp == 0) - adios (NULL, "can't find a unique delimiter string"); - else - (*cp)++; + else if (*++cp == 0) + adios (NULL, "can't find a unique delimiter string"); + else + (*cp)++; } fprintf (out, "%s: %s\n%s: multipart/digest; boundary=\"",