X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fpost.c;h=a866703c2871edcd093082547e3d4dde09047427;hp=a66e24110b32e767f9477f5353d00f9e6fb1d20a;hb=df7b16cb148474b3b80dbf1e226e858cf1e47edb;hpb=e804a366f5091e90f1c0971e2b7546df69f1315a diff --git a/uip/post.c b/uip/post.c index a66e241..a866703 100644 --- a/uip/post.c +++ b/uip/post.c @@ -13,7 +13,7 @@ #include #include -#include +#include #include #include @@ -36,15 +36,7 @@ # include #endif -/* - * Currently smtp and sendmail use - * the same interface for posting. - */ #ifdef SMTPMTS -# define SENDMTS -#endif - -#ifdef SENDMTS # include #endif @@ -267,14 +259,14 @@ static char *submitmode = "m"; /* deliver to mailbox only */ static char submitopts[6] = "vl"; /* initial options for submit */ #endif /* MMDFMTS */ -#ifdef SENDMTS +#ifdef SMTPMTS static int snoop = 0; static int smtpmode = S_MAIL; static char *clientsw = NULL; static char *serversw = NULL; extern struct smtp sm_reply; -#endif /* SENDMTS */ +#endif /* SMTPMTS */ static char prefix[] = "----- =_aaaaaaaaaa"; @@ -283,7 +275,7 @@ static char *fill_in = NULL; static char *partno = NULL; static int queued = 0; -extern int MMailids; +extern boolean draft_from_masquerading; /* defined in mts.c */ /* * static prototypes @@ -475,7 +467,7 @@ main (int argc, char **argv) adios (NULL, "missing argument to %s", argp[-2]); continue; -#ifndef SENDMTS +#ifndef SMTPMTS case CLIESW: case SERVSW: if (!(cp = *argp++) || *cp == '-') @@ -484,7 +476,7 @@ main (int argc, char **argv) case SNOOPSW: continue; -#else /* SENDMTS */ +#else /* SMTPMTS */ case MAILSW: smtpmode = S_MAIL; continue; @@ -508,7 +500,7 @@ main (int argc, char **argv) case SNOOPSW: snoop++; continue; -#endif /* SENDMTS */ +#endif /* SMTPMTS */ case FILLSW: if (!(fill_in = *argp++) || *fill_in == '-') @@ -726,14 +718,6 @@ putfmt (char *name, char *str, FILE *out) tmpaddrs.m_next = NULL; for (count = 0; (cp = getname (str)); count++) if ((mp = getm (cp, NULL, 0, AD_HOST, NULL))) { - if (MMailids && (hdr->set & MFRM)) - /* The user manually specified a From: address in their draft - and mts.conf turned on "mmailid", so we'll set things up to - use the actual email address embedded in the draft From: - (without the GECOS full name or angle brackets) as the - envelope From:. */ - strncpy(from, auxformat(mp, 0), sizeof(from) - 1); - if (tmpaddrs.m_next) np->m_next = mp; else @@ -764,7 +748,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) @@ -774,6 +759,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) @@ -793,6 +791,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) @@ -875,10 +886,11 @@ finish_headers (FILE *out) (int) getpid (), (long) tclock, LocalName ()); if (msgflags & MFRM) { /* There was already a From: in the draft. Don't add one. */ - if (!MMailids) - /* mts.conf didn't turn on mmailid, so we'll reveal the - user's actual account@thismachine address in a Sender: - header (and use it as the envelope From: later). */ + 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 @@ -911,9 +923,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; @@ -1350,10 +1370,10 @@ do_addresses (int bccque, int talk) die (NULL, "problem ending addresses [%s]\n", rp_valstr (retval)); #endif /* MMDFMTS */ -#ifdef SENDMTS +#ifdef SMTPMTS if (rp_isbad (retval = sm_waend ())) die (NULL, "problem ending addresses; %s", rp_string (retval)); -#endif /* SENDMTS */ +#endif /* SMTPMTS */ } @@ -1366,7 +1386,7 @@ do_addresses (int bccque, int talk) * SENDMAIL/SMTP routines */ -#ifdef SENDMTS +#ifdef SMTPMTS static void post (char *file, int bccque, int talk) @@ -1549,7 +1569,7 @@ do_text (char *file, int fd) } } -#endif /* SENDMTS */ +#endif /* SMTPMTS */ /* * MMDF routines @@ -1842,10 +1862,10 @@ sigser (int i) mm_end (NOTOK); #endif /* MMDFMTS */ -#ifdef SENDMTS +#ifdef SMTPMTS if (!whomsw || checksw) sm_end (NOTOK); -#endif /* SENDMTS */ +#endif /* SMTPMTS */ done (1); } @@ -1966,10 +1986,10 @@ die (char *what, char *fmt, ...) mm_end (NOTOK); #endif /* MMDFMTS */ -#ifdef SENDMTS +#ifdef SMTPMTS if (!whomsw || checksw) sm_end (NOTOK); -#endif /* SENDMTS */ +#endif /* SMTPMTS */ va_start(ap, fmt); advertise (what, NULL, fmt, ap);