From: markus schnalke Date: Sat, 29 Aug 2015 08:47:56 +0000 (+0200) Subject: Merge remote-tracking branch 'origin/master' X-Git-Tag: mmh-0.2-RC1~32 X-Git-Url: http://git.marmaro.de/?p=mmh;a=commitdiff_plain;h=a2ca51e05aaad418d652ce36f232a9076b3b2d08;hp=-c Merge remote-tracking branch 'origin/master' --- a2ca51e05aaad418d652ce36f232a9076b3b2d08 diff --combined uip/spost.c index b5fac12,ee70385..4d0b48a --- a/uip/spost.c +++ b/uip/spost.c @@@ -115,6 -115,7 +115,7 @@@ static char *tmpfil static char *subject = NULL; /* the subject field for BCC'ing */ static char fccs[BUFSIZ] = ""; struct mailname *bccs = NULL; /* list of the bcc recipients */ + struct mailname *sender = NULL; static struct headers *hdrtab; /* table for the message we're doing */ static FILE *out; /* output (temp) file */ @@@ -183,20 -184,17 +184,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++; @@@ -225,13 -223,9 +226,9 @@@ for (compnum = 1, state = FLD;;) { switch (state = m_getfld(state, name, buf, sizeof(buf), in)) { case FLD: - compnum++; - putfmt(name, buf, out); - continue; - case FLDPLUS: compnum++; - cp = add(buf, cp); + cp = getcpy(buf); while (state == FLDPLUS) { state = m_getfld(state, name, buf, sizeof(buf), in); @@@ -328,17 -322,12 +325,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 */ @@@ -421,17 -410,40 +418,39 @@@ */ if (hdr->set & MFRM) { - struct mailname *mp = NULL; + struct mailname *my = NULL; + unsigned int fromcnt = 0; - /* This is need because the addresse parser hold global state */ + /* needed because the address parser holds global state */ ismymbox(NULL); while ((cp = getname(str)) != NULL) { + fromcnt++; mp = getm(cp, NULL, 0, AD_NAME, NULL); if (ismymbox(mp)) { msgflags |= MFMM; + if (my == NULL) { + my = mp; + } else { + mnfree(mp); + mp = NULL; + } + } else { + mnfree(mp); + mp = NULL; } } + + if (fromcnt > 1) { + sender = my; + } else { + mnfree(my); + } + + free(cp); + cp = NULL; + } if (hdr->flags & HSUB) { @@@ -456,7 -468,9 +475,9 @@@ finish_headers(FILE *out fprintf(out, "%sDate: %s\n", resentstr, dtimenow()); } - if ((cp = context_find("Default-From")) != NULL) { + if (sender != NULL) { + snprintf(signature, sizeof(signature), "%s", sender->m_text); + } else if ((cp = context_find("Default-From")) != NULL) { snprintf(signature, sizeof(signature), "%s", cp); } else { snprintf(from, sizeof(from), "%s@%s", getusername(), LocalName()); @@@ -473,7 -487,7 +494,7 @@@ ** Add a Sender: header because the From: header could ** be fake or contain multiple addresses. */ - if (!(msgflags & MFMM)) { + if (!(msgflags & MFMM) || sender != NULL) { fprintf(out, "%sSender: %s\n", resentstr, signature); } } @@@ -500,6 -514,7 +521,6 @@@ get_header(char *header, struct header return (h - table); } } - return NOTOK; } @@@ -530,7 -545,7 +551,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 */ @@@ -552,7 -567,7 +573,7 @@@ } } } 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; @@@ -565,13 -580,13 +586,13 @@@ 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;