diff options
author | Matthias Andree <matthias.andree@gmx.de> | 2007-02-21 21:29:57 +0000 |
---|---|---|
committer | Matthias Andree <matthias.andree@gmx.de> | 2007-02-21 21:29:57 +0000 |
commit | 679047bd6a8d9387e1dbb724a1e4763aa7d3bbfc (patch) | |
tree | c244d6db8c2ce1dafbff66f21ee79abf3f1dda51 | |
parent | b865d5638b4aeb3f7f929fd775571e79efb9636c (diff) | |
download | fetchmail-679047bd6a8d9387e1dbb724a1e4763aa7d3bbfc.tar.gz fetchmail-679047bd6a8d9387e1dbb724a1e4763aa7d3bbfc.tar.bz2 fetchmail-679047bd6a8d9387e1dbb724a1e4763aa7d3bbfc.zip |
Try --smtp list when bouncing. Reported by Christian Kurz, Debian Bug #150137.
svn path=/branches/BRANCH_6-3/; revision=5041
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | sink.c | 34 |
2 files changed, 34 insertions, 4 deletions
@@ -44,8 +44,10 @@ be removed from a 6.4.0 or newer release.) fetchmail 6.3.8 (not yet released): -# BUG FIXES: +# BUG FIXES (LONG-STANDING BUGS): * Fix pluralization of oversized-message warning mails. +* Fetchmail now iterates over the --smtp[host] list when bouncing and not in + --lmtp mode. Reported by Christian Kurz, Debian Bug #150137. # KNOWN BUGS AND WORKAROUNDS: (this section floats upwards through the NEWS file so it stays with the @@ -258,6 +258,7 @@ static int send_bouncemail(struct query *ctl, struct msgblk *msg, char daemon_name[15 + HOSTLEN] = "MAILER-DAEMON@"; char boundary[BUFSIZ], *bounce_to; int sock; + struct idlist *ish; static char *fqdn_of_host = NULL; const char *md1 = "MAILER-DAEMON", *md2 = "MAILER-DAEMON@"; @@ -276,10 +277,37 @@ static int send_bouncemail(struct query *ctl, struct msgblk *msg, lose the NDN here */ strlcat(daemon_name, fqdn_of_host, sizeof(daemon_name)); + /* XXX FIXME: we blindly assume that any host on our smtphunt list + * and offers SMTP will accept our bounce; however, in global lmtp + * mode we'll just try localhost instead. */ /* we need only SMTP for this purpose */ - /* XXX FIXME: hardcoding localhost is nonsense if smtphost can be - * configured */ - if ((sock = SockOpen("localhost", SMTP_PORT, NULL, &ai1)) == -1) + sock = -1; + if (ctl->smtphunt && ctl->listener == SMTP_MODE) { + for (ish = ctl->smtphunt ; ish; ish = ish->next) { + char *x = xstrdup(ish->id), *y, *port; + + /* skip over LMTP entries */ + if (x[0] == '/') { + free(x); + continue; + } + + if ((y = strrchr(x, '/'))) { + *y = '\0'; + port = y + 1; + } else { + port = SMTP_PORT; + } + sock = SockOpen(x, port, NULL, &ai1); + free(x); + if (sock != -1) + break; + } + } else { + sock = SockOpen("localhost", SMTP_PORT, NULL, &ai1); + } + + if (sock == -1) return(FALSE); if (SMTP_ok(sock, SMTP_MODE) != SM_OK) |