aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile.in2
-rw-r--r--NEWS33
-rw-r--r--configure.in3
-rw-r--r--driver.c3
-rw-r--r--options.c6
-rw-r--r--report.c26
-rw-r--r--rfc822.c7
7 files changed, 55 insertions, 25 deletions
diff --git a/Makefile.in b/Makefile.in
index 018b701d..c17b4415 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -179,7 +179,7 @@ stamp-config: config.status $(srcdir)/config.h.in
configure: configure.in
autoconf $(ACFLAGS)
-config.h.in: acconfig.h
+config.h.in: acconfig.h configure.in
autoheader $(ACFLAGS)
# This tells versions [3.59,3.63) of GNU make not to export all variables.
diff --git a/NEWS b/NEWS
index f2477276..60798334 100644
--- a/NEWS
+++ b/NEWS
@@ -1,32 +1,29 @@
To Do:
-1. George Sipe reports that --monitor is broken.
+George Sipe reports that --monitor is broken.
This needs to be fixed. --interface seems to work OK, so the error is
evidently something pretty specific to the --monitor code.
-2. Rethink the handling of DNS errors in multidrop mode.
+ Release Notes:
-The present behavior is to suppress forwarding and deletion of the
-individual message that each occurs in, leaving it queued on the server
-for retrieval on a subsequent poll. The assumption is that DNS
-errors are transient, due to temporary server outages.
+------------------------------------------------------------------------------
+fetchmail-3.8 ()
-Unfortunately this means that if a DNS error is permanent a message
-can be perpetually stuck in the server mailbox. We've had a couple
-bug reports of this kind due to subtle RFC822 parsing errors in the fetchmail
-code that resulted in impossible things getting passed to the DNS lookup
-routines.
+features --
-Alternative ways to handle the problem: ignore DNS errors (treating
-them as a non-match on the mailserver domain), or forward messages
-with errors to fetchmail's invoking user in addition to any other
-recipients. These would fit an assummption that DNS lookup errors are
-likely to be permanent problems associated with an address.
+* More FAQ material on using `localdomains'.
-I'm not sure which is long-term appropriate.
+* compilation hacks for ISC 4.0 (thanks, Larry Jones!)
- Release Notes:
+bugs --
+
+* enabled ETRN and RPOP command-line option
+
+* yet another attempt to fix the error.c compilation problems under
+ Solaris and NEXTSTEP.
+
+* handle \( and \) correctly in RFC822 comments.
------------------------------------------------------------------------------
fetchmail-3.7 (Fri Feb 21 17:38:40 EST 1997)
diff --git a/configure.in b/configure.in
index 72c225ee..42dcab26 100644
--- a/configure.in
+++ b/configure.in
@@ -23,7 +23,7 @@ AC_HEADER_STDC
AC_TYPE_SIZE_T
AC_TYPE_PID_T
AC_TYPE_SIGNAL
-AC_CHECK_HEADERS(unistd.h termios.h termio.h sgtty.h stdarg.h alloca.h)
+AC_CHECK_HEADERS(unistd.h termios.h termio.h sgtty.h stdarg.h alloca.h sys/itimer.h)
AC_C_CONST dnl getopt needs this.
@@ -32,6 +32,7 @@ AC_PROG_YACC
AC_SUBST(LIBOBJS)
AC_CHECK_LIB(socket,socket)
+AC_CHECK_LIB(inet,socket)
AC_CHECK_LIB(nsl,inet_addr)
diff --git a/driver.c b/driver.c
index 3628e266..73c43902 100644
--- a/driver.c
+++ b/driver.c
@@ -26,6 +26,9 @@
#if defined(HAVE_ALLOCA_H)
#include <alloca.h>
#endif
+#if defined(HAVE_SYS_ITIMER_H)
+#include <sys/itimer.h>
+#endif
#include <sys/time.h>
#include <signal.h>
diff --git a/options.c b/options.c
index 7081ee84..52a08ef3 100644
--- a/options.c
+++ b/options.c
@@ -178,12 +178,16 @@ struct query *ctl; /* option record to be initialized */
ctl->server.protocol = P_IMAP;
else if (strcasecmp(optarg,"apop") == 0)
ctl->server.protocol = P_APOP;
+ else if (strcasecmp(optarg,"rpop") == 0)
+ ctl->server.protocol = P_RPOP;
else if (strcasecmp(optarg,"kpop") == 0)
{
ctl->server.protocol = P_POP3;
ctl->server.port = KPOP_PORT;
ctl->server.authenticate = A_KERBEROS;
}
+ else if (strcasecmp(optarg,"etrn") == 0)
+ ctl->server.protocol = P_ETRN;
else {
fprintf(stderr,"Invalid protocol `%s' specified.\n", optarg);
errflag++;
@@ -325,7 +329,7 @@ struct query *ctl; /* option record to be initialized */
fputs(" -M, --monitor monitor interface for activity\n",stderr);
#endif
- fputs(" -p, --protocol specify pop2, pop3, imap, apop, rpop, kpop\n", stderr);
+ fputs(" -p, --protocol specify pop2, pop3, imap, apop, rpop, kpop, etrn\n", stderr);
fputs(" -P, --port TCP/IP service port to connect to\n",stderr);
fputs(" -A, --auth authentication type (password or kerberos)\n",stderr);
fputs(" -t, --timeout server nonresponse timeout\n",stderr);
diff --git a/report.c b/report.c
index 174abeb9..86950dfd 100644
--- a/report.c
+++ b/report.c
@@ -279,8 +279,9 @@ error_build (message, va_alist)
partial_message = xrealloc (partial_message, partial_message_size);
}
-#if defined(VA_START) && (HAVE_VSNPRINTF || _LIBC)
+#if defined(VA_START)
VA_START (args, message);
+#if HAVE_VSNPRINTF || _LIBC
for ( ; ; )
{
n = vsnprintf (partial_message + partial_message_size_used,
@@ -296,6 +297,16 @@ error_build (message, va_alist)
partial_message_size += 512;
partial_message = xrealloc (partial_message, partial_message_size);
}
+#else
+ partial_message_size_used += vsprintf (partial_message + partial_message_size_used, message, args);
+
+ /* Attempt to catch memory overwrites... */
+ if (partial_message_size_used >= partial_message_size)
+ {
+ partial_message_size_used = 0;
+ error (PS_UNDEFINED, 0, "partial error message buffer overflow");
+ }
+#endif
va_end (args);
#else
#if HAVE_SNPRINTF
@@ -369,8 +380,9 @@ error_complete (status, errnum, message, va_alist)
partial_message = xrealloc (partial_message, partial_message_size);
}
-#if defined(VA_START) && (HAVE_VSNPRINTF || _LIBC)
+#if defined(VA_START)
VA_START (args, message);
+#if HAVE_VSNPRINTF || _LIBC
for ( ; ; )
{
n = vsnprintf (partial_message + partial_message_size_used,
@@ -386,6 +398,16 @@ error_complete (status, errnum, message, va_alist)
partial_message_size += 512;
partial_message = xrealloc (partial_message, partial_message_size);
}
+#else
+ partial_message_size_used += vsprintf (partial_message + partial_message_size_used, message, args);
+
+ /* Attempt to catch memory overwrites... */
+ if (partial_message_size_used >= partial_message_size)
+ {
+ partial_message_size_used = 0;
+ error (PS_UNDEFINED, 0, "partial error message buffer overflow");
+ }
+#endif
va_end (args);
#else
#if HAVE_SNPRINTF
diff --git a/rfc822.c b/rfc822.c
index 0d9f448b..f7a74212 100644
--- a/rfc822.c
+++ b/rfc822.c
@@ -162,8 +162,11 @@ const char *hdr; /* header to be parsed, NUL to continue previous hdr */
}
else if (*hp == '\\') /* handle RFC822 escaping */
{
- *tp++ = *hp++; /* take the escape */
- *tp++ = *hp; /* take following char */
+ if (state != INSIDE_PARENS)
+ {
+ *tp++ = *hp++; /* take the escape */
+ *tp++ = *hp; /* take following char */
+ }
}
else switch (state)
{