[bug #4302] errno is not always an extern int
[mmh] / uip / spost.c
index 206698e..5a7d943 100644 (file)
@@ -6,6 +6,10 @@
  * 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>
@@ -13,8 +17,8 @@
 #include <h/addrsbr.h>
 #include <h/aliasbr.h>
 #include <h/dropsbr.h>
-#include <zotnet/tws/tws.h>
-#include <zotnet/mts/mts.h>
+#include <h/tws.h>
+#include <h/mts.h>
 
 #define        uptolow(c)      ((isalpha(c) && isupper (c)) ? tolower (c) : c)
 
@@ -55,7 +59,7 @@ struct swit switches[] = {
 #define VERSIONSW           15
     { "version", 0 },
 #define        HELPSW              16
-    { "help", 4 },
+    { "help", 0 },
 #define        DEBUGSW             17
     { "debug", -5 },
 #define        DISTSW              18
@@ -177,6 +181,8 @@ extern char *sendmail;
 extern char *getfullname (void);
 extern char *getusername (void);
 
+extern boolean  draft_from_masquerading;  /* defined in mts.c */
+
 /*
  * static prototypes
  */
@@ -574,10 +580,19 @@ finish_headers (FILE *out)
        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");
@@ -587,9 +602,17 @@ finish_headers (FILE *out)
        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))
@@ -727,9 +750,15 @@ make_bcc_file (void)
     char *vec[6];
     FILE * in, *out;
 
+#ifdef HAVE_MKSTEMP
+    fd = mkstemp(bccfil);
+    if (fd == -1 || (out = fdopen(fd, "w")) == NULL)
+       adios (bccfil, "unable to create");
+#else
     mktemp (bccfil);
     if ((out = fopen (bccfil, "w")) == NULL)
        adios (bccfil, "unable to create");
+#endif
     chmod (bccfil, 0600);
 
     fprintf (out, "Date: %s\n", dtimenow (0));