aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--NEWS3
-rw-r--r--fetchmail.c51
-rw-r--r--fetchmail.h1
3 files changed, 31 insertions, 24 deletions
diff --git a/NEWS b/NEWS
index 11d55d3b..be19e8c0 100644
--- a/NEWS
+++ b/NEWS
@@ -21,6 +21,9 @@
Release Notes:
------------------------------------------------------------------------------
+fetchmail-4.0.8 ()
+* Fixed core dump bug in UID handling introduced by the 4.0.6 change.
+
fetchmail-4.0.7 (Tue Aug 5 22:47:11 EDT 1997)
* Fixed a minor bug in handling of DNS errors in multidrop mode.
* Added a `postconnect' analogous to `preconnect'.
diff --git a/fetchmail.c b/fetchmail.c
index dacf254b..bf866a97 100644
--- a/fetchmail.c
+++ b/fetchmail.c
@@ -369,29 +369,6 @@ int main (int argc, char **argv)
continue;
#endif /* linux */
- /*
- *
- * Compute the true name of the mailserver host.
- * There are two clashing cases here:
- *
- * (1) The poll name is a label, possibly on one of several
- * poll configurations for the same host. In this case
- * the `via' option will be present and give the true name.
- *
- * (2) The poll name is the true one, the via name is
- * localhost. This is going to be typical for ssh-using
- * configurations.
- *
- * We're going to assume the via name is true unless it's
- * localhost.
- *
- * Then, if we've got DNS, we'll try to canonicalize the name.
- */
- if (ctl->server.via && strcmp(ctl->server.via, "localhost"))
- ctl->server.truename = xstrdup(ctl->server.via);
- else
- ctl->server.truename = xstrdup(ctl->server.pollname);
-
#ifdef HAVE_GETHOSTBYNAME
/*
* This functions partly as a probe to make sure our
@@ -404,7 +381,7 @@ int main (int argc, char **argv)
/* compute the canonical name of the host */
errno = 0;
- namerec = gethostbyname(ctl->server.truename);
+ namerec = gethostbyname(ctl->server.queryname);
if (namerec == (struct hostent *)NULL)
{
error(0, errno,
@@ -644,6 +621,32 @@ static int load_params(int argc, char **argv, int optind)
DEFAULT(ctl->server.uidl, FALSE);
#undef DEFAULT
+ /*
+ *
+ * Compute the true name of the mailserver host.
+ * There are two clashing cases here:
+ *
+ * (1) The poll name is a label, possibly on one of several
+ * poll configurations for the same host. In this case
+ * the `via' option will be present and give the true name.
+ *
+ * (2) The poll name is the true one, the via name is
+ * localhost. This is going to be typical for ssh-using
+ * configurations.
+ *
+ * We're going to assume the via name is true unless it's
+ * localhost.
+ *
+ * Each poll cycle, if we've got DNS, we'll try to canonicalize
+ * the name. This will function as a probe to ensure the
+ * host's nameserver is up.
+ */
+ if (ctl->server.via && strcmp(ctl->server.via, "localhost"))
+ ctl->server.queryname = xstrdup(ctl->server.via);
+ else
+ ctl->server.queryname = xstrdup(ctl->server.pollname);
+ ctl->server.truename = xstrdup(ctl->server.queryname);
+
/* plug in the semi-standard way of indicating a mail address */
if (ctl->server.envelope == (char *)NULL)
ctl->server.envelope = "X-Envelope-To:";
diff --git a/fetchmail.h b/fetchmail.h
index 30bad06a..f5632c2d 100644
--- a/fetchmail.h
+++ b/fetchmail.h
@@ -101,6 +101,7 @@ struct hostdata /* shared among all user connections to given server */
/* computed for internal use */
int poll_count; /* count of polls so far */
+ char *queryname; /* name to attempt DNS lookup on */
char *truename; /* "true name" of server host */
struct hostdata *lead_server; /* ptr to lead query for this server */
int esmtp_options;