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.
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)
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.
AC_SUBST(LIBOBJS)
AC_CHECK_LIB(socket,socket)
+AC_CHECK_LIB(inet,socket)
AC_CHECK_LIB(nsl,inet_addr)
#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>
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++;
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);
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,
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
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,
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
}
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)
{