diff options
author | Seemant Kulleen <seemant@gentoo.org> | 2003-12-11 16:19:37 +0000 |
---|---|---|
committer | Seemant Kulleen <seemant@gentoo.org> | 2003-12-11 16:19:37 +0000 |
commit | 5a73baff87c37c297688da613ffa8647eb98d9b2 (patch) | |
tree | 0d6422d6097912f9af0e9b3cccbba72548349149 /sys-apps/vixie-cron | |
parent | vixie-cron added -- vcron to be removed soon (diff) | |
download | gentoo-2-5a73baff87c37c297688da613ffa8647eb98d9b2.tar.gz gentoo-2-5a73baff87c37c297688da613ffa8647eb98d9b2.tar.bz2 gentoo-2-5a73baff87c37c297688da613ffa8647eb98d9b2.zip |
vixie-cron added -- vcron to be removed soon
Diffstat (limited to 'sys-apps/vixie-cron')
-rw-r--r-- | sys-apps/vixie-cron/ChangeLog | 108 | ||||
-rw-r--r-- | sys-apps/vixie-cron/Manifest | 17 | ||||
-rw-r--r-- | sys-apps/vixie-cron/files/crontab | 15 | ||||
-rw-r--r-- | sys-apps/vixie-cron/files/crontab-3.0.1-r4 | 13 | ||||
-rw-r--r-- | sys-apps/vixie-cron/files/digest-vixie-cron-3.0.1-r1 | 1 | ||||
-rw-r--r-- | sys-apps/vixie-cron/files/digest-vixie-cron-3.0.1-r3 | 1 | ||||
-rw-r--r-- | sys-apps/vixie-cron/files/digest-vixie-cron-3.0.1-r4 | 1 | ||||
-rw-r--r-- | sys-apps/vixie-cron/files/vixie-cron-3.0.1-close_stdin.diff | 37 | ||||
-rw-r--r-- | sys-apps/vixie-cron/files/vixie-cron-3.0.1-gentoo.patch | 892 | ||||
-rw-r--r-- | sys-apps/vixie-cron/files/vixie-cron-3.0.1-selinux.diff.bz2 | bin | 0 -> 1931 bytes | |||
-rw-r--r-- | sys-apps/vixie-cron/files/vixie-cron.rc6 | 21 | ||||
-rw-r--r-- | sys-apps/vixie-cron/metadata.xml | 5 | ||||
-rw-r--r-- | sys-apps/vixie-cron/vixie-cron-3.0.1-r1.ebuild | 75 | ||||
-rw-r--r-- | sys-apps/vixie-cron/vixie-cron-3.0.1-r3.ebuild | 84 | ||||
-rw-r--r-- | sys-apps/vixie-cron/vixie-cron-3.0.1-r4.ebuild | 86 |
15 files changed, 1346 insertions, 10 deletions
diff --git a/sys-apps/vixie-cron/ChangeLog b/sys-apps/vixie-cron/ChangeLog new file mode 100644 index 000000000000..c301d197208d --- /dev/null +++ b/sys-apps/vixie-cron/ChangeLog @@ -0,0 +1,108 @@ +# ChangeLog for sys-apps/vixie-cron +# Copyright 2002-2003 Gentoo Technologies, Inc.; Distributed under the GPL v2 +# $Header: /var/cvsroot/gentoo-x86/sys-apps/vixie-cron/ChangeLog,v 1.1 2003/12/11 16:19:36 seemant Exp $ + +*vixie-cron-3.0.1-r3 (11 Dec 2003) + + 11 Dec 2003; Seemant Kulleen <seemant@gentoo.org> metadata.xml, + vixie-cron-3.0.1-r1.ebuild, vixie-cron-3.0.1-r3.ebuild, + vixie-cron-3.0.1-r4.ebuild, files/crontab, files/crontab-3.0.1-r4, + files/vixie-cron-3.0.1-close_stdin.diff, + files/vixie-cron-3.0.1-gentoo.patch, + files/vixie-cron-3.0.1-selinux.diff.bz2, files/vixie-cron.rc6: + vixie-cron is the proper name for the package + + 19 Nov 2003; Jason Wever <weeve@gentoo.org> vcron-3.0.1-r3.ebuild: + Marked stable on sparc. + + 19 Nov 2003; Seemant Kulleen <seemant@gentoo.org> vcron-3.0.1-r4.ebuild: + fix RDEPEND syntax on cronbase -- people need to learn repoman + +*vcron-3.0.1-r4 (19 Nov 2003) + + 19 Nov 2003; Preston A. Elder <prez@gentoo.org> vcron-3.0.1-r4.ebuild, + crontab-3.0.1-r4: + Changed to allow run-crons to run minutely (requires newer cronbase). + +*vcron-3.0.1-r3 (12 Nov 2003) + + 12 Nov 2003; Chris PeBenito <pebenito@gentoo.org> vcron-3.0.1-r2.ebuild, + vcron-3.0.1-r3.ebuild: + Bump to make sure everyone gets the fixed patch. + + 12 Nov 2003; Chris PeBenito <pebenito@gentoo.org> + files/vcron-3.0.1-close_stdin.diff: + Fixed close stdin patch, to close 32911. Thanks to Mike Kordik + for some pointers. + + 30 Oct 2003; Chris PeBenito <pebenito@gentoo.org> vcron-3.0.1-r2.ebuild: + Mark stable on x86 and ppc. + + 28 Oct 2003; Chris PeBenito <pebenito@gentoo.org> vcron-3.0.1-r1.ebuild, + vcron-3.0.1-r2.ebuild, files/vcron-3.0.1-selinux.diff.bz2: + Switch SELinux patch from old API to new API. + +*vcron-3.0.1-r2 (16 Oct 2003) + + 16 Oct 2003; Chris PeBenito <pebenito@gentoo.org> vcron-3.0.1-r2.ebuild, + files/vcron-3.0.1-close_stdin.diff: + Add 1-line patch to close stdin, to close out #26413. + +*vcron-3.0.1-r1 (20 Apr 2002) + + 07 May 2003; Martin Holzer <mholzer@gentoo.org> vcron-3.0.1-r1.ebuild : + Seems like the packages removed from world. + SRC_URI & Homepage updated. Closes #20387. + + 21 Apr 2003; Guy Martin <gmsoft@gentoo.org> vcron-3.0.1-r1.ebuild : + Added hppa to KEYWORDS. + + 13 Apr 2003; Seemant Kulleen <seemant@gentoo.org> Manifest, + files/vixie-cron-3.0.1-gentoo.patch: + cleaned up patch: closing bug #19229 by Markus Nigbur <pYrania@1337-Designz.de> + + 12 Apr 2003; Seemant Kulleen <seemant@gentoo.org> Manifest, + vcron-3.0.1-r1.ebuild: + slight syntax fix to not inherit eutils + + 23 Mar 2003; Joshua Brindle <method@gentoo.org> vcron-3.0.1-r1.ebuild: + added selinux support, thanks pebenito + + 24 Feb 2003; Nicholas Wourms <dragon@gentoo.org> vcron-3.0.1-r1.ebuild : + Marked as stable for mips. + + 20 Feb 2003; Zach Welch <zwelch@gentoo.org> vcron-3.0.1-r1.ebuild : + Add arm keyword + + 19 Feb 2003; Martin Holzer <mholzer@gentoo.org> vcron-3.0.1-r1.ebuild : + added keepdir /var/spool/cron/crontabs/ + + 06 Aug 2002; Daniel Ahlberg <aliz@gentoo.org> vcron-3.0.1-r1.ebuild : + Updated homepage tag. + + 14 Jul 2002; Daniel Ahlberg <aliz@gentoo.org> vcron-3.0.1-r1.ebuild : + Added LICENSE, KEYWORDS, SLOT. + + 14 Jul 2002; Daniel Ahlberg <aliz@gentoo.org> vcron-3.0.1-r1.ebuild : + Added LICENSE, KEYWORDS, SLOT. + + 20 Apr 2002; Thilo Bangert <bangert@gentoo.org> files/crontab : + added own crontab + fixed path to suit /var/spool/cron/lastrun + added support for /etc/cron.hourly + + 20 Apr 2002; Thilo Bangert <bangert@gentoo.org> vcron-3.0.1.ebuild : + added PROVIDE="virtual/cron" && RDEPEND="virtual/cron" + removed code duplication + install own version of /etc/crontab + rdepend on sys-apps/cronbase and virtual/mta + + 20 Apr 2002; Thilo Bangert <bangert@gentoo.org> files/vcron.rc6 : + added "provide cron" + + 20 April 2002; Martin Schlemmer <azarah@gentoo.org> files/vcron.rc6 : + Update to NEED "logger" + +*vcron-3.0.1 (1 Feb 2002) + + 1 Feb 2002; G.Bevin <gbevin@gentoo.org> ChangeLog : diff --git a/sys-apps/vixie-cron/Manifest b/sys-apps/vixie-cron/Manifest index 24430a963246..80ba9a106b19 100644 --- a/sys-apps/vixie-cron/Manifest +++ b/sys-apps/vixie-cron/Manifest @@ -1,14 +1,11 @@ -MD5 2b207a184cd630594eb12eaca904026a vixie-cron-3.0.1-r4.ebuild 1774 -MD5 c247ec9b429ff74023f88725dfb44b5c vixie-cron-3.0.1-r1.ebuild 1467 -MD5 28a447a39f37130d849883a5655faaa8 vixie-cron-3.0.1-r3.ebuild 1712 -MD5 487bad624265ce2f943279713a687adc ChangeLog 3527 +MD5 de29cdbc01588e5ab4b5ac6f54d8031b vixie-cron-3.0.1-r4.ebuild 1783 +MD5 9b9ec6bb20ab2d26ec1fef6dd887c839 vixie-cron-3.0.1-r1.ebuild 1475 +MD5 47ab4e71b825735a2ab33011d6a2768d vixie-cron-3.0.1-r3.ebuild 1724 +MD5 fcce06ef9d545abd6c6fa944f8aafd21 ChangeLog 3963 MD5 9a09f8d531c582e78977dbfd96edc1f2 metadata.xml 164 -MD5 7407233e1718a8e515022b9ada84bfa1 files/crontab-3.0.1-r4 564 -MD5 6a065c2a4012e573ebb852275516a1d4 files/crontab 563 -MD5 42a9b1ba7246f2fb453203eaccbb0e08 files/digest-vcron-3.0.1-r1 68 -MD5 42a9b1ba7246f2fb453203eaccbb0e08 files/digest-vcron-3.0.1-r3 68 -MD5 42a9b1ba7246f2fb453203eaccbb0e08 files/digest-vcron-3.0.1-r4 68 -MD5 7f79290c2f51c9dcee459c8a5636f652 files/vixie-cron.rc6 520 +MD5 0a164d0e2ca722a69ebaf52476826608 files/crontab-3.0.1-r4 572 +MD5 719664bf4302b9fc2b69e7301da999c4 files/crontab 568 +MD5 d05535824992fe7a8ef484d65a3782e4 files/vixie-cron.rc6 531 MD5 9d66b761d15afae9471d33509b712fe9 files/vixie-cron-3.0.1-close_stdin.diff 810 MD5 42a9b1ba7246f2fb453203eaccbb0e08 files/digest-vixie-cron-3.0.1-r1 68 MD5 42a9b1ba7246f2fb453203eaccbb0e08 files/digest-vixie-cron-3.0.1-r3 68 diff --git a/sys-apps/vixie-cron/files/crontab b/sys-apps/vixie-cron/files/crontab new file mode 100644 index 000000000000..81045fc58d31 --- /dev/null +++ b/sys-apps/vixie-cron/files/crontab @@ -0,0 +1,15 @@ +# check scripts in cron.hourly, cron.daily, cron.weekly and cron.monthly +# for vixie cron +# remember to give cron a sighup when updating this file +# +# $Header: /var/cvsroot/gentoo-x86/sys-apps/vixie-cron/files/crontab,v 1.1 2003/12/11 16:19:36 seemant Exp $ +# +# +*/15 * * * * root test -x /usr/sbin/run-crons && /usr/sbin/run-crons +0 * * * * root rm -f /var/spool/cron/lastrun/cron.hourly +0 0 * * * root rm -f /var/spool/cron/lastrun/cron.daily +0 0 * * 6 root rm -f /var/spool/cron/lastrun/cron.weekly +0 0 1 * * root rm -f /var/spool/cron/lastrun/cron.monthly + + + diff --git a/sys-apps/vixie-cron/files/crontab-3.0.1-r4 b/sys-apps/vixie-cron/files/crontab-3.0.1-r4 new file mode 100644 index 000000000000..92ecdab17ebe --- /dev/null +++ b/sys-apps/vixie-cron/files/crontab-3.0.1-r4 @@ -0,0 +1,13 @@ +# check scripts in cron.hourly, cron.daily, cron.weekly and cron.monthly +# for vixie cron +# remember to give cron a sighup when updating this file +# +# $Header: /var/cvsroot/gentoo-x86/sys-apps/vixie-cron/files/crontab-3.0.1-r4,v 1.1 2003/12/11 16:19:36 seemant Exp $ +# +# + +0 * * * * root rm -f /var/spool/cron/lastrun/cron.hourly +0 0 * * * root rm -f /var/spool/cron/lastrun/cron.daily +0 0 * * 6 root rm -f /var/spool/cron/lastrun/cron.weekly +0 0 1 * * root rm -f /var/spool/cron/lastrun/cron.monthly +* * * * * root test -x /usr/sbin/run-crons && /usr/sbin/run-crons diff --git a/sys-apps/vixie-cron/files/digest-vixie-cron-3.0.1-r1 b/sys-apps/vixie-cron/files/digest-vixie-cron-3.0.1-r1 new file mode 100644 index 000000000000..730747648de8 --- /dev/null +++ b/sys-apps/vixie-cron/files/digest-vixie-cron-3.0.1-r1 @@ -0,0 +1 @@ +MD5 369390355808fcf947cd2f9847f88859 vixie-cron-3.0.1.tar.bz2 50376 diff --git a/sys-apps/vixie-cron/files/digest-vixie-cron-3.0.1-r3 b/sys-apps/vixie-cron/files/digest-vixie-cron-3.0.1-r3 new file mode 100644 index 000000000000..730747648de8 --- /dev/null +++ b/sys-apps/vixie-cron/files/digest-vixie-cron-3.0.1-r3 @@ -0,0 +1 @@ +MD5 369390355808fcf947cd2f9847f88859 vixie-cron-3.0.1.tar.bz2 50376 diff --git a/sys-apps/vixie-cron/files/digest-vixie-cron-3.0.1-r4 b/sys-apps/vixie-cron/files/digest-vixie-cron-3.0.1-r4 new file mode 100644 index 000000000000..730747648de8 --- /dev/null +++ b/sys-apps/vixie-cron/files/digest-vixie-cron-3.0.1-r4 @@ -0,0 +1 @@ +MD5 369390355808fcf947cd2f9847f88859 vixie-cron-3.0.1.tar.bz2 50376 diff --git a/sys-apps/vixie-cron/files/vixie-cron-3.0.1-close_stdin.diff b/sys-apps/vixie-cron/files/vixie-cron-3.0.1-close_stdin.diff new file mode 100644 index 000000000000..a365f0c3ce3c --- /dev/null +++ b/sys-apps/vixie-cron/files/vixie-cron-3.0.1-close_stdin.diff @@ -0,0 +1,37 @@ +diff -urN vixie-cron-3.0.1.orig/cron.c vixie-cron-3.0.1/cron.c +--- vixie-cron-3.0.1.orig/cron.c 2003-11-07 11:33:38.000000000 -0600 ++++ vixie-cron-3.0.1/cron.c 2003-11-12 12:37:42.000000000 -0600 +@@ -25,6 +25,8 @@ + + #include "cron.h" + #include <sys/signal.h> ++#include <sys/stat.h> ++#include <fcntl.h> + #if SYS_TIME_H + # include <sys/time.h> + # include <time.h> +@@ -58,6 +60,7 @@ + char *argv[]; + { + cron_db database; ++ int i; + + ProgramName = argv[0]; + +@@ -108,6 +111,16 @@ + } + } + ++ /* close stdin, stdout, and stderr */ ++ if ( (i = open("/dev/null", O_RDWR)) < 0) { ++ log_it("CRON",getpid(),"DEATH","can't open /dev/null"); ++ exit(0); ++ } ++ close(0); dup2(i, 0); ++ close(1); dup2(i, 1); ++ close(2); dup2(i, 2); ++ close(i); ++ + acquire_daemonlock(0); + database.head = NULL; + database.tail = NULL; diff --git a/sys-apps/vixie-cron/files/vixie-cron-3.0.1-gentoo.patch b/sys-apps/vixie-cron/files/vixie-cron-3.0.1-gentoo.patch new file mode 100644 index 000000000000..9e83ead0b393 --- /dev/null +++ b/sys-apps/vixie-cron/files/vixie-cron-3.0.1-gentoo.patch @@ -0,0 +1,892 @@ +diff -urN vixie-cron-3.0.1.orig/FEATURES vixie-cron-3.0.1/FEATURES +--- vixie-cron-3.0.1.orig/FEATURES 1995-05-31 16:38:25.000000000 -0500 ++++ vixie-cron-3.0.1/FEATURES 2003-10-17 10:00:45.000000000 -0500 +@@ -82,3 +82,8 @@ + act this way and do the more reasonable thing, which is (IMHO) to "or" + the various field-matches together. In that sense this cron may not + be completely similar to some AT&T crons. ++ ++-- If it exists, the /etc/cron.d/ directory is parsed like the cron ++ spool directory, except that the files in it are not user-specific ++ and are therefore read with /etc/crontab syntax (the user is ++ specified explicitly in the 6th column). +diff -urN vixie-cron-3.0.1.orig/Makefile vixie-cron-3.0.1/Makefile +--- vixie-cron-3.0.1.orig/Makefile 1995-05-31 16:37:20.000000000 -0500 ++++ vixie-cron-3.0.1/Makefile 2003-10-17 10:00:45.000000000 -0500 +@@ -50,35 +50,35 @@ + DESTROOT = $(DESTDIR)/usr + DESTSBIN = $(DESTROOT)/sbin + DESTBIN = $(DESTROOT)/bin +-DESTMAN = $(DESTROOT)/share/man ++DESTMAN = $(DESTROOT)/man + #<<need bitstring.h>> + INCLUDE = -I. + #INCLUDE = + #<<need getopt()>> + LIBS = + #<<optimize or debug?>> +-#OPTIM = -O +-OPTIM = -g ++OPTIM = -O2 ++#OPTIM = -g + #<<ATT or BSD or POSIX?>> + # (ATT untested) + #COMPAT = -DATT + #(BSD is only needed if <sys/params.h> does not define it, as on ULTRIX) + #COMPAT = -DBSD + # (POSIX) +-#COMPAT = -DPOSIX ++COMPAT = -DPOSIX + #<<lint flags of choice?>> + LINTFLAGS = -hbxa $(INCLUDE) $(COMPAT) $(DEBUGGING) + #<<want to use a nonstandard CC?>> + #CC = vcc + #<<manifest defines>> +-DEFS = ++DEFS = -s + #(SGI IRIX systems need this) + #DEFS = -D_BSD_SIGNALS -Dconst= + #<<the name of the BSD-like install program>> + #INSTALL = installbsd + INSTALL = install + #<<any special load flags>> +-LDFLAGS = ++LDFLAGS = -s + #################################### end configurable stuff + + SHELL = /bin/sh +@@ -113,13 +113,17 @@ + $(CC) $(LDFLAGS) -o crontab $(CRONTAB_OBJ) $(LIBS) + + install : all +- $(INSTALL) -c -m 111 -o root -s cron $(DESTSBIN)/ +- $(INSTALL) -c -m 4111 -o root -s crontab $(DESTBIN)/ ++ $(INSTALL) -c -m 755 cron $(DESTSBIN)/cron ++ $(INSTALL) -c -m 4755 crontab $(DESTBIN)/ + sh putman.sh crontab.1 $(DESTMAN) ++ chmod 644 $(DESTMAN)/man1/crontab.1 + sh putman.sh cron.8 $(DESTMAN) ++ chmod 644 $(DESTMAN)/man8/cron.8 + sh putman.sh crontab.5 $(DESTMAN) ++ chmod 644 $(DESTMAN)/man5/crontab.5 + +-clean :; rm -f *.o cron crontab a.out core tags *~ #* ++clean : ++ rm -f *.o cron crontab a.out core tags *~ #* + + kit : $(SHAR_SOURCE) + makekit -m -s99k $(SHAR_SOURCE) +diff -urN vixie-cron-3.0.1.orig/compat.c vixie-cron-3.0.1/compat.c +--- vixie-cron-3.0.1.orig/compat.c 1995-05-31 16:37:20.000000000 -0500 ++++ vixie-cron-3.0.1/compat.c 2003-10-17 10:00:45.000000000 -0500 +@@ -73,7 +73,7 @@ + return sys_errlist[error]; + } + +- sprintf(buf, "Unknown error: %d", error); ++ snprintf(buf, 32, "Unknown error: %d", error); + return buf; + } + #endif +@@ -218,16 +218,19 @@ + int overwrite; + { + char *tmp; +- ++ int tmp_size; ++ + if (overwrite && getenv(name)) + return -1; + +- if (!(tmp = malloc(strlen(name) + strlen(value) + 2))) { ++ tmp_size = strlen(name) + strlen(value) + 2; ++ if (!(tmp = malloc(tmp_size))) { + errno = ENOMEM; + return -1; + } + +- sprintf("%s=%s", name, value); ++ /* boy, that was really broken... */ ++ snprintf(tmp, tmp_size, "%s=%s", name, value); + return putenv(tmp); /* intentionally orphan 'tmp' storage */ + } + #endif +diff -urN vixie-cron-3.0.1.orig/compat.h vixie-cron-3.0.1/compat.h +--- vixie-cron-3.0.1.orig/compat.h 1995-05-31 16:37:20.000000000 -0500 ++++ vixie-cron-3.0.1/compat.h 2003-10-17 10:00:45.000000000 -0500 +@@ -110,9 +110,7 @@ + # define HAVE_SAVED_UIDS + #endif + +-#if !defined(ATT) && !defined(__linux) && !defined(IRIX) && !defined(UNICOS) + # define USE_SIGCHLD +-#endif + + #if !defined(AIX) && !defined(UNICOS) + # define SYS_TIME_H 1 +diff -urN vixie-cron-3.0.1.orig/config.h vixie-cron-3.0.1/config.h +--- vixie-cron-3.0.1.orig/config.h 1995-05-31 16:37:20.000000000 -0500 ++++ vixie-cron-3.0.1/config.h 2003-10-17 10:00:45.000000000 -0500 +@@ -29,7 +29,7 @@ + */ + + #ifndef DEBUGGING +-#define DEBUGGING 1 /* 1 or 0 -- do you want debugging code built in? */ ++#define DEBUGGING 0 /* 1 or 0 -- do you want debugging code built in? */ + #endif + + /* +@@ -42,11 +42,13 @@ + */ + + #define MAILCMD _PATH_SENDMAIL /*-*/ +-#define MAILARGS "%s -FCronDaemon -odi -oem -or0s %s" /*-*/ ++#define MAILARGS "%s -FCronDaemon -odi -oem %s" /*-*/ + /* -Fx = set full-name of sender + * -odi = Option Deliverymode Interactive + * -oem = Option Errors Mailedtosender + * -or0s = Option Readtimeout -- don't time out ++ * XXX: sendmail doesn't allow -or0s when invoked ++ * by joe user. --okir + */ + + /* #define MAILCMD "/bin/mail" /*-*/ +@@ -83,4 +85,4 @@ + * are both defined, then logging will go to both + * places. + */ +-#define SYSLOG /*-*/ ++#define SYSLOG +diff -urN vixie-cron-3.0.1.orig/cron.8 vixie-cron-3.0.1/cron.8 +--- vixie-cron-3.0.1.orig/cron.8 1995-05-31 16:37:20.000000000 -0500 ++++ vixie-cron-3.0.1/cron.8 2003-10-17 10:00:45.000000000 -0500 +@@ -29,10 +29,11 @@ + so you don't need to start it with '&'. + .PP + .I Cron +-searches /var/cron/tabs for crontab files which are named after accounts in ++searches /var/spool/cron/crontabs for crontab files which are named after accounts in + /etc/passwd; crontabs found are loaded into memory. + .I Cron +-also searches for /etc/crontab which is in a different format (see ++also searches for /etc/crontab and the files in the /etc/cron.d/ directory, ++which are in a different format (see + .IR crontab(5)). + .I Cron + then wakes up every minute, examining all stored crontabs, checking each +diff -urN vixie-cron-3.0.1.orig/cron.c vixie-cron-3.0.1/cron.c +--- vixie-cron-3.0.1.orig/cron.c 1995-05-31 16:37:20.000000000 -0500 ++++ vixie-cron-3.0.1/cron.c 2003-10-17 10:00:45.000000000 -0500 +@@ -27,6 +27,7 @@ + #include <sys/signal.h> + #if SYS_TIME_H + # include <sys/time.h> ++# include <time.h> + #else + # include <time.h> + #endif +@@ -113,8 +114,8 @@ + database.mtime = (time_t) 0; + load_database(&database); + run_reboot_jobs(&database); +- cron_sync(); + while (TRUE) { ++ cron_sync(); + # if DEBUGGING + if (!(DebugFlags & DTEST)) + # endif /*DEBUGGING*/ +@@ -125,10 +126,6 @@ + /* do this iteration + */ + cron_tick(&database); +- +- /* sleep 1 minute +- */ +- TargetTime += 60; + } + } + +@@ -205,14 +202,35 @@ + * could then get it to execute a given minute's jobs more than once. + * instead we have the chance of missing a minute's jobs completely, but + * that's something sysadmin's know to expect what with crashing computers.. ++ * ++ * Patch from <pererik@onedial.se>: ++ * Do cron_sync() before each cron_sleep(), to handle changes to the system ++ * time. ++ * ++ * Redhat bug 29868: ++ * The above patch introduced an anomaly. ++ * ++ * Unwanted double execution can occur for small backwards adjustments in ++ * clock time, such as may occur on a system that regularly syncs its clock ++ * with an outside time source. I suspect a race condition with sleep(3) ++ * as well that triggers this as well. The solution is to enforce the rule ++ * that we cannot wait for time N to occur twice in a row. Time must be ++ * elastic enough to absorb these small adjustments. <alane@geeksrus.net> + */ + static void + cron_sync() { ++ static time_t lastTarget = 0; ++ + register struct tm *tm; + + TargetTime = time((time_t*)0); + tm = localtime(&TargetTime); + TargetTime += (60 - tm->tm_sec); ++ ++ if (TargetTime == lastTarget) { ++ TargetTime += 60; ++ } ++ lastTarget = TargetTime; + } + + +@@ -278,6 +296,10 @@ + static void + sighup_handler(x) { + log_close(); ++ ++ /* we should use sigaction for proper signal blocking as this ++ has a race, but... */ ++ signal(SIGHUP, sighup_handler); + } + + +diff -urN vixie-cron-3.0.1.orig/cron.h vixie-cron-3.0.1/cron.h +--- vixie-cron-3.0.1.orig/cron.h 1995-05-31 16:37:21.000000000 -0500 ++++ vixie-cron-3.0.1/cron.h 2003-10-17 10:00:45.000000000 -0500 +@@ -68,7 +68,7 @@ + #define MAX_COMMAND 1000 /* max length of internally generated cmd */ + #define MAX_ENVSTR 1000 /* max length of envvar=value\0 strings */ + #define MAX_TEMPSTR 100 /* obvious */ +-#define MAX_UNAME 20 /* max length of username, should be overkill */ ++#define MAX_UNAME 32 /* max length of username, should be overkill */ + #define ROOT_UID 0 /* don't change this, it really must be root */ + #define ROOT_USER "root" /* ditto */ + +@@ -225,7 +225,7 @@ + entry *load_entry __P((FILE *, void (*)(), + struct passwd *, char **)); + +-FILE *cron_popen __P((char *, char *)); ++FILE *cron_popen __P((char *, char *, entry *)); + + + /* in the C tradition, we only create +@@ -253,6 +253,7 @@ + }; + + char *ProgramName; ++char *SyslogName; + int LineNumber; + time_t TargetTime; + +@@ -267,7 +268,8 @@ + extern char *copyright[], + *MonthNames[], + *DowNames[], +- *ProgramName; ++ *ProgramName, ++ *SyslogName; + extern int LineNumber; + extern time_t TargetTime; + # if DEBUGGING +diff -urN vixie-cron-3.0.1.orig/crontab.1 vixie-cron-3.0.1/crontab.1 +--- vixie-cron-3.0.1.orig/crontab.1 1995-05-31 16:37:21.000000000 -0500 ++++ vixie-cron-3.0.1/crontab.1 2003-10-17 10:00:45.000000000 -0500 +@@ -83,8 +83,8 @@ + crontab(5), cron(8) + .SH FILES + .nf +-/var/cron/allow +-/var/cron/deny ++/etc/cron.allow ++/etc/cron.deny + .fi + .SH STANDARDS + The +diff -urN vixie-cron-3.0.1.orig/crontab.5 vixie-cron-3.0.1/crontab.5 +--- vixie-cron-3.0.1.orig/crontab.5 1995-05-31 16:38:25.000000000 -0500 ++++ vixie-cron-3.0.1/crontab.5 2003-10-17 10:00:45.000000000 -0500 +@@ -84,8 +84,15 @@ + .I and + when at least one of the two day fields (day of month, or day of week) + match the current time (see ``Note'' below). ++Note that this means that non-existant times, such as "missing hours" ++during daylight savings conversion, will never match, causing jobs ++scheduled during the "missing times" not to be run. Similarly, times ++that occur more than once (again, during daylight savings conversion) ++will cause matching jobs to be run twice. ++.PP + .IR cron (8) + examines cron entries once every minute. ++.PP + The time and date fields are: + .IP + .ta 1.5i +@@ -97,9 +104,9 @@ + .br + hour 0-23 + .br +-day of month 0-31 ++day of month 1-31 + .br +-month 0-12 (or names, see below) ++month 1-12 (or names, see below) + .br + day of week 0-7 (0 or 7 is Sun, or use names) + .br +@@ -163,6 +170,9 @@ + 23 0-23/2 * * * echo "run 23 minutes after midn, 2am, 4am ..., everyday" + 5 4 * * sun echo "run at 5 after 4 every sunday" + .fi ++.SH FILES ++/etc/crontab System crontab file ++ + .SH SEE ALSO + cron(8), crontab(1) + .SH EXTENSIONS +diff -urN vixie-cron-3.0.1.orig/crontab.c vixie-cron-3.0.1/crontab.c +--- vixie-cron-3.0.1.orig/crontab.c 1995-05-31 16:38:25.000000000 -0500 ++++ vixie-cron-3.0.1/crontab.c 2003-10-17 10:00:45.000000000 -0500 +@@ -143,8 +143,8 @@ + fprintf(stderr, "bailing out.\n"); + exit(ERROR_EXIT); + } +- strcpy(User, pw->pw_name); +- strcpy(RealUser, User); ++ strncpy(User, pw->pw_name, MAX_UNAME-1); ++ strncpy(RealUser, User, MAX_UNAME-1); + Filename[0] = '\0'; + Option = opt_unknown; + while (EOF != (argch = getopt(argc, argv, "u:lerx:"))) { +@@ -166,7 +166,7 @@ + ProgramName, optarg); + exit(ERROR_EXIT); + } +- (void) strcpy(User, optarg); ++ (void) strncpy(User, optarg, MAX_UNAME - 1); + break; + case 'l': + if (Option != opt_unknown) +@@ -197,7 +197,9 @@ + } else { + if (argv[optind] != NULL) { + Option = opt_replace; +- (void) strcpy (Filename, argv[optind]); ++ (void) strncpy (Filename, argv[optind], ++ sizeof(Filename) - 1); ++ Filename[sizeof(Filename) - 1] = '\0'; + } else { + usage("file name must be specified for replace"); + } +@@ -246,7 +248,7 @@ + int ch; + + log_it(RealUser, Pid, "LIST", User); +- (void) sprintf(n, CRON_TAB(User)); ++ (void) snprintf(n, MAX_FNAME, CRON_TAB(User)); + if (!(f = fopen(n, "r"))) { + if (errno == ENOENT) + fprintf(stderr, "no crontab for %s\n", User); +@@ -269,7 +271,7 @@ + char n[MAX_FNAME]; + + log_it(RealUser, Pid, "DELETE", User); +- (void) sprintf(n, CRON_TAB(User)); ++ (void) snprintf(n, MAX_FNAME, CRON_TAB(User)); + if (unlink(n)) { + if (errno == ENOENT) + fprintf(stderr, "no crontab for %s\n", User); +@@ -294,14 +296,14 @@ + edit_cmd() { + char n[MAX_FNAME], q[MAX_TEMPSTR], *editor; + FILE *f; +- int ch, t, x; ++ int ch, t, x, saved_uid; + struct stat statbuf; + time_t mtime; + WAIT_T waiter; + PID_T pid, xpid; + + log_it(RealUser, Pid, "BEGIN EDIT", User); +- (void) sprintf(n, CRON_TAB(User)); ++ (void) snprintf(n, MAX_FNAME, CRON_TAB(User)); + if (!(f = fopen(n, "r"))) { + if (errno != ENOENT) { + perror(n); +@@ -315,7 +317,7 @@ + } + } + +- (void) sprintf(Filename, "/tmp/crontab.%d", Pid); ++ (void) snprintf(Filename, MAX_FNAME, "/tmp/crontab.%d", Pid); + if (-1 == (t = open(Filename, O_CREAT|O_EXCL|O_RDWR, 0600))) { + perror(Filename); + goto fatal; +@@ -362,6 +364,12 @@ + perror(Filename); + exit(ERROR_EXIT); + } ++ /* Do not move this statement! */ ++ saved_uid = getuid(); ++ if (saved_uid < 0) { ++ perror("getuid"); ++ exit(ERROR_EXIT); ++ } + again: + rewind(NewCrontab); + if (ferror(NewCrontab)) { +@@ -396,7 +404,7 @@ + goto fatal; + case 0: + /* child */ +- if (setuid(getuid()) < 0) { ++ if (setuid(saved_uid) < 0) { + perror("setuid(getuid())"); + exit(ERROR_EXIT); + } +@@ -409,7 +417,7 @@ + ProgramName); + exit(ERROR_EXIT); + } +- sprintf(q, "%s %s", editor, Filename); ++ snprintf(q, MAX_TEMPSTR, "%s %s", editor, Filename); + execlp(_PATH_BSHELL, _PATH_BSHELL, "-c", q, NULL); + perror(editor); + exit(ERROR_EXIT); +@@ -496,8 +504,8 @@ + time_t now = time(NULL); + char **envp = env_init(); + +- (void) sprintf(n, "tmp.%d", Pid); +- (void) sprintf(tn, CRON_TAB(n)); ++ (void) snprintf(n, MAX_FNAME, "tmp.%d", Pid); ++ (void) snprintf(tn, MAX_FNAME, CRON_TAB(n)); + if (!(tmp = fopen(tn, "w+"))) { + perror(tn); + return (-2); +@@ -585,7 +593,7 @@ + return (-2); + } + +- (void) sprintf(n, CRON_TAB(User)); ++ (void) snprintf(n, sizeof(n), CRON_TAB(User)); + if (rename(tn, n)) { + fprintf(stderr, "%s: error renaming %s to %s\n", + ProgramName, tn, n); +diff -urN vixie-cron-3.0.1.orig/database.c vixie-cron-3.0.1/database.c +--- vixie-cron-3.0.1.orig/database.c 1995-05-31 16:37:21.000000000 -0500 ++++ vixie-cron-3.0.1/database.c 2003-10-17 10:00:45.000000000 -0500 +@@ -44,6 +44,7 @@ + DIR *dir; + struct stat statbuf; + struct stat syscron_stat; ++ struct stat crond_stat; + DIR_T *dp; + cron_db new_db; + user *u, *nu; +@@ -59,6 +60,11 @@ + (void) exit(ERROR_EXIT); + } + ++ if (stat("/etc/cron.d", &crond_stat) < OK) { ++ log_it("CRON", getpid(), "STAT FAILED", SPOOL_DIR); ++ (void) exit(ERROR_EXIT); ++ } ++ + /* track system crontab file + */ + if (stat(SYSCRONTAB, &syscron_stat) < OK) +@@ -71,7 +77,8 @@ + * so is guaranteed to be different than the stat() mtime the first + * time this function is called. + */ +- if (old_db->mtime == TMAX(statbuf.st_mtime, syscron_stat.st_mtime)) { ++ if (old_db->mtime == TMAX(crond_stat.st_mtime, ++ TMAX(statbuf.st_mtime, syscron_stat.st_mtime))) { + Debug(DLOAD, ("[%d] spool dir mtime unch, no load needed.\n", + getpid())) + return; +@@ -82,7 +89,8 @@ + * actually changed. Whatever is left in the old database when + * we're done is chaff -- crontabs that disappeared. + */ +- new_db.mtime = TMAX(statbuf.st_mtime, syscron_stat.st_mtime); ++ new_db.mtime = TMAX(crond_stat.st_mtime, ++ TMAX(statbuf.st_mtime, syscron_stat.st_mtime)); + new_db.head = new_db.tail = NULL; + + if (syscron_stat.st_mtime) { +@@ -91,6 +99,32 @@ + &new_db, old_db); + } + ++ if (!(dir = opendir("/etc/cron.d"))) { ++ log_it("CRON", getpid(), "OPENDIR FAILED", "/etc/cron.d"); ++ (void) exit(ERROR_EXIT); ++ } ++ ++ while (NULL != (dp = readdir(dir))) { ++ char fname[MAXNAMLEN+1], ++ tabname[MAXNAMLEN+1]; ++ ++ /* avoid file names beginning with ".". this is good ++ * because we would otherwise waste two guaranteed calls ++ * to getpwnam() for . and .., and there shouldn't be ++ * hidden files in here anyway ++ */ ++ if (dp->d_name[0] == '.') ++ continue; ++ /* ignore files starting with # and ending with ~ */ ++ ++ (void) strncpy(fname, dp->d_name, MAXNAMLEN); ++ snprintf(tabname, MAXNAMLEN+1, "/etc/cron.d/%s", fname); ++ ++ process_crontab("root", "*system*", tabname, ++ &crond_stat, &new_db, old_db); ++ } ++ closedir(dir); ++ + /* we used to keep this dir open all the time, for the sake of + * efficiency. however, we need to close it in every fork, and + * we fork a lot more often than the mtime of the dir changes. +@@ -112,8 +146,8 @@ + if (dp->d_name[0] == '.') + continue; + +- (void) strcpy(fname, dp->d_name); +- sprintf(tabname, CRON_TAB(fname)); ++ (void) strncpy(fname, dp->d_name, MAXNAMLEN); ++ snprintf(tabname, MAXNAMLEN+1, CRON_TAB(fname)); + + process_crontab(fname, fname, tabname, + &statbuf, &new_db, old_db); +diff -urN vixie-cron-3.0.1.orig/do_command.c vixie-cron-3.0.1/do_command.c +--- vixie-cron-3.0.1.orig/do_command.c 1995-05-31 16:37:28.000000000 -0500 ++++ vixie-cron-3.0.1/do_command.c 2003-10-17 10:00:45.000000000 -0500 +@@ -86,6 +86,7 @@ + /*local*/{ + register char *pch; + ++ SyslogName = strdup(ProgramName); + for (pch = ProgramName; *pch; pch++) + *pch = MkUpper(*pch); + } +@@ -95,6 +96,21 @@ + usernm = env_get("LOGNAME", e->envp); + mailto = env_get("MAILTO", e->envp); + ++ /* Check for arguments */ ++ if (mailto) { ++ const char *end; ++ ++ /* These chars have to match those cron_popen() ++ * uses to split the command string */ ++ mailto += strspn(mailto, " \t\n"); ++ end = mailto + strcspn(mailto, " \t\n"); ++ if (*mailto == '-' || *end != '\0') { ++ printf("Bad Mailto karma.\n"); ++ log_it("CRON",getpid(),"error","bad mailto"); ++ mailto = NULL; ++ } ++ } ++ + #ifdef USE_SIGCHLD + /* our parent is watching for our death by catching SIGCHLD. we + * do not care to watch for our children's deaths this way -- we +@@ -207,7 +223,7 @@ + * we set uid, we've lost root privledges. + */ + setgid(e->gid); +-# if defined(BSD) ++# if defined(BSD) || defined(linux) + initgroups(env_get("LOGNAME", e->envp), e->gid); + # endif + setuid(e->uid); /* we aren't root after this... */ +@@ -227,6 +243,14 @@ + _exit(OK_EXIT); + } + # endif /*DEBUGGING*/ ++#ifdef USE_SIGCHLD ++ /* Our grandparent is watching for our parent's death by ++ * catching SIGCHLD. Meanwhile, our parent will use wait ++ * explicitly and so has disabled SIGCHLD. So now it's ++ * time to reset SIGCHLD handling. ++ */ ++ (void) signal(SIGCHLD, SIG_DFL); ++#endif + execle(shell, shell, "-c", e->cmd, (char *)0, e->envp); + fprintf(stderr, "execl: couldn't exec `%s'\n", shell); + perror("execl"); +@@ -366,9 +390,9 @@ + auto char hostname[MAXHOSTNAMELEN]; + + (void) gethostname(hostname, MAXHOSTNAMELEN); +- (void) sprintf(mailcmd, MAILARGS, ++ (void) snprintf(mailcmd, MAX_COMMAND, MAILARGS, + MAILCMD, mailto); +- if (!(mail = cron_popen(mailcmd, "w"))) { ++ if (!(mail = cron_popen(mailcmd, "w", e))) { + perror(MAILCMD); + (void) _exit(ERROR_EXIT); + } +@@ -425,7 +449,7 @@ + if (mailto && status) { + char buf[MAX_TEMPSTR]; + +- sprintf(buf, ++ snprintf(buf, MAX_TEMPSTR, + "mailed %d byte%s of output but got status 0x%04x\n", + bytes, (bytes==1)?"":"s", + status); +diff -urN vixie-cron-3.0.1.orig/entry.c vixie-cron-3.0.1/entry.c +--- vixie-cron-3.0.1.orig/entry.c 1995-05-31 16:37:28.000000000 -0500 ++++ vixie-cron-3.0.1/entry.c 2003-10-17 10:00:45.000000000 -0500 +@@ -249,21 +249,21 @@ + */ + e->envp = env_copy(envp); + if (!env_get("SHELL", e->envp)) { +- sprintf(envstr, "SHELL=%s", _PATH_BSHELL); ++ snprintf(envstr, MAX_ENVSTR, "SHELL=%s", _PATH_BSHELL); + e->envp = env_set(e->envp, envstr); + } + if (!env_get("HOME", e->envp)) { +- sprintf(envstr, "HOME=%s", pw->pw_dir); ++ snprintf(envstr, MAX_ENVSTR, "HOME=%s", pw->pw_dir); + e->envp = env_set(e->envp, envstr); + } + if (!env_get("PATH", e->envp)) { +- sprintf(envstr, "PATH=%s", _PATH_DEFPATH); ++ snprintf(envstr, MAX_ENVSTR, "PATH=%s", _PATH_DEFPATH); + e->envp = env_set(e->envp, envstr); + } +- sprintf(envstr, "%s=%s", "LOGNAME", pw->pw_name); ++ snprintf(envstr, MAX_ENVSTR, "%s=%s", "LOGNAME", pw->pw_name); + e->envp = env_set(e->envp, envstr); + #if defined(BSD) +- sprintf(envstr, "%s=%s", "USER", pw->pw_name); ++ snprintf(envstr, MAX_ENVSTR, "%s=%s", "USER", pw->pw_name); + e->envp = env_set(e->envp, envstr); + #endif + +diff -urN vixie-cron-3.0.1.orig/env.c vixie-cron-3.0.1/env.c +--- vixie-cron-3.0.1.orig/env.c 1995-05-31 16:38:25.000000000 -0500 ++++ vixie-cron-3.0.1/env.c 2003-10-17 10:00:45.000000000 -0500 +@@ -115,14 +115,15 @@ + { + long filepos; + int fileline; +- char name[MAX_TEMPSTR], val[MAX_ENVSTR]; ++ char name[MAX_ENVSTR], val[MAX_ENVSTR], *val2; + int fields; + + filepos = ftell(f); + fileline = LineNumber; + skip_comments(f); +- if (EOF == get_string(envstr, MAX_ENVSTR, f, "\n")) ++ if (EOF == get_string(envstr, MAX_ENVSTR - 1, f, "\n")) + return (ERR); ++ envstr[MAX_ENVSTR - 1] = '\0'; + + Debug(DPARS, ("load_env, read <%s>\n", envstr)) + +@@ -141,6 +142,7 @@ + /* + * process value string + */ ++ val2 = val; + /*local*/{ + int len = strdtb(val); + +@@ -148,14 +150,14 @@ + if (val[0] == '\'' || val[0] == '"') { + if (val[len-1] == val[0]) { + val[len-1] = '\0'; +- (void) strcpy(val, val+1); ++ val2 = val + 1; + } + } + } + } + +- (void) sprintf(envstr, "%s=%s", name, val); +- Debug(DPARS, ("load_env, <%s> <%s> -> <%s>\n", name, val, envstr)) ++ (void) snprintf(envstr, MAX_ENVSTR, "%s=%s", name, val2); ++ Debug(DPARS, ("load_env, <%s> <%s> -> <%s>\n", name, val2, envstr)) + return (TRUE); + } + +diff -urN vixie-cron-3.0.1.orig/misc.c vixie-cron-3.0.1/misc.c +--- vixie-cron-3.0.1.orig/misc.c 1995-05-31 16:37:28.000000000 -0500 ++++ vixie-cron-3.0.1/misc.c 2003-10-17 10:00:45.000000000 -0500 +@@ -263,11 +263,11 @@ + char buf[MAX_TEMPSTR]; + int fd, otherpid; + +- (void) sprintf(pidfile, PIDFILE, PIDDIR); ++ (void) snprintf(pidfile, MAX_FNAME, PIDFILE, PIDDIR); + if ((-1 == (fd = open(pidfile, O_RDWR|O_CREAT, 0644))) + || (NULL == (fp = fdopen(fd, "r+"))) + ) { +- sprintf(buf, "can't open or create %s: %s", ++ snprintf(buf, MAX_TEMPSTR, "can't open or create %s: %s", + pidfile, strerror(errno)); + fprintf(stderr, "%s: %s\n", ProgramName, buf); + log_it("CRON", getpid(), "DEATH", buf); +@@ -278,7 +278,7 @@ + int save_errno = errno; + + fscanf(fp, "%d", &otherpid); +- sprintf(buf, "can't lock %s, otherpid may be %d: %s", ++ snprintf(buf, MAX_TEMPSTR, "can't lock %s, otherpid may be %d: %s", + pidfile, otherpid, strerror(save_errno)); + fprintf(stderr, "%s: %s\n", ProgramName, buf); + log_it("CRON", getpid(), "DEATH", buf); +@@ -467,7 +467,7 @@ + TIME_T now = time((TIME_T) 0); + register struct tm *t = localtime(&now); + #endif /*LOG_FILE*/ +- ++ int msg_size; + #if defined(SYSLOG) + static int syslog_open = 0; + #endif +@@ -475,11 +475,14 @@ + #if defined(LOG_FILE) + /* we assume that MAX_TEMPSTR will hold the date, time, &punctuation. + */ +- msg = malloc(strlen(username) +- + strlen(event) +- + strlen(detail) +- + MAX_TEMPSTR); +- ++ msg_size = strlen(username) + strlen(event) + strlen(detail) + MAX_TEMPSTR; ++ msg = malloc(msg_size); ++ if (msg == NULL) { ++ /* damn, out of mem and we did not test that before... */ ++ fprintf(stderr, "%s: Run OUT OF MEMORY while %s\n", ++ ProgramName, __FUNCTION__); ++ return; ++ } + if (LogFD < OK) { + LogFD = open(LOG_FILE, O_WRONLY|O_APPEND|O_CREAT, 0600); + if (LogFD < OK) { +@@ -491,16 +494,16 @@ + } + } + +- /* we have to sprintf() it because fprintf() doesn't always write ++ /* we have to snprintf() it because fprintf() doesn't always write + * everything out in one chunk and this has to be atomically appended + * to the log file. + */ +- sprintf(msg, "%s (%02d/%02d-%02d:%02d:%02d-%d) %s (%s)\n", ++ snprintf(msg, msg_size, "%s (%02d/%02d-%02d:%02d:%02d-%d) %s (%s)\n", + username, + t->tm_mon+1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec, pid, + event, detail); + +- /* we have to run strlen() because sprintf() returns (char*) on old BSD ++ /* we have to run strlen() because snprintf() returns (char*) on old BSD + */ + if (LogFD < OK || write(LogFD, msg, strlen(msg)) < OK) { + if (LogFD >= OK) +@@ -519,9 +522,9 @@ + * print the pid ourselves. + */ + # ifdef LOG_DAEMON +- openlog(ProgramName, LOG_PID, LOG_CRON); ++ openlog(SyslogName, LOG_PID, LOG_CRON); + # else +- openlog(ProgramName, LOG_PID); ++ openlog(SyslogName, LOG_PID); + # endif + syslog_open = TRUE; /* assume openlog success */ + } +@@ -604,8 +607,10 @@ + *dst++ = '^'; + *dst++ = '?'; + } else { /* parity character */ +- sprintf(dst, "\\%03o", ch); +- dst += 4; ++ /* well, the following snprintf is paranoid, but that will ++ * keep grep happy */ ++ snprintf(dst, 5, "\\%03o", ch); ++ dst += 4; + } + } + *dst = '\0'; +@@ -640,7 +645,7 @@ + struct tm *tm = localtime(&t); + static char ret[30]; /* zone name might be >3 chars */ + +- (void) sprintf(ret, "%s, %2d %s %2d %02d:%02d:%02d %s", ++ (void) snprintf(ret, 30, "%s, %2d %s %2d %02d:%02d:%02d %s", + DowNames[tm->tm_wday], + tm->tm_mday, + MonthNames[tm->tm_mon], +diff -urN vixie-cron-3.0.1.orig/pathnames.h vixie-cron-3.0.1/pathnames.h +--- vixie-cron-3.0.1.orig/pathnames.h 1995-05-31 16:37:21.000000000 -0500 ++++ vixie-cron-3.0.1/pathnames.h 2003-10-17 10:00:45.000000000 -0500 +@@ -28,7 +28,7 @@ + * to; SPOOL_DIR, ALLOW_FILE, DENY_FILE, and LOG_FILE + * are all relative to this directory. + */ +-#define CRONDIR "/var/cron" ++#define CRONDIR "/var/spool/cron" + #endif + + /* SPOOLDIR is where the crontabs live. +@@ -39,7 +39,7 @@ + * newer than they were last time around (or which + * didn't exist last time around...) + */ +-#define SPOOL_DIR "tabs" ++#define SPOOL_DIR "crontabs" + + /* undefining these turns off their features. note + * that ALLOW_FILE and DENY_FILE must both be defined +@@ -47,9 +47,9 @@ + * LOG_FILE or SYSLOG is defined, we don't log. If + * both are defined, we log both ways. + */ +-#define ALLOW_FILE "allow" /*-*/ +-#define DENY_FILE "deny" /*-*/ +-#define LOG_FILE "log" /*-*/ ++#define ALLOW_FILE "/etc/cron.allow" /*-*/ ++#define DENY_FILE "/etc/cron.deny" /*-*/ ++/* #define LOG_FILE "/var/log/cron" */ + + /* where should the daemon stick its PID? + */ +diff -urN vixie-cron-3.0.1.orig/popen.c vixie-cron-3.0.1/popen.c +--- vixie-cron-3.0.1.orig/popen.c 1995-05-31 16:37:21.000000000 -0500 ++++ vixie-cron-3.0.1/popen.c 2003-10-17 10:00:45.000000000 -0500 +@@ -43,8 +43,9 @@ + static int fds; + + FILE * +-cron_popen(program, type) ++cron_popen(program, type, e) + char *program, *type; ++ entry *e; + { + register char *cp; + FILE *iop; +@@ -114,6 +115,14 @@ + } + (void)close(pdes[1]); + } ++ /* Lose root privilege */ ++ setgid(e->gid); ++# if defined(BSD) || defined(POSIX) ++ initgroups(env_get("LOGNAME", e->envp), e->gid); ++# endif ++ setuid(e->uid); ++ chdir(env_get("HOME", e->envp)); ++ + #if WANT_GLOBBING + execvp(gargv[0], gargv); + #else diff --git a/sys-apps/vixie-cron/files/vixie-cron-3.0.1-selinux.diff.bz2 b/sys-apps/vixie-cron/files/vixie-cron-3.0.1-selinux.diff.bz2 Binary files differnew file mode 100644 index 000000000000..ad9c644223b0 --- /dev/null +++ b/sys-apps/vixie-cron/files/vixie-cron-3.0.1-selinux.diff.bz2 diff --git a/sys-apps/vixie-cron/files/vixie-cron.rc6 b/sys-apps/vixie-cron/files/vixie-cron.rc6 new file mode 100644 index 000000000000..274de18bea88 --- /dev/null +++ b/sys-apps/vixie-cron/files/vixie-cron.rc6 @@ -0,0 +1,21 @@ +#!/sbin/runscript +# Copyright 1999-2003 Gentoo Technologies, Inc. +# Distributed under the terms of the GNU General Public License, v2 or later +# $Header: /var/cvsroot/gentoo-x86/sys-apps/vixie-cron/files/vixie-cron.rc6,v 1.1 2003/12/11 16:19:36 seemant Exp $ + +depend() { + need clock localmount logger + provide cron +} + +start() { + ebegin "Starting vcron" + start-stop-daemon --start --quiet --exec /usr/sbin/cron + eend $? +} + +stop() { + ebegin "Stopping vcron" + start-stop-daemon --stop --quiet --pidfile /var/run/cron.pid + eend $? +} diff --git a/sys-apps/vixie-cron/metadata.xml b/sys-apps/vixie-cron/metadata.xml new file mode 100644 index 000000000000..96a2d586367d --- /dev/null +++ b/sys-apps/vixie-cron/metadata.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd"> +<pkgmetadata> +<herd>base-system</herd> +</pkgmetadata> diff --git a/sys-apps/vixie-cron/vixie-cron-3.0.1-r1.ebuild b/sys-apps/vixie-cron/vixie-cron-3.0.1-r1.ebuild new file mode 100644 index 000000000000..b44a6762ac96 --- /dev/null +++ b/sys-apps/vixie-cron/vixie-cron-3.0.1-r1.ebuild @@ -0,0 +1,75 @@ +# Copyright 1999-2003 Gentoo Technologies, Inc. +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/sys-apps/vixie-cron/vixie-cron-3.0.1-r1.ebuild,v 1.1 2003/12/11 16:19:36 seemant Exp $ + +inherit eutils + +IUSE="" + +S=${WORKDIR}/${P} +DESCRIPTION="The Vixie cron daemon" +HOMEPAGE="" +SRC_URI="mirror://gentoo/${P}.tar.bz2" + +SLOT="0" +LICENSE="as-is" +KEYWORDS="x86 amd64 ppc sparc alpha arm mips hppa ia64" + +DEPEND=">=sys-apps/portage-2.0.47-r10 + >=sys-apps/sed-4.0.5" + +RDEPEND="!virtual/cron + sys-apps/cronbase + virtual/mta" + +PROVIDE="virtual/cron" + +src_unpack() { + unpack ${A} + cd ${S} + + epatch ${FILESDIR}/${P}-gentoo.patch + + sed -i "s:-O2:${CFLAGS}:" Makefile +} + +src_compile() { + emake || die +} + +src_install() { + #this does not work if the directory exists already + diropts -m0750 -o root -g cron + keepdir /var/spool/cron/crontabs/ + + doman crontab.1 crontab.5 cron.8 + + dodoc CHANGES CONVERSION FEATURES MAIL MANIFEST README THANKS + + diropts -m0755 ; dodir /etc/cron.d + touch ${D}/etc/cron.d/.keep + + exeinto /etc/init.d + newexe ${FILESDIR}/vixie-cron.rc6 vixie-cron + + insinto /etc + doins ${FILESDIR}/crontab + + dodoc ${FILESDIR}/crontab + + insinto /usr/sbin + insopts -o root -g root -m 0750 ; doins cron + + insinto /usr/bin + insopts -o root -g cron -m 4750 ; doins crontab +} + +pkg_postinst() { + + if [ -f ${ROOT}/etc/init.d/vcron ] + then + ewarn "Please run:" + ewarn "rc-update del vcron" + ewarn "rc-update add vixie-cron" + fi +} diff --git a/sys-apps/vixie-cron/vixie-cron-3.0.1-r3.ebuild b/sys-apps/vixie-cron/vixie-cron-3.0.1-r3.ebuild new file mode 100644 index 000000000000..6a6a0628c404 --- /dev/null +++ b/sys-apps/vixie-cron/vixie-cron-3.0.1-r3.ebuild @@ -0,0 +1,84 @@ +# Copyright 1999-2003 Gentoo Technologies, Inc. +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/sys-apps/vixie-cron/vixie-cron-3.0.1-r3.ebuild,v 1.1 2003/12/11 16:19:36 seemant Exp $ + +inherit eutils + +IUSE="selinux" + +SELINUX_PATCH="${P}-selinux.diff.bz2" + +S=${WORKDIR}/${P} +DESCRIPTION="The Vixie cron daemon" +HOMEPAGE="" +SRC_URI="mirror://gentoo/${P}.tar.bz2" + +SLOT="0" +LICENSE="as-is" +KEYWORDS="x86 ~amd64 ppc sparc ~alpha ~arm ~mips ~hppa ~ia64" + +DEPEND=">=sys-apps/portage-2.0.47-r10 + >=sys-apps/sed-4.0.5 + selinux? ( sys-libs/libselinux )" + +RDEPEND="!virtual/cron + sys-apps/cronbase + virtual/mta + selinux? ( sys-libs/libselinux )" + +PROVIDE="virtual/cron" + +src_unpack() { + unpack ${A} + + cd ${S} + + epatch ${FILESDIR}/${P}-gentoo.patch + epatch ${FILESDIR}/${P}-close_stdin.diff + + use selinux && epatch ${FILESDIR}/${SELINUX_PATCH} + + sed -i "s:-O2:${CFLAGS}:" Makefile +} + +src_compile() { + emake || die +} + +src_install() { + #this does not work if the directory exists already + diropts -m0750 -o root -g cron + dodir /var/spool/cron/crontabs + keepdir /var/spool/cron/crontabs/ + + doman crontab.1 crontab.5 cron.8 + + dodoc CHANGES CONVERSION FEATURES MAIL MANIFEST README THANKS + + diropts -m0755 ; dodir /etc/cron.d + touch ${D}/etc/cron.d/.keep + + exeinto /etc/init.d + newexe ${FILESDIR}/vixie-cron.rc6 vixie-cron + + insinto /etc + doins ${FILESDIR}/crontab + + dodoc ${FILESDIR}/crontab + + insinto /usr/sbin + insopts -o root -g root -m 0750 ; doins cron + + insinto /usr/bin + insopts -o root -g cron -m 4750 ; doins crontab +} + +pkg_postinst() { + + if [ -f ${ROOT}/etc/init.d/vcron ] + then + ewarn "Please run:" + ewarn "rc-update del vcron" + ewarn "rc-update add vixie-cron" + fi +} diff --git a/sys-apps/vixie-cron/vixie-cron-3.0.1-r4.ebuild b/sys-apps/vixie-cron/vixie-cron-3.0.1-r4.ebuild new file mode 100644 index 000000000000..86a4c0c0e784 --- /dev/null +++ b/sys-apps/vixie-cron/vixie-cron-3.0.1-r4.ebuild @@ -0,0 +1,86 @@ +# Copyright 1999-2003 Gentoo Technologies, Inc. +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/sys-apps/vixie-cron/vixie-cron-3.0.1-r4.ebuild,v 1.1 2003/12/11 16:19:36 seemant Exp $ + +inherit eutils + +IUSE="selinux" + +SELINUX_PATCH="${P}-selinux.diff.bz2" + +S=${WORKDIR}/${P} +DESCRIPTION="The Vixie cron daemon" +HOMEPAGE="" +SRC_URI="mirror://gentoo/${P}.tar.bz2" + +SLOT="0" +LICENSE="as-is" +KEYWORDS="~x86 ~amd64 ~ppc ~sparc ~alpha ~arm ~mips ~hppa ~ia64" + +DEPEND=">=sys-apps/portage-2.0.47-r10 + >=sys-apps/sed-4.0.5 + selinux? ( sys-libs/libselinux )" + +RDEPEND="!virtual/cron + >=sys-apps/cronbase-0.2.1-r3 + virtual/mta + selinux? ( sys-libs/libselinux )" + +PROVIDE="virtual/cron" + +src_unpack() { + unpack ${A} + + cd ${S} + + epatch ${FILESDIR}/${P}-gentoo.patch + epatch ${FILESDIR}/${P}-close_stdin.diff + + use selinux && epatch ${FILESDIR}/${SELINUX_PATCH} + + sed -i "s:-O2:${CFLAGS}:" Makefile +} + +src_compile() { + emake || die +} + +src_install() { + #this does not work if the directory exists already + diropts -m0750 -o root -g cron + dodir /var/spool/cron/crontabs + keepdir /var/spool/cron/crontabs/ + + doman crontab.1 crontab.5 cron.8 + + dodoc CHANGES CONVERSION FEATURES MAIL MANIFEST README THANKS + + diropts -m0755 ; dodir /etc/cron.d + keepdir /etc/cron.d/ + + exeinto /etc/init.d + newexe ${FILESDIR}/vixie-cron.rc6 vixie-cron + + insinto /etc + insopts -o root -g root -m 0644 + newins ${FILESDIR}/crontab-3.0.1-r4 crontab + + dodoc ${FILESDIR}/crontab + + insinto /usr/sbin + insopts -o root -g root -m 0750 ; doins cron + + insinto /usr/bin + insopts -o root -g cron -m 4750 ; doins crontab +} + +pkg_postinst() { + + if [ -f ${ROOT}/etc/init.d/vcron ] + then + ewarn "Please run:" + ewarn "rc-update del vcron" + ewarn "rc-update add vixie-cron" + fi +} + |