Move #include from h/mh.h to source files
[mmh] / uip / spost.c
index de4a6d2..449d1a7 100644 (file)
@@ -16,6 +16,8 @@
 #include <h/dropsbr.h>
 #include <h/tws.h>
 #include <h/utils.h>
+#include <unistd.h>
+#include <locale.h>
 
 #define MAX_SM_FIELD 1476  /* < largest hdr field sendmail will accept */
 
@@ -149,7 +151,7 @@ main(int argc, char **argv)
                        switch (smatch(++cp, switches)) {
                        case AMBIGSW:
                                ambigsw(cp, switches);
-                               done(1);
+                               exit(1);
                        case UNKWNSW:
                                adios(NULL, "-%s unknown", cp);
 
@@ -158,10 +160,10 @@ main(int argc, char **argv)
                                                "%s [switches] file",
                                                invo_name);
                                print_help(buf, switches, 1);
-                               done(1);
+                               exit(0);
                        case VERSIONSW:
                                print_version(invo_name);
-                               done(1);
+                               exit(0);
 
                        case DEBUGSW:
                                debug++;
@@ -262,7 +264,7 @@ main(int argc, char **argv)
 
        if (debug) {
                /* stop here */
-               done(0);
+               exit(0);
        }
 
        fclose(out);
@@ -314,20 +316,25 @@ putfmt(char *name, char *str, FILE *out)
        char *cp;
        struct headers *hdr;
 
-       /* remove all leading whitespace (even newlines) */
-       while (*str==' ' || *str=='\t' || *str=='\n') {
+       /* remove leading whitespace */
+       while (*str==' ' || *str=='\t') {
                str++;
        }
 
        if ((i = get_header(name, hdrtab)) == NOTOK) {
-               /* no header we would care for: push it through */
-               fprintf(out, "%s: %s", name, str);
+               /* no header we would care for */
+               if (mh_strcasecmp(name, attach_hdr)!=0 &&
+                               mh_strcasecmp(name, sign_hdr)!=0 &&
+                               mh_strcasecmp(name, enc_hdr)!=0) {
+                       /* push it through */
+                       fprintf(out, "%s: %s", name, str);
+               }
                return;
        }
        /* it's one of the interesting headers */
        hdr = &hdrtab[i];
 
-       if (hdr->flags & HIGN || !*str) {
+       if (hdr->flags & HIGN || strcmp(str, "\n")==0) {
                return;
        }
 
@@ -425,7 +432,7 @@ finish_headers(FILE *out)
                fprintf(out, "%sDate: %s\n", resentstr, dtimenow());
        }
 
-       strncpy(from, getusername(), sizeof(from));
+       snprintf(from, sizeof(from), "%s@%s", getusername(), LocalName());
        if ((cp = getfullname()) && *cp) {
                snprintf(signature, sizeof(signature), "%s <%s>", cp, from);
        } else {
@@ -434,11 +441,14 @@ finish_headers(FILE *out)
        if (!(msgflags & MFRM)) {
                fprintf(out, "%sFrom: %s\n", resentstr, signature);
        } else {
-               /* In case the From: header contains multiple addresses. */
+               /*
+               ** Add a Sender: header because the From: header could
+               ** be fake or contain multiple addresses.
+               */
                fprintf(out, "%sSender: %s\n", resentstr, from);
        }
        if (!(msgflags & MVIS)) {
-               fprintf(out, "%sBcc: Blind Distribution List: ;\n", resentstr);
+               fprintf(out, "%sBcc: undisclosed-recipients:;\n", resentstr);
        }
        if (badmsg) {
                unlink(tmpfil);
@@ -620,7 +630,6 @@ static void
 process_bccs(char *origmsg)
 {
        char *bccdraft = NULL;
-       char buf[BUFSIZ];
        struct mailname *mp = NULL;
        FILE *out = NULL;
 
@@ -632,8 +641,7 @@ process_bccs(char *origmsg)
                fprintf(out, "------------\n");
                fclose(out);
 
-               snprintf(buf, sizeof buf, "send %s", bccdraft);
-               if (system(buf) != 0) {
+               if (execprogl("send", "send", bccdraft, (char *)NULL) != 0) {
                        admonish(invo_name, "Problems to send Bcc to %s",
                                        mp->m_text);
                        unlink(bccdraft);