diff options
-rw-r--r-- | Makefile.in | 2 | ||||
-rw-r--r-- | NEWS | 33 | ||||
-rw-r--r-- | configure.in | 3 | ||||
-rw-r--r-- | driver.c | 3 | ||||
-rw-r--r-- | options.c | 6 | ||||
-rw-r--r-- | report.c | 26 | ||||
-rw-r--r-- | rfc822.c | 7 |
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. @@ -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) @@ -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> @@ -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); @@ -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 @@ -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) { |