* uip/mhlistsbr.c, uip/mhlsbr.c, uip/picksbr.c: cast
[mmh] / uip / spost.c
index 4930cbb..1c1a8bc 100644 (file)
@@ -19,8 +19,7 @@
 #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 */
@@ -181,6 +180,8 @@ extern char *sendmail;
 extern char *getfullname (void);
 extern char *getusername (void);
 
+extern boolean  draft_from_masquerading;  /* defined in mts.c */
+
 /*
  * static prototypes
  */
@@ -190,7 +191,7 @@ static void finish_headers (FILE *);
 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 *);
 
@@ -578,10 +579,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");
@@ -591,9 +601,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))
@@ -613,7 +631,7 @@ get_header (char *header, struct headers *table)
     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;
@@ -702,9 +720,9 @@ putone (char *adr, int pos, int indent)
 
 
 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;
@@ -743,7 +761,18 @@ make_bcc_file (void)
     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");