X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fspost.c;fp=uip%2Fspost.c;h=4d0b48a04c8955b34f14db5d966b4c261c783acf;hp=b5fac1273907fa208aaaddd011a0cc7d1eae8cc3;hb=a2ca51e05aaad418d652ce36f232a9076b3b2d08;hpb=5ba9c2f13fedf1d8d6ed907ef1f505616290efaa diff --git a/uip/spost.c b/uip/spost.c index b5fac12..4d0b48a 100644 --- a/uip/spost.c +++ b/uip/spost.c @@ -115,6 +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 */ @@ -225,13 +226,9 @@ main(int argc, char **argv) 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); @@ -422,16 +419,38 @@ putfmt(char *name, char *str, FILE *out) if (hdr->set & MFRM) { struct mailname *mp = NULL; + struct mailname *my = NULL; + unsigned int fromcnt = 0; /* 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 +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 +494,7 @@ finish_headers(FILE *out) ** 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); } }