This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "The nmh Mail Handling System".
The branch, master has been updated via 5dded84775cbfdef4e84f7c61c340ba15c0dcdaf (commit) via 77a8a873bf6678bc2c36a5839da714c5620683b6 (commit) via 7e5bac1a416e400bd3c8941b1c312577f2d9e9e4 (commit) from 7d83ecc430f4b3bf3830e16efe5d13cc0a00345d (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- http://git.savannah.gnu.org/cgit/nmh.git/commit/?id=5dded84775cbfdef4e84f7c61c340ba15c0dcdaf commit 5dded84775cbfdef4e84f7c61c340ba15c0dcdaf Author: Ken Hornstein <k...@pobox.com> Date: Fri Jan 27 13:47:14 2012 -0500 Fix long-standing problem with getans(); handle the case if we get an interrupted by a signal during a character read and return an EINTR. diff --git a/sbr/getans.c b/sbr/getans.c index 682a3b1..9c10fd3 100644 --- a/sbr/getans.c +++ b/sbr/getans.c @@ -11,6 +11,7 @@ #include <h/signals.h> #include <h/m_setjmp.h> #include <signal.h> +#include <errno.h> static char ansbuf[BUFSIZ]; static sigjmp_buf sigenv; @@ -32,7 +33,6 @@ getans (char *prompt, struct swit *ansp) istat = SIGNAL (SIGINT, intrser); } else { SIGNAL (SIGINT, istat); - printf("returning NULL\n"); return NULL; } @@ -42,8 +42,34 @@ getans (char *prompt, struct swit *ansp) cp = ansbuf; while ((i = getchar ()) != '\n') { if (i == EOF) { - printf("Got EOF\n"); - siglongjmp (sigenv, 1); + /* + * If we get an EOF, return + */ + if (feof(stdin)) + siglongjmp (sigenv, 1); + + /* + * For errors, if we get an EINTR that means that we got + * a signal and we should retry. If we get another error, + * then just return. + */ + + else if (ferror(stdin)) { + if (errno == EINTR) { + clearerr(stdin); + continue; + } + fprintf(stderr, "\nError %s during read\n", + strerror(errno)); + siglongjmp (sigenv, 1); + } else { + /* + * Just for completeness's sake ... + */ + + fprintf(stderr, "\nUnknown problem in getchar()\n"); + siglongjmp (sigenv, 1); + } } if (cp < &ansbuf[sizeof ansbuf - 1]) *cp++ = i; http://git.savannah.gnu.org/cgit/nmh.git/commit/?id=77a8a873bf6678bc2c36a5839da714c5620683b6 commit 77a8a873bf6678bc2c36a5839da714c5620683b6 Author: Ken Hornstein <k...@pobox.com> Date: Fri Jan 27 13:34:17 2012 -0500 Convert to the use of siglongjmp() diff --git a/sbr/getans.c b/sbr/getans.c index 95e34c4..682a3b1 100644 --- a/sbr/getans.c +++ b/sbr/getans.c @@ -13,7 +13,7 @@ #include <signal.h> static char ansbuf[BUFSIZ]; -static jmp_buf sigenv; +static sigjmp_buf sigenv; /* * static prototypes @@ -28,10 +28,11 @@ getans (char *prompt, struct swit *ansp) SIGNAL_HANDLER istat = NULL; char *cp, **cpp; - if (!(m_setjmp (sigenv))) { + if (!(sigsetjmp(sigenv, 1))) { istat = SIGNAL (SIGINT, intrser); } else { SIGNAL (SIGINT, istat); + printf("returning NULL\n"); return NULL; } @@ -40,8 +41,10 @@ getans (char *prompt, struct swit *ansp) fflush (stdout); cp = ansbuf; while ((i = getchar ()) != '\n') { - if (i == EOF) - longjmp (sigenv, 1); + if (i == EOF) { + printf("Got EOF\n"); + siglongjmp (sigenv, 1); + } if (cp < &ansbuf[sizeof ansbuf - 1]) *cp++ = i; } @@ -75,5 +78,5 @@ intrser (int i) /* * should this be siglongjmp? */ - longjmp (sigenv, 1); + siglongjmp (sigenv, 1); } http://git.savannah.gnu.org/cgit/nmh.git/commit/?id=7e5bac1a416e400bd3c8941b1c312577f2d9e9e4 commit 7e5bac1a416e400bd3c8941b1c312577f2d9e9e4 Author: Ken Hornstein <k...@pobox.com> Date: Fri Jan 27 12:30:52 2012 -0500 Make POP support always be turned on. diff --git a/Makefile.am b/Makefile.am index 65fd867..9d10a03 100644 --- a/Makefile.am +++ b/Makefile.am @@ -188,10 +188,8 @@ uip_forw_SOURCES = uip/forw.c uip/whatnowproc.c uip/whatnowsbr.c uip/sendsbr.c \ uip/annosbr.c uip/distsbr.c uip_forw_LDADD = $(LDADD) $(ICONVLIB) -uip_inc_SOURCES = uip/inc.c uip/scansbr.c uip/dropsbr.c uip/termsbr.c -if POP_SUPPORT -uip_inc_SOURCES += uip/popsbr.c -endif +uip_inc_SOURCES = uip/inc.c uip/scansbr.c uip/dropsbr.c uip/termsbr.c \ + uip/popsbr.c uip_inc_LDADD = $(LDADD) $(TERMLIB) $(ICONVLIB) $(SASLLIB) uip_install_mh_SOURCES = uip/install-mh.c @@ -229,10 +227,7 @@ uip_mhstore_SOURCES = uip/mhstore.c uip/mhparse.c uip/mhcachesbr.c \ uip/mhmisc.c uip/mhfree.c uip/termsbr.c uip/md5.c uip_mhstore_LDADD = $(LDADD) $(TERMLIB) -uip_msgchk_SOURCES = uip/msgchk.c -if POP_SUPPORT -uip_msgchk_SOURCES += uip/popsbr.c -endif +uip_msgchk_SOURCES = uip/msgchk.c uip/popsbr.c uip_msgchk_LDADD = $(LDADD) $(SASLLIB) uip_msh_SOURCES = uip/msh.c uip/mshcmds.c uip/vmhsbr.c uip/picksbr.c \ @@ -457,11 +452,6 @@ man/man.sed: Makefile echo 's,%manext1%,$(manext1),g' >> $@ echo 's,%manext5%,$(manext5),g' >> $@ echo 's,%manext8%,$(manext8),g' >> $@ -if POP_SUPPORT - echo '/^%nmhbeginpop%/d;/^%nmhendpop%/d' >> $@ -else - echo '/^%nmhbeginpop%/,/^%nmhendpop%/d' >> $@ -endif echo '/%components%/r $(top_srcdir)/etc/components' >> $@ echo ' s,%components%,,g' >> $@ echo '/%distcomps%/r $(top_srcdir)/etc/distcomps' >> $@ diff --git a/configure.ac b/configure.ac index 37d7c23..6a75a38 100644 --- a/configure.ac +++ b/configure.ac @@ -43,14 +43,6 @@ AC_ARG_ENABLE(masquerade, fi], [masquerade="draft_from mmailid username_extension"]) AC_SUBST(masquerade)dnl -dnl Do you want client-side support for pop? -AC_ARG_ENABLE([pop], - AS_HELP_STRING([--enable-pop], [enable client-side support for plain POP3])) -dnl The old redundant --enable-nmh-pop is deprecated and undocumented. -if test x"$enable_nmh_pop" = x"yes"; then - enable_pop=yes -fi - dnl Do you want to disable use of locale functions AH_TEMPLATE([LOCALE], [Undefine if you don't want locale features. By default this is defined.]) @@ -106,13 +98,6 @@ fi AC_DEFINE_UNQUOTED([BACKUP_PREFIX], "$backup_prefix", [The prefix that is prepended to the name of message files when they are "removed" by rmm. This should typically be `,' or `#'.])dnl -dnl After we know if we're including apop and kpop support, do pop stuff -if test x"$enable_pop" = x"yes"; then - AC_DEFINE([POP], 1, - [Define this to compile client-side support for pop into inc and msgchk.])dnl -fi -AM_CONDITIONAL([POP_SUPPORT], [test x"$enable_pop" = x"yes"]) - dnl What method of locking to use? AC_ARG_WITH(locking, AS_HELP_STRING([--with-locking=@<:@dot|fcntl|flock|lockf@:>@], @@ -761,11 +746,6 @@ eval "nmhlib=${libdir}"; eval "nmhlib=${nmhlib}" eval "nmhman=${mandir}"; eval "nmhman=${nmhman}" eval "nmhrpm=${nmhrpm}"; -pop_kinds=no -if test x"$enable_pop" = x"yes"; then - pop_kinds="yes (POP3)" -fi - dnl dnl Sigh, this is required because under the new world order autoconf has dnl nothing to create in a few of the build directories when doing an object @@ -800,7 +780,6 @@ default smtp servers : ${smtpservers} default editor : ${editorpath} default pager : ${pagerpath} email address masquerading : ${masquerade} -pop is enabled : ${pop_kinds} SASL support : ${sasl_support} TLS support : ${tls_support}" echo ""]) diff --git a/docs/pending-release-notes b/docs/pending-release-notes index f7e0ac7..e6de6fd 100644 --- a/docs/pending-release-notes +++ b/docs/pending-release-notes @@ -15,3 +15,5 @@ Things to add to the release notes for the next full release: - fileproc and mhlproc mh-profile entries will now be obeyed by send, rcvdist, and whatnow. - New format instructions %(putlit) and %(concataddr) have been implemented. +- The --enable-pop configure option has been removed; POP support is now + compiled in always. diff --git a/man/inc.man b/man/inc.man index 44153a5..b9c34f9 100644 --- a/man/inc.man +++ b/man/inc.man @@ -23,7 +23,6 @@ inc \- incorporate new mail .RB [ \-truncate " | " \-notruncate ] .RB [ \-width .IR columns ] -%nmhbeginpop% .RB [ \-host .IR hostname ] .RB [ \-user @@ -37,7 +36,6 @@ inc \- incorporate new mail .RB [ \-saslmech .IR mechanism ] .RB [ \-snoop ] -%nmhendpop% .RB [ \-version ] .RB [ \-help ] .ad @@ -180,7 +178,6 @@ switch directs to be quiet and not ask any questions at all. This is useful for putting .B inc in the background and going on to other things. -%nmhbeginpop% .PP .SS "Using POP" .B inc @@ -286,7 +283,6 @@ Encrypted traffic is labelled with `(encrypted)' and `(decrypted)' when viewing the POP transaction with the .B \-snoop switch. -%nmhendpop% .SH FILES .fc ^ ~ @@ -322,9 +318,7 @@ mhmail(1), scan(1), mh\-mail(5), post(8) .RB ` \-nosilent ' .RB ` \-truncate "' if `" \-file " name' not given, `" \-notruncate "' otherwise" .RB ` \-width "' defaulted to the width of the terminal" -%nmhbeginpop% .RB ` \-nopack ' -%nmhendpop% .fi .SH CONTEXT diff --git a/man/mh-chart.man b/man/mh-chart.man index 793562f..d5be463 100644 --- a/man/mh-chart.man +++ b/man/mh-chart.man @@ -242,7 +242,6 @@ is equivalent to .RB [ \-truncate " | " \-notruncate ] .RB [ \-width .IR columns ] -%nmhbeginpop% .RB [ \-host .IR hostname ] .RB [ \-user @@ -254,7 +253,6 @@ is equivalent to .RB [ \-saslmech .IR mechanism ] .RB [ \-snoop ] -%nmhendpop% .RB [ \-version ] .RB [ \-help ] @@ -434,7 +432,6 @@ is equivalent to all/mail/nomail ] .RB [ \-nonotify all/mail/nomail ] -%nmhbeginpop% .RB [ \-host .IR hostname ] .RB [ \-user @@ -443,7 +440,6 @@ all/mail/nomail ] .RB [ \-saslmech .IR mechanism ] .RB [ \-snoop ] -%nmhendpop% .RI [ users \&... ] .RB [ \-version ] diff --git a/man/msgchk.man b/man/msgchk.man index 55d4a18..7505d48 100644 --- a/man/msgchk.man +++ b/man/msgchk.man @@ -13,7 +13,6 @@ msgchk \- check for messages all/mail/nomail ] .RB [ \-nonotify all/mail/nomail ] -%nmhbeginpop% .RB [ \-host .IR hostname ] .RB [ \-user @@ -22,7 +21,6 @@ all/mail/nomail ] .RB [ \-saslmech .IR mechanism ] .RB [ \-snoop ] -%nmhendpop% .RI [ users \&... ] .RB [ \-version ] @@ -77,7 +75,6 @@ switch directs .B msgchk to print out the last date mail was read, if this can be determined. -%nmhbeginpop% .SS "Using POP" .B msgchk @@ -150,7 +147,6 @@ with `(encrypted)' and `(decrypted)' when viewing the POP transaction with the .B \-snoop switch. -%nmhendpop% .SH FILES .fc ^ ~ diff --git a/uip/inc.c b/uip/inc.c index 9310ae1..edb288f 100644 --- a/uip/inc.c +++ b/uip/inc.c @@ -30,11 +30,8 @@ #include <h/utils.h> #include <fcntl.h> -#ifdef POP -# include <h/dropsbr.h> -# include <h/popsbr.h> -#endif - +#include <h/dropsbr.h> +#include <h/popsbr.h> #include <h/fmt_scan.h> #include <h/scansbr.h> #include <h/signals.h> @@ -43,12 +40,6 @@ #include <errno.h> #include <signal.h> -#ifndef POP -# define POPminc(a) (a) -#else -# define POPminc(a) 0 -#endif - #ifndef CYRUS_SASL # define SASLminc(a) (a) #else @@ -71,15 +62,15 @@ static struct swit switches[] = { #define FMTSW 6 { "format string", 5 }, #define HOSTSW 7 - { "host hostname", POPminc (-4) }, + { "host hostname", 0 }, #define USERSW 8 - { "user username", POPminc (-4) }, + { "user username", 0 }, #define PACKSW 9 - { "pack file", POPminc (-4) }, + { "pack file", 0}, #define NPACKSW 10 - { "nopack", POPminc (-6) }, + { "nopack", 0 }, #define PORTSW 11 - { "port name/number", POPminc (-4) }, + { "port name/number", 0 }, #define SILSW 12 { "silent", 0 }, #define NSILSW 13 @@ -101,7 +92,7 @@ static struct swit switches[] = { #define SASLMECHSW 21 { "saslmech", SASLminc(-8) }, #define PROXYSW 22 - { "proxy command", POPminc(-5) }, + { "proxy command", 0 }, { NULL, 0 } }; @@ -109,9 +100,7 @@ static struct swit switches[] = { * flags for the mail source */ #define INC_FILE 0 -#ifdef POP -# define INC_POP 1 -#endif /* POP */ +#define INC_POP 1 static int inc_type; static struct Maildir_entry { @@ -121,7 +110,6 @@ static struct Maildir_entry { static int num_maildir_entries = 0; static int snoop = 0; -#ifdef POP extern char response[]; static int size; @@ -129,7 +117,6 @@ static long pos; static int mbx_style = MMDF_FORMAT; static int pd = NOTOK; -#endif /* POP */ static long start; static long stop; @@ -141,13 +128,9 @@ static FILE *pf = NULL; * privilege ops into macros. * *GROUPPRIVS() is related to handling the setgid MAIL property, * and only applies if MAILGROUP is defined. - * *USERPRIVS() is related to handling the setuid root property, - * and only applies if POP is defined [why does POP => setuid root?] * Basically, SAVEGROUPPRIVS() is called right at the top of main() * to initialise things, and then DROPGROUPPRIVS() and GETGROUPPRIVS() - * do the obvious thing. TRYDROPGROUPPRIVS() has to be safe to call - * before DROPUSERPRIVS() is called [this is needed because setgid() - * sets both effective and real uids if euid is root.] + * do the obvious thing. * * There's probably a better implementation if we're allowed to use * BSD-style setreuid() rather than using POSIX saved-ids. @@ -164,15 +147,7 @@ static FILE *pf = NULL; */ #ifdef MAILGROUP static int return_gid; -#ifndef POP -/* easy case; we're not setuid root, so can drop group privs - * immediately. - */ #define TRYDROPGROUPPRIVS() DROPGROUPPRIVS() -#else /* POP ie we are setuid root */ -#define TRYDROPGROUPPRIVS() \ -if (geteuid() != 0) DROPGROUPPRIVS() -#endif #define DROPGROUPPRIVS() setgid(getgid()) #define GETGROUPPRIVS() setgid(return_gid) #define SAVEGROUPPRIVS() return_gid = getegid() @@ -195,11 +170,9 @@ static FILE *in; char *map_name(char *); static void inc_done(int) NORETURN; -#ifdef POP static int pop_action(char *); static int pop_pack(char *); static int map_count(void); -#endif int maildir_srt(const void *va, const void *vb) @@ -232,11 +205,9 @@ main (int argc, char **argv) char b[MAXPATHLEN + 1]; char *maildir_copy = NULL; /* copy of mail directory because the static gets overwritten */ -#ifdef POP int nmsgs, nbytes; char *pass = NULL; char *MAILHOST_env_variable; -#endif done=inc_done; @@ -258,7 +229,6 @@ main (int argc, char **argv) arguments = getarguments (invo_name, argc, argv, 1); argp = arguments; -#ifdef POP /* * Scheme is: * use MAILHOST environment variable if present, @@ -277,7 +247,6 @@ main (int argc, char **argv) if ((cp = getenv ("MHPOPDEBUG")) && *cp) snoop++; -#endif /* POP */ while ((cp = *argp++)) { if (*cp == '-') { @@ -379,18 +348,11 @@ main (int argc, char **argv) continue; case PACKSW: -#ifndef POP - if (!(cp = *argp++) || *cp == '-') - adios (NULL, "missing argument to %s", argp[-2]); -#else /* POP */ if (!(packfile = *argp++) || *packfile == '-') adios (NULL, "missing argument to %s", argp[-2]); -#endif /* POP */ continue; case NPACKSW: -#ifdef POP packfile = NULL; -#endif /* POP */ continue; case SNOOPSW: @@ -424,10 +386,8 @@ main (int argc, char **argv) /* NOTE: above this point you should use TRYDROPGROUPPRIVS(), * not DROPGROUPPRIVS(). */ -#ifdef POP if (host && !*host) host = NULL; -#endif /* POP */ /* guarantee dropping group priveleges; we might not have done so earlier */ DROPGROUPPRIVS(); @@ -437,14 +397,11 @@ main (int argc, char **argv) */ if (from) inc_type = INC_FILE; -#ifdef POP else if (host) inc_type = INC_POP; -#endif else inc_type = INC_FILE; -#ifdef POP /* * Are we getting the mail from * a POP server? @@ -473,7 +430,6 @@ main (int argc, char **argv) adios (NULL, "no mail to incorporate"); } } -#endif /* POP */ /* * We will get the mail from a file @@ -548,11 +504,9 @@ main (int argc, char **argv) newmail = cp; } -#ifdef POP /* skip the folder setup */ if ((inc_type == INC_POP) && packfile) goto go_to_it; -#endif /* POP */ if (!context_find ("path")) free (path ("./", TFOLDER)); @@ -580,9 +534,7 @@ main (int argc, char **argv) if (!(mp = folder_read (folder))) adios (NULL, "unable to read folder %s", folder); -#ifdef POP go_to_it: -#endif /* POP */ if (inc_type == INC_FILE && Maildir == NULL) { if (access (newmail, W_OK) != NOTOK) { @@ -619,15 +571,10 @@ go_to_it: else if (i == NOTOK) chmod (audfile, m_gmprot ()); -#ifdef POP fprintf (aud, from ? "<<inc>> %s -ms %s\n" : host ? "<<inc>> %s -host %s -user %s\n" : "<<inc>> %s\n", dtimenow (0), from ? from : host, user); -#else /* POP */ - fprintf (aud, from ? "<<inc>> %s -ms %s\n" : "<<inc>> %s\n", - dtimenow (0), from); -#endif /* POP */ } /* Get new format string */ @@ -638,7 +585,6 @@ go_to_it: fflush (stdout); } -#ifdef POP /* * Get the mail from a POP server */ @@ -767,7 +713,6 @@ go_to_it: pd = NOTOK; } } -#endif /* POP */ /* * Get the mail from file (usually mail spool) @@ -970,10 +915,8 @@ go_to_it: if (noisy) fflush (stdout); -#ifdef POP if ((inc_type == INC_POP) && packfile) done (0); -#endif /* POP */ /* * truncate file we are incorporating from @@ -1066,10 +1009,8 @@ cpymsg (FILE *in, FILE *out) static void inc_done (int status) { -#ifdef POP if (packfile && pd != NOTOK) mbx_close (packfile, pd); -#endif /* POP */ if (locked) { GETGROUPPRIVS(); @@ -1079,7 +1020,6 @@ inc_done (int status) exit (status); } -#ifdef POP static int pop_action (char *s) { @@ -1123,4 +1063,3 @@ map_count (void) close (md); return (d.d_id); } -#endif /* POP */ diff --git a/uip/msgchk.c b/uip/msgchk.c index a958351..8294d46 100644 --- a/uip/msgchk.c +++ b/uip/msgchk.c @@ -12,15 +12,7 @@ #include <h/tws.h> #include <pwd.h> -#ifdef POP -# include <h/popsbr.h> -#endif - -#ifndef POP -# define POPminc(a) (a) -#else -# define POPminc(a) 0 -#endif +#include <h/popsbr.h> #ifndef CYRUS_SASL # define SASLminc(a) (a) @@ -38,11 +30,11 @@ static struct swit switches[] = { #define NNOTESW 3 { "nonotify type", 0 }, #define HOSTSW 4 - { "host hostname", POPminc (-4) }, + { "host hostname", 0 }, #define USERSW 5 - { "user username", POPminc (-4) }, + { "user username", 0 }, #define PORTSW 6 - { "port name/number", POPminc(-4) }, + { "port name/number", 0 }, #define VERSIONSW 7 { "version", 0 }, #define HELPSW 8 @@ -54,7 +46,7 @@ static struct swit switches[] = { #define SASLMECHSW 11 { "saslmech", SASLminc(-5) }, #define PROXYSW 12 - { "proxy command", POPminc(-5) }, + { "proxy command", 0 }, { NULL, 0 } }; @@ -85,11 +77,8 @@ static struct swit switches[] = { */ static int donote (char *, int); static int checkmail (char *, char *, int, int, int); - -#ifdef POP static int remotemail (char *, char *, char *, char *, int, int, int, int, char *); -#endif int @@ -122,10 +111,8 @@ main (int argc, char **argv) arguments = getarguments (invo_name, argc, argv, 1); argp = arguments; -#ifdef POP if ((cp = getenv ("MHPOPDEBUG")) && *cp) snoop++; -#endif while ((cp = *argp++)) { if (*cp == '-') { @@ -207,7 +194,6 @@ main (int argc, char **argv) vec[vecp++] = cp; } -#ifdef POP /* * If -host is not specified by user */ @@ -221,12 +207,10 @@ main (int argc, char **argv) } if (!host || !*host) host = NULL; -#endif /* POP */ if (vecp != 0) vec[vecp] = NULL; -#ifdef POP if (host) { if (vecp == 0) { status = remotemail (host, port, user, proxy, notifysw, 1, @@ -237,7 +221,6 @@ main (int argc, char **argv) snoop, sasl, saslmech); } } else { -#endif /* POP */ if (vecp == 0) { char *home; @@ -258,9 +241,7 @@ main (int argc, char **argv) advise (NULL, "no such user as %s", vec[vecp]); } } -#ifdef POP } /* host == NULL */ -#endif done (status); return 1; @@ -351,7 +332,6 @@ checkmail (char *user, char *home, int datesw, int notifysw, int personal) } -#ifdef POP extern char response[]; static int @@ -399,4 +379,3 @@ remotemail (char *host, char *port, char *user, char *proxy, int notifysw, return status; } -#endif /* POP */ ----------------------------------------------------------------------- Summary of changes: Makefile.am | 16 ++------- configure.ac | 21 ----------- docs/pending-release-notes | 2 + man/inc.man | 6 --- man/mh-chart.man | 4 -- man/msgchk.man | 4 -- sbr/getans.c | 39 ++++++++++++++++++--- uip/inc.c | 81 +++++-------------------------------------- uip/msgchk.c | 31 +++-------------- 9 files changed, 54 insertions(+), 150 deletions(-) hooks/post-receive -- The nmh Mail Handling System _______________________________________________ Nmh-commits mailing list Nmh-commits@nongnu.org https://lists.nongnu.org/mailman/listinfo/nmh-commits