The MD5 support is copyright by RSA Data Security, Inc. See the header
comment of the md5.c module for license terms.
- NO-VIRUS CLAUSE
+ NO-INFECTION CLAUSE
The intent of this license is to protect free redistribution and reuse of the
source of the licensed distribution, not to prejudice the authorship
# So just uncomment all the lines marked QNX.
PACKAGE = fetchmail
-VERSION = 5.4.3
+VERSION = 5.4.4
SUBDIRS = @INTLSUB@ @POSUB@
CFLAGS = @CFLAGS@
# CFLAGS = -g2 -5 # QNX
LDFLAGS = @LDFLAGS@
-# LDFLAGS = -g2 -5 # QNX
+# LDFLAGS = -g2 -5 -N64k # QNX
LEX = @LEX@
LEXFLAGS=
YACC = @YACC@
(The `lines' figures total .c, .h, .l, and .y files under version control.)
-fetchmail-5.4.2 (Sun Jul 2 14:24:28 EDT 2000), 19080 lines:
+* Guenther H. Leber's fix to show expunge parameters for POP3 in fetchmail -V.
+* Richard Gooch's fixes to use sigation(2) in sink.c and daemon.c
+
+fetchmail-5.4.3 (Sun Jul 2 14:24:28 EDT 2000), 19080 lines:
* Fixed Debian bug #63667, fetchmailconf: doesn't write .fetchmailrc properly.
* RFC2177 IDLE should now be done even when there are no messages.
AC_CHECK_FUNCS(tcsetattr stty setsid geteuid seteuid gethostbyname \
res_search herror strrchr strerror setlinebuf syslog \
snprintf vprintf vsnprintf vsyslog \
- atexit inet_aton strftime setrlimit socketpair sigprocmask)
+ atexit inet_aton strftime setrlimit socketpair sigprocmask sigaction)
# Under Red Hat 4.0 (and many other Linuxes) -lresolv is seriously flaky
# and breaks gethostbyname(2). It's better to use the bind stuff in the C
int fd;
pid_t childpid;
RETSIGTYPE sigchld_handler(int);
+#ifdef HAVE_SIGACTION
+ struct sigaction sa_new;
+#endif /* HAVE_SIGACTION */
/* if we are started by init (process 1) via /etc/inittab we needn't
bother to detach from our process group context */
goto nottyDetach;
/* Ignore BSD terminal stop signals */
+#ifdef HAVE_SIGACTION
+ memset (&sa_new, 0, sizeof sa_new);
+ sigemptyset (&sa_new.sa_mask);
+ sa_new.sa_handler = SIG_IGN;
+#endif /* HAVE_SIGACTION */
#ifdef SIGTTOU
+#ifndef HAVE_SIGACTION
signal(SIGTTOU, SIG_IGN);
+#else
+ sigaction (SIGTTOU, &sa_new, NULL);
+#endif /* HAVE_SIGACTION */
#endif
#ifdef SIGTTIN
+#ifndef HAVE_SIGACTION
signal(SIGTTIN, SIG_IGN);
+#else
+ sigaction (SIGTTIN, &sa_new, NULL);
+#endif /* HAVE_SIGACTION */
#endif
#ifdef SIGTSTP
+#ifndef HAVE_SIGACTION
signal(SIGTSTP, SIG_IGN);
+#else
+ sigaction (SIGTSTP, &sa_new, NULL);
+#endif /* HAVE_SIGACTION */
#endif
/* In case we were not started in the background, fork and let
#endif
/* lose controlling tty */
+#ifndef HAVE_SIGACTION
signal(SIGHUP, SIG_IGN);
+#else
+ sigaction (SIGHUP, &sa_new, NULL);
+#endif /* HAVE_SIGACTION */
if ((childpid = fork()) < 0) {
report(stderr, "fork (%)\n", strerror(errno));
return(PS_IOERR);
#endif
/* set up to catch child process termination signals */
+#ifndef HAVE_SIGACTION
signal(SIGCHLD, sigchld_handler);
+#else
+ sa_new.sa_handler = sigchld_handler;
+ sigaction (SIGCHLD, &sa_new, NULL);
+#endif /* HAVE_SIGACTION */
#if defined(SIGPWR)
+#ifndef HAVE_SIGACTION
signal(SIGPWR, sigchld_handler);
+#else
+ sigaction (SIGPWR, &sa_new, NULL);
+#endif /* HAVE_SIGACTION */
#endif
return(0);
printf(_(" SMTP message batch limit is %d.\n"), ctl->batchlimit);
else if (outlevel >= O_VERBOSE)
printf(_(" No SMTP message batch limit (--batchlimit 0).\n"));
- if (ctl->server.protocol == P_IMAP)
+ if (ctl->server.protocol != P_ETRN)
{
if (NUM_NONZERO(ctl->expunge))
printf(_(" Deletion interval between expunges forced to %d (--expunge %d).\n"), ctl->expunge, ctl->expunge);
self.fetchlimit, '30').pack(side=TOP, fill=X)
LabeledEntry(limwin, 'Max messages to forward per poll:',
self.batchlimit, '30').pack(side=TOP, fill=X)
- if self.parent.server.protocol in ('IMAP', 'IMAP-K4', 'IMAP-GSS'):
- LabeledEntry(limwin, 'Interval between expunges (IMAP):',
+ if self.parent.server.protocol != 'ETRN':
+ LabeledEntry(limwin, 'Interval between expunges:',
self.expunge, '30').pack(side=TOP, fill=X)
Checkbutton(limwin, text="Idle after each poll (IMAP only)",
variable=self.idle).pack(side=TOP, anchor=W)
/* these are shared by open_sink and stuffline */
static FILE *sinkfp;
+#ifndef HAVE_SIGACTION
static RETSIGTYPE (*sigchld)(int);
+#else
+static struct sigaction sa_old;
+#endif /* HAVE_SIGACTION */
int stuffline(struct query *ctl, char *buf)
/* ship a line to the given control block's output sink (SMTP server or MDA) */
/* set up sinkfp to be an input sink we can ship a message to */
{
struct idlist *idp;
+#ifdef HAVE_SIGACTION
+ struct sigaction sa_new;
+#endif /* HAVE_SIGACTION */
*bad_addresses = *good_addresses = 0;
return(PS_IOERR);
}
+#ifndef HAVE_SIGACTION
sigchld = signal(SIGCHLD, SIG_DFL);
+#else
+ memset (&sa_new, 0, sizeof sa_new);
+ sigemptyset (&sa_new.sa_mask);
+ sa_new.sa_handler = SIG_DFL;
+ sigaction (SIGCHLD, &sa_new, &sa_old);
+#endif /* HAVE_SIGACTION */
}
else /* forward to an SMTP or LMTP listener */
{
pclose(sinkfp);
sinkfp = (FILE *)NULL;
}
+#ifndef HAVE_SIGACTION
signal(SIGCHLD, sigchld);
+#else
+ sigaction (SIGCHLD, &sa_old, NULL);
+#endif /* HAVE_SIGACTION */
}
}
}
else
rc = 0;
+#ifndef HAVE_SIGACTION
signal(SIGCHLD, sigchld);
+#else
+ sigaction (SIGCHLD, &sa_old, NULL);
+#endif /* HAVE_SIGACTION */
if (rc)
{
report(stderr,