static char from[BUFSIZ]; /* my network address */
static char sender[BUFSIZ]; /* my Sender: header */
static char efrom[BUFSIZ]; /* my Envelope-From: header */
+static char fullfrom[BUFSIZ]; /* full contents of From header */
static char signature[BUFSIZ]; /* my signature */
static char *filter = NULL; /* the filter for BCC'ing */
static char *subject = NULL; /* the subject field for BCC'ing */
}
if ((i = get_header (name, hdrtab)) == NOTOK) {
- fprintf (out, "%s: %s", name, str);
+ if (strncasecmp (name, "nmh-", 4)) {
+ fprintf (out, "%s: %s", name, str);
+ } else {
+ /* Filter out all Nmh-* headers, because Norm asked. They
+ 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';
+ if (! whomsw) {
+ advise (NULL, "ignoring header line -- %s: %s", name, str);
+ }
+ }
+ }
+
return;
}
else
if (mp->m_gname)
putgrp (namep, mp->m_gname, out, hdr->flags);
- if (mp->m_ingrp)
+ if (mp->m_ingrp) {
+ if (sm_mts == MTS_SENDMAIL_PIPE) {
+ /* Catch this before sendmail chokes with:
+ "553 List:; syntax illegal for recipient
+ addresses".
+ If we wanted to, we could expand out blind
+ aliases and put them in Bcc:, but then
+ they'd have the Blind-Carbon-Copy
+ indication. */
+ adios (NULL,
+ "blind lists not compatible with"
+ " sendmail/pipe");
+ }
+
grp++;
+ }
if (putadr (namep, qp, mp, out, hdr->flags))
msgflags |= (hdr->set & (MVIS | MINV));
else
mnfree (mp);
}
+ /*
+ * If this is a From:/Resent-From: header, save the full thing for
+ * later in case we need it for use when constructing a Bcc draft message
+ */
+
+ if ((msgstate == RESENT) ? (hdr->set & MRFM) : (hdr->set & MFRM)) {
+ strncpy(fullfrom, str, sizeof(fullfrom));
+ fullfrom[sizeof(fullfrom) - 1] = 0;
+ /*
+ * Strip off any trailing newlines
+ */
+
+ while (strlen(fullfrom) > 0 && fullfrom[strlen(fullfrom) - 1] == '\n') {
+ fullfrom[strlen(fullfrom) - 1] = '\0';
+ }
+ }
+
if (grp > 0 && (hdr->flags & HNGR)) {
advise (NULL, "%s: field does not allow groups", name);
badmsg++;
from[0] = '\0';
efrom[0] = '\0';
sender[0] = '\0';
+ fullfrom[0] = '\0';
if ((cp = getfullname ()) && *cp) {
strncpy (sigbuf, cp, sizeof(sigbuf));
tfile = m_mktemp2(NULL, "bccs", NULL, &out);
if (tfile == NULL) adios("bcc", "unable to create temporary file");
- chmod (bccfil, 0600);
strncpy (bccfil, tfile, sizeof(bccfil));
+ fprintf (out, "From: %s\n", fullfrom);
fprintf (out, "Date: %s\n", dtime (&tclock, 0));
if (msgid)
fprintf (out, "Message-ID: %s\n", message_id (tclock, 0));