aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Andree <matthias.andree@gmx.de>2007-02-21 21:29:57 +0000
committerMatthias Andree <matthias.andree@gmx.de>2007-02-21 21:29:57 +0000
commit679047bd6a8d9387e1dbb724a1e4763aa7d3bbfc (patch)
treec244d6db8c2ce1dafbff66f21ee79abf3f1dda51
parentb865d5638b4aeb3f7f929fd775571e79efb9636c (diff)
downloadfetchmail-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--NEWS4
-rw-r--r--sink.c34
2 files changed, 34 insertions, 4 deletions
diff --git a/NEWS b/NEWS
index 23278519..66a7f416 100644
--- a/NEWS
+++ b/NEWS
@@ -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
diff --git a/sink.c b/sink.c
index 92477ef9..afd1439e 100644
--- a/sink.c
+++ b/sink.c
@@ -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)