X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=uip%2Fpost.c;h=abc228590112c8aa62f08f4532e0168ae08308f8;hb=b28e871ba874a53257b37eed94adfc365ed6ebf2;hp=a1cc05f68d0c1320f737b94dc872b215e6d99169;hpb=d036480eb208e821aba1485ec77da7f06bdf13a8;p=mmh diff --git a/uip/post.c b/uip/post.c index a1cc05f..abc2285 100644 --- a/uip/post.c +++ b/uip/post.c @@ -54,6 +54,13 @@ #define FCCS 10 /* max number of fccs allowed */ +/* In the following array of structures, the numeric second field of the + structures (minchars) is apparently used like this: + + -# : Switch can be abbreviated to # characters; switch hidden in -help. + 0 : Switch can't be abbreviated; switch shown in -help. + # : Switch can be abbreviated to # characters; switch shown in -help. */ + static struct swit switches[] = { #define ALIASW 0 { "alias aliasfile", 0 }, @@ -98,7 +105,7 @@ static struct swit switches[] = { #define VERSIONSW 20 { "version", 0 }, #define HELPSW 21 - { "help", 4 }, + { "help", 0 }, #define BITSTUFFSW 22 { "dashstuffing", -12 }, /* should we dashstuff BCC messages? */ #define NBITSTUFFSW 23 @@ -276,6 +283,8 @@ static char *fill_in = NULL; static char *partno = NULL; static int queued = 0; +extern boolean draft_from_masquerading; /* defined in mts.c */ + /* * static prototypes */ @@ -747,7 +756,8 @@ putfmt (char *name, char *str, FILE *out) for (grp = 0, mp = tmpaddrs.m_next; mp; mp = np) if (mp->m_nohost) { /* also used to test (hdr->flags & HTRY) */ - pp = akvalue (mp->m_mbox); + /* The address doesn't include a host, so it might be an alias. */ + pp = akvalue (mp->m_mbox); /* do mh alias substitution */ qp = akvisible () ? mp->m_mbox : ""; np = mp; if (np->m_gname) @@ -757,6 +767,19 @@ putfmt (char *name, char *str, FILE *out) badadr++; continue; } + + if (draft_from_masquerading && ((msgstate == RESENT) + ? (hdr->set & MRFM) + : (hdr->set & MFRM))) + /* The user manually specified a [Resent-]From: address in + their draft and the "masquerade:" line in mts.conf + doesn't contain "draft_from", so we'll set things up to + use the actual email address embedded in the draft + [Resent-]From: (after alias substitution, and without the + GECOS full name or angle brackets) as the envelope + From:. */ + strncpy(from, auxformat(mp, 0), sizeof(from) - 1); + if (hdr->flags & HBCC) mp->m_bcc++; if (np->m_ingrp) @@ -776,6 +799,19 @@ putfmt (char *name, char *str, FILE *out) mnfree (mp); } else { + /* Address includes a host, so no alias substitution is needed. */ + if (draft_from_masquerading && ((msgstate == RESENT) + ? (hdr->set & MRFM) + : (hdr->set & MFRM))) + /* The user manually specified a [Resent-]From: address in + their draft and the "masquerade:" line in mts.conf + doesn't contain "draft_from", so we'll set things up to + use the actual email address embedded in the draft + [Resent-]From: (after alias substitution, and without the + GECOS full name or angle brackets) as the envelope + From:. */ + strncpy(from, auxformat(mp, 0), sizeof(from) - 1); + if (hdr->flags & HBCC) mp->m_bcc++; if (mp->m_gname) @@ -856,9 +892,17 @@ finish_headers (FILE *out) if (msgid) fprintf (out, "Message-ID: <%d.%ld@%s>\n", (int) getpid (), (long) tclock, LocalName ()); - if (msgflags & MFRM) - fprintf (out, "Sender: %s\n", from); + if (msgflags & MFRM) { + /* There was already a From: in the draft. Don't add one. */ + if (!draft_from_masquerading) + /* mts.conf didn't contain "masquerade:[...]draft_from[...]" + so we'll reveal the user's actual account@thismachine + address in a Sender: header (and use it as the envelope + From: later). */ + fprintf (out, "Sender: %s\n", from); + } else + /* Construct a From: header. */ fprintf (out, "From: %s\n", signature); if (whomsw) break; @@ -887,9 +931,17 @@ finish_headers (FILE *out) if (msgid) fprintf (out, "Resent-Message-ID: <%d.%ld@%s>\n", (int) getpid (), (long) tclock, LocalName ()); - if (msgflags & MRFM) - fprintf (out, "Resent-Sender: %s\n", from); + if (msgflags & MRFM) { + /* There was already a Resent-From: in draft. Don't add one. */ + if (!draft_from_masquerading) + /* mts.conf didn't contain "masquerade:[...]draft_from[...]" + so we'll reveal the user's actual account@thismachine + address in a Sender: header (and use it as the envelope + From: later). */ + fprintf (out, "Resent-Sender: %s\n", from); + } else + /* Construct a Resent-From: header. */ fprintf (out, "Resent-From: %s\n", signature); if (whomsw) break;