X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=uip%2Fpost.c;h=abc228590112c8aa62f08f4532e0168ae08308f8;hb=b28e871ba874a53257b37eed94adfc365ed6ebf2;hp=8eb3b77fcdaa95d4e66ab5e869b6f18ee2a08318;hpb=794dab6aa5027ffaf024506140c258f6a0a9322d;p=mmh diff --git a/uip/post.c b/uip/post.c index 8eb3b77..abc2285 100644 --- a/uip/post.c +++ b/uip/post.c @@ -20,6 +20,17 @@ #include #include +#ifdef TIME_WITH_SYS_TIME +# include +# include +#else +# ifdef TM_IN_SYS_TIME +# include +# else +# include +# endif +#endif + #ifdef MMDFMTS # include # include @@ -43,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 }, @@ -87,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 @@ -265,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 */ @@ -736,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) @@ -746,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) @@ -765,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) @@ -844,10 +891,18 @@ finish_headers (FILE *out) fprintf (out, "Date: %s\n", dtime (&tclock, 0)); if (msgid) fprintf (out, "Message-ID: <%d.%ld@%s>\n", - (int) getpid (), tclock, LocalName ()); - if (msgflags & MFRM) - fprintf (out, "Sender: %s\n", from); + (int) getpid (), (long) tclock, LocalName ()); + 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; @@ -875,10 +930,18 @@ finish_headers (FILE *out) fprintf (out, "Resent-Date: %s\n", dtime (&tclock, 0)); if (msgid) fprintf (out, "Resent-Message-ID: <%d.%ld@%s>\n", - (int) getpid (), tclock, LocalName ()); - if (msgflags & MRFM) - fprintf (out, "Resent-Sender: %s\n", from); + (int) getpid (), (long) tclock, LocalName ()); + 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; @@ -1120,7 +1183,7 @@ make_bcc_file (int dashstuff) fprintf (out, "Date: %s\n", dtime (&tclock, 0)); if (msgid) fprintf (out, "Message-ID: <%d.%ld@%s>\n", - (int) getpid (), tclock, LocalName ()); + (int) getpid (), (long) tclock, LocalName ()); fprintf (out, "From: %s\n", signature); if (subject) fprintf (out, "Subject: %s", subject);