From 3c2b96ae3364a3bc206679f49a858f8fee505ba4 Mon Sep 17 00:00:00 2001 From: "Eric S. Raymond" Date: Fri, 25 Oct 1996 06:22:14 +0000 Subject: Another pass at making multidrop work OK. svn path=/trunk/; revision=376 --- INSTALL | 3 +++ driver.c | 46 ++++++++++++++++++++++++---------------------- fetchmail.man | 10 +++++++--- 3 files changed, 34 insertions(+), 25 deletions(-) diff --git a/INSTALL b/INSTALL index e6beffb6..4c191f1a 100644 --- a/INSTALL +++ b/INSTALL @@ -74,6 +74,9 @@ distributed with Pine from the University of Washington. Other POP3 servers have been known to give it indigestion. Test carefully! If you have problems, switch to imap. +If you're going to use multi-drop mailboxes, test with particular care. +This code was very difficult to test and should be considered experimental. + 6. USE IT Enjoy! diff --git a/driver.c b/driver.c index 462b31e4..5b4fc702 100644 --- a/driver.c +++ b/driver.c @@ -349,32 +349,34 @@ struct idlist **xmit_names; /* list of recipient names parsed out */ return; else { - char *cp = nxtaddr(hdr), *lname; + char *cp, *lname; - do { - char *atsign = strchr(cp, '@'); + if ((cp = nxtaddr(hdr)) != (char *)NULL) + do { + char *atsign = strchr(cp, '@'); - if (atsign) - if (queryctl->norewrite) - continue; - else - { - if (!is_host_alias(atsign+1, - queryctl->servername, - queryctl->canonical_name)) + if (atsign) + if (queryctl->norewrite) continue; - atsign[0] = '\0'; + else + { + if (!is_host_alias(atsign+1, + queryctl->servername, + queryctl->canonical_name)) + continue; + atsign[0] = '\0'; + } + lname = idpair_find(&queryctl->localnames, cp); + if (lname != (char *)NULL) + { + if (outlevel == O_VERBOSE) + fprintf(stderr, + "fetchmail: mapped %s to local %s\n", + cp, lname); + save_uid(xmit_names, -1, lname); } - if ((lname = idpair_find(&queryctl->localnames, cp))!=(char *)NULL) - { - if (outlevel == O_VERBOSE) - fprintf(stderr, - "fetchmail: mapped %s to local %s\n", - cp, lname); - save_uid(xmit_names, -1, lname); - } - } while - ((cp = nxtaddr((char *)NULL)) != (char *)NULL); + } while + ((cp = nxtaddr((char *)NULL)) != (char *)NULL); } } #endif /* HAVE_GETHOSTBYNAME */ diff --git a/fetchmail.man b/fetchmail.man index 5cab1cf5..0cfb5af0 100644 --- a/fetchmail.man +++ b/fetchmail.man @@ -683,14 +683,18 @@ to the mailserver. This creates a risk that name/password pairs might be snaffled with a packet sniffer or more sophisticated monitoring software. .PP -Retrieval and forwarding from multi-drop server mailboxes is only as -reliable as your mail server host's DNS service. Each host +Retrieval and forwarding from multi-drop server mailboxes is at most +as reliable as your mail server host's DNS service. Each host address part in each message of a multi-drop mailbox is checked with .BR gethostbyname (2) to see if it's an alias of the mail server. If it is, but the lookup fails due to network congestion or a crashed server, forwarding -will not get done correctly. +will not get done correctly. Note: this check will \fInot\fR catch +equivalences created by MX records! +.PP +The multi-drop mailbox code was hard to test thoroughly and may have obscure +failure modes, especially in the presence of DNS flakiness. .PP Under Linux, if fetchmail is run in daemon mode with the network inaccessible, each poll leaves a socket allocated but in CLOSE state -- cgit v1.2.3