spost: Refactor braces, comments, etc.
[mmh] / uip / spost.c
index 476227b..b5fac12 100644 (file)
@@ -56,6 +56,7 @@ static struct swit switches[] = {
 #define MVIS  0x0008  /* we've seen sighted addrs */
 #define MINV  0x0010  /* we've seen blind addrs */
 #define MRDT  0x0020  /* we've seen a Resent-Date: */
+#define MFMM  0x0040  /* The Mail is From a Alternative-Mailbox Addresse */
 
 struct headers {
        char *value;
@@ -182,17 +183,20 @@ main(int argc, char **argv)
                                continue;
                        }
                }
-               if (msg)
+               if (msg) {
                        adios(EX_USAGE, NULL, "only one message at a time!");
-               else
+               } else {
                        msg = cp;
+               }
        }
 
-       if (!msg)
+       if (!msg) {
                adios(EX_USAGE, NULL, "usage: %s [switches] file", invo_name);
+       }
 
-       if ((in = fopen(msg, "r")) == NULL)
+       if ((in = fopen(msg, "r")) == NULL) {
                adios(EX_IOERR, msg, "unable to open");
+       }
 
        if (debug) {
                verbose++;
@@ -324,12 +328,17 @@ putfmt(char *name, char *str, FILE *out)
 
        if ((i = get_header(name, hdrtab)) == NOTOK) {
                /* 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);
+               if (mh_strcasecmp(name, attach_hdr)==0) {
+                       return;
+               }
+               if (mh_strcasecmp(name, sign_hdr)==0) {
+                       return;
                }
+               if (mh_strcasecmp(name, enc_hdr)==0) {
+                       return;
+               }
+               /* push it through */
+               fprintf(out, "%s: %s", name, str);
                return;
        }
        /* it's one of the interesting headers */
@@ -411,6 +420,20 @@ putfmt(char *name, char *str, FILE *out)
        ** -- meillo@marmaro.de  2012-02
        */
 
+       if (hdr->set & MFRM) {
+               struct mailname *mp = NULL;
+
+               /* needed because the address parser holds global state */
+               ismymbox(NULL);
+
+               while ((cp = getname(str)) != NULL) {
+                       mp = getm(cp, NULL, 0, AD_NAME, NULL);
+                       if (ismymbox(mp)) {
+                               msgflags |= MFMM;
+                       }
+               }
+       }
+
        if (hdr->flags & HSUB) {
                subject = getcpy(str);
        }
@@ -433,11 +456,15 @@ finish_headers(FILE *out)
                fprintf(out, "%sDate: %s\n", resentstr, dtimenow());
        }
 
-       snprintf(from, sizeof(from), "%s@%s", getusername(), LocalName());
-       if ((cp = getfullname()) && *cp) {
-               snprintf(signature, sizeof(signature), "%s <%s>", cp, from);
+       if ((cp = context_find("Default-From")) != NULL) {
+               snprintf(signature, sizeof(signature), "%s", cp);
        } else {
-               snprintf(signature, sizeof(signature), "%s", from);
+               snprintf(from, sizeof(from), "%s@%s", getusername(), LocalName());
+               if ((cp = getfullname()) && *cp) {
+                       snprintf(signature, sizeof(signature), "%s <%s>", cp, from);
+               } else {
+                       snprintf(signature, sizeof(signature), "%s", from);
+               }
        }
        if (!(msgflags & MFRM)) {
                fprintf(out, "%sFrom: %s\n", resentstr, signature);
@@ -446,7 +473,9 @@ finish_headers(FILE *out)
                ** Add a Sender: header because the From: header could
                ** be fake or contain multiple addresses.
                */
-               fprintf(out, "%sSender: %s\n", resentstr, from);
+               if (!(msgflags & MFMM)) {
+                       fprintf(out, "%sSender: %s\n", resentstr, signature);
+               }
        }
        if (!(msgflags & MVIS)) {
                fprintf(out, "%sBcc: undisclosed-recipients:;\n", resentstr);
@@ -471,7 +500,6 @@ get_header(char *header, struct headers *table)
                        return (h - table);
                }
        }
-
        return NOTOK;
 }
 
@@ -502,7 +530,7 @@ putadr(char *name, struct mailname *nl)
                        /* a local name - see if it's an alias */
                        cp = akvalue(mp->m_mbox);
                        if (cp == mp->m_mbox) {
-                               /* wasn't an alias - use what the user typed */
+                               /* wasn't an alias - use it unchanged */
                                linepos = putone(mp->m_text, linepos, namelen);
                        } else {
                                /* an alias - expand it */
@@ -524,7 +552,7 @@ putadr(char *name, struct mailname *nl)
                                }
                        }
                } else {
-                       /* not a local name - use what the user typed */
+                       /* not a local name - use it unchanged */
                        linepos = putone(mp->m_text, linepos, namelen);
                }
                mp2 = mp;
@@ -537,13 +565,13 @@ putadr(char *name, struct mailname *nl)
 static int
 putone(char *adr, int pos, int indent)
 {
-       register int len;
+       int len;
        static int linepos;
 
        len = strlen(adr);
-       if (pos == indent)
+       if (pos == indent) {
                linepos = pos;
-       else if (linepos+len > OUTPUTLINELEN) {
+       } else if (linepos+len > OUTPUTLINELEN) {
                fprintf(out, ",\n%*s", indent, "");
                linepos = indent;
                pos += indent + 2;