* This is a simpler, faster, replacement for "post" for use
* when "sendmail" is the transport system.
*
- * $Id$
+ * This code is Copyright (c) 2002, by the authors of nmh. See the
+ * COPYRIGHT file in the root directory of the nmh distribution for
+ * complete copyright information.
*/
#include <h/mh.h>
#include <h/dropsbr.h>
#include <h/tws.h>
#include <h/mts.h>
-
-#define uptolow(c) ((isalpha(c) && isupper (c)) ? tolower (c) : c)
+#include <h/utils.h>
#define MAX_SM_FIELD 1476 /* < largest hdr field sendmail will accept */
#define FCCS 10 /* max number of fccs allowed */
extern char *getfullname (void);
extern char *getusername (void);
+extern boolean draft_from_masquerading; /* defined in mts.c */
+
/*
* static prototypes
*/
static int get_header (char *, struct headers *);
static void putadr (char *, struct mailname *);
static int putone (char *, int, int);
-static void insert_fcc (struct headers *, char *);
+static void insert_fcc (struct headers *, unsigned char *);
static void file (char *);
static void fcc (char *, char *);
case normal:
if (!(msgflags & MDAT))
fprintf (out, "Date: %s\n", dtimenow (0));
- 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
fprintf (out, "From: %s\n", signature);
+
#ifdef notdef
if (!(msgflags & MVIS))
fprintf (out, "Bcc: Blind Distribution List: ;\n");
case resent:
if (!(msgflags & MRDT))
fprintf (out, "Resent-Date: %s\n", dtimenow(0));
- 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);
#ifdef notdef
if (!(msgflags & MVIS))
struct headers *h;
for (h = table; h->value; h++)
- if (!strcasecmp (header, h->value))
+ if (!mh_strcasecmp (header, h->value))
return (h - table);
return NOTOK;
static void
-insert_fcc (struct headers *hdr, char *pp)
+insert_fcc (struct headers *hdr, unsigned char *pp)
{
- char *cp;
+ unsigned char *cp;
for (cp = pp; isspace (*cp); cp++)
continue;
chmod (bccfil, 0600);
fprintf (out, "Date: %s\n", dtimenow (0));
- fprintf (out, "From: %s\n", signature);
+ 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 (subject)
fprintf (out, "Subject: %s", subject);
fprintf (out, "BCC:\n\n------- Blind-Carbon-Copy\n\n");