cvs commit: patches/vixie-cron vixie-cron-3.0.1-makefile-1.patch vixie-cron-3.0.1-redhat-mdk-1.patch vixie-cron-3.0.1-security-1.patch vixie-cron-3.0.1-variables-1.patch

jim at linuxfromscratch.org jim at linuxfromscratch.org
Wed Sep 17 19:05:40 PDT 2003


jim         03/09/17 20:05:39

  Added:       vixie-cron vixie-cron-3.0.1-makefile-1.patch
                        vixie-cron-3.0.1-redhat-mdk-1.patch
                        vixie-cron-3.0.1-security-1.patch
                        vixie-cron-3.0.1-variables-1.patch
  Log:
  Added vixie-cron 3.0.1 patches
  
  Revision  Changes    Path
  1.1                  patches/vixie-cron/vixie-cron-3.0.1-makefile-1.patch
  
  Index: vixie-cron-3.0.1-makefile-1.patch
  ===================================================================
  Submitted By: Jim Gifford (patches at jg555 dot com)
  Date: 2003-09-16
  Initial Package Version: 3.0.1
  Origin: Jim Gifford
  Description: Fixes Makefile
  	     Clean-up formatting a little bit
  	     Creates /var/spool/cron directory
  	     Creates /etc/cron.d directory
   
  diff -Naur vixie-cron-3.0.1.orig/Makefile vixie-cron-3.0.1/Makefile
  --- vixie-cron-3.0.1.orig/Makefile	2003-09-17 02:42:15.000000000 +0000
  +++ vixie-cron-3.0.1/Makefile	2003-09-17 03:01:47.000000000 +0000
  @@ -57,7 +57,7 @@
   #<<need getopt()>>
   LIBS		=
   #<<optimize or debug?>>
  -OPTIM		=	$(RPM_OPT_FLAGS)
  +OPTIM		=	
   #OPTIM		=	-g
   #<<ATT or BSD or POSIX?>>
   # (ATT untested)
  @@ -71,14 +71,14 @@
   #<<want to use a nonstandard CC?>>
   #CC		=	vcc
   #<<manifest defines>>
  -DEFS		= -s
  +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		= -s
  +LDFLAGS		= 	-s
   #################################### end configurable stuff
   
   SHELL		=	/bin/sh
  @@ -113,6 +113,8 @@
   			$(CC) $(LDFLAGS) -o crontab $(CRONTAB_OBJ) $(LIBS)
   
   install		:	all
  +			$(INSTALL) -d /var/spool/cron -m 700
  +			$(INSTALL) -d /etc/cron.d -m 755
   			$(INSTALL) -c -m 755 cron    $(DESTSBIN)/crond
   			$(INSTALL) -c -m 4755 crontab $(DESTBIN)/
   			sh putman.sh crontab.1 $(DESTMAN)
  
  
  
  1.1                  patches/vixie-cron/vixie-cron-3.0.1-redhat-mdk-1.patch
  
  Index: vixie-cron-3.0.1-redhat-mdk-1.patch
  ===================================================================
  Submitted By: Jim Gifford (patches at jg555 dot com)
  Date: 2003-09-16
  Initial Package Version: 3.0.1
  Origin: Mandrake SPECS CVS 
  Description: Setup cron for Redhat and Mandrake systems.
  
  You can go to http://cvs.mandrakesoft.com/cgi-bin/cvsweb.cgi/%7echeckout%7e/SPECS/vixie-cron
  to get information on the specific patches.
  
  diff -Naur vixie-cron-3.0.1.orig/Makefile vixie-cron-3.0.1/Makefile
  --- vixie-cron-3.0.1.orig/Makefile	1995-05-31 21:37:20.000000000 +0000
  +++ vixie-cron-3.0.1/Makefile	2003-09-16 16:14:17.000000000 +0000
  @@ -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		=	$(RPM_OPT_FLAGS)
  +#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,19 @@
   			$(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)/crond
  +			$(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
  +			rm -f $(DESTMAN)/man8/crond.8
  +			ln -sf cron.8 $(DESTMAN)/man8/crond.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 -Naur 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 21:37:20.000000000 +0000
  +++ vixie-cron-3.0.1/config.h	2003-09-16 16:14:17.000000000 +0000
  @@ -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
   
   			/*
  @@ -83,4 +83,4 @@
   			 * are both defined, then logging will go to both
   			 * places.
   			 */
  -#define SYSLOG	 			/*-*/
  +/*#define SYSLOG	 			/*-*/
  diff -Naur 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 21:37:20.000000000 +0000
  +++ vixie-cron-3.0.1/cron.8	2003-09-16 16:14:17.000000000 +0000
  @@ -29,7 +29,7 @@
   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 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
  diff -Naur 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 21:37:21.000000000 +0000
  +++ vixie-cron-3.0.1/crontab.1	2003-09-16 16:14:17.000000000 +0000
  @@ -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 -Naur 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 21:37:21.000000000 +0000
  +++ vixie-cron-3.0.1/pathnames.h	2003-09-16 16:14:17.000000000 +0000
  @@ -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"
   #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	"cron"
   
   			/* 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?
   			 */
  @@ -58,7 +58,7 @@
   #else
   # define PIDDIR "/etc/"
   #endif
  -#define PIDFILE		"%scron.pid"
  +#define PIDFILE		"%scrond.pid"
   
   			/* 4.3BSD-style crontab */
   #define SYSCRONTAB	"/etc/crontab"
  
  
  
  1.1                  patches/vixie-cron/vixie-cron-3.0.1-security-1.patch
  
  Index: vixie-cron-3.0.1-security-1.patch
  ===================================================================
  Submitted By: Jim Gifford (patches at jg555 dot com)
  Date: 2003-09-16
  Initial Package Version: 3.0.1
  Origin: Mandrake Spec CVS
  Description: Fixes Security Problems and Updates to Compile with gcc 3
  
  You can go to http://cvs.mandrakesoft.com/cgi-bin/cvsweb.cgi/%7echeckout%7e/SPECS/vixie-cron
  to get information on the specific patches.
  
  diff -Naur vixie-cron-3.0.1.orig/FEATURES vixie-cron-3.0.1/FEATURES
  --- vixie-cron-3.0.1.orig/FEATURES	1995-05-31 21:38:25.000000000 +0000
  +++ vixie-cron-3.0.1/FEATURES	2003-09-16 17:21:12.000000000 +0000
  @@ -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 -Naur 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 21:37:20.000000000 +0000
  +++ vixie-cron-3.0.1/compat.c	2003-09-16 17:21:12.000000000 +0000
  @@ -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 -Naur 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 21:37:20.000000000 +0000
  +++ vixie-cron-3.0.1/compat.h	2003-09-16 17:21:12.000000000 +0000
  @@ -62,7 +62,7 @@
   #endif
   
   #ifndef POSIX
  -# if (BSD >= 199103) || defined(__linux) || defined(ultrix) || defined(AIX) ||\
  +# if (BSD >= 199103) || defined(__linux__) || defined(ultrix) || defined(AIX) ||\
   	defined(HPUX) || defined(CONVEX) || defined(IRIX)
   #  define POSIX
   # endif
  @@ -76,16 +76,16 @@
   
   /*****************************************************************/
   
  -#if !defined(BSD) && !defined(HPUX) && !defined(CONVEX) && !defined(__linux)
  +#if !defined(BSD) && !defined(HPUX) && !defined(CONVEX) && !defined(__linux__)
   # define NEED_VFORK
   #endif
   
  -#if (!defined(BSD) || (BSD < 198902)) && !defined(__linux) && \
  +#if (!defined(BSD) || (BSD < 198902)) && !defined(__linux__) && \
   	!defined(IRIX) && !defined(NeXT) && !defined(HPUX)
   # define NEED_STRCASECMP
   #endif
   
  -#if (!defined(BSD) || (BSD < 198911)) && !defined(__linux) &&\
  +#if (!defined(BSD) || (BSD < 198911)) && !defined(__linux__) &&\
   	!defined(IRIX) && !defined(UNICOS) && !defined(HPUX)
   # define NEED_STRDUP
   #endif
  @@ -102,7 +102,7 @@
   # define NEED_SETSID
   #endif
   
  -#if (defined(POSIX) && !defined(BSD)) && !defined(__linux)
  +#if (defined(POSIX) && !defined(BSD)) && !defined(__linux__)
   # define NEED_GETDTABLESIZE
   #endif
   
  @@ -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 -Naur vixie-cron-3.0.1.orig/config.h vixie-cron-3.0.1/config.h
  --- vixie-cron-3.0.1.orig/config.h	2003-09-16 17:20:48.000000000 +0000
  +++ vixie-cron-3.0.1/config.h	2003-09-16 17:21:12.000000000 +0000
  @@ -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 -Naur vixie-cron-3.0.1.orig/cron.8 vixie-cron-3.0.1/cron.8
  --- vixie-cron-3.0.1.orig/cron.8	2003-09-16 17:20:48.000000000 +0000
  +++ vixie-cron-3.0.1/cron.8	2003-09-16 17:21:12.000000000 +0000
  @@ -32,7 +32,8 @@
   searches /var/spool/cron 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 -Naur 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 21:37:20.000000000 +0000
  +++ vixie-cron-3.0.1/cron.c	2003-09-16 17:21:12.000000000 +0000
  @@ -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 at 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 at 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 -Naur 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 21:37:21.000000000 +0000
  +++ vixie-cron-3.0.1/cron.h	2003-09-16 17:21:12.000000000 +0000
  @@ -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 -Naur 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 21:38:25.000000000 +0000
  +++ vixie-cron-3.0.1/crontab.5	2003-09-16 17:21:12.000000000 +0000
  @@ -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 -Naur 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 21:38:25.000000000 +0000
  +++ vixie-cron-3.0.1/crontab.c	2003-09-16 17:21:12.000000000 +0000
  @@ -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 -Naur 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 21:37:21.000000000 +0000
  +++ vixie-cron-3.0.1/database.c	2003-09-16 17:21:12.000000000 +0000
  @@ -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 -Naur 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 21:37:28.000000000 +0000
  +++ vixie-cron-3.0.1/do_command.c	2003-09-16 17:21:12.000000000 +0000
  @@ -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 -Naur 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 21:37:28.000000000 +0000
  +++ vixie-cron-3.0.1/entry.c	2003-09-16 17:21:12.000000000 +0000
  @@ -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 -Naur 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 21:38:25.000000000 +0000
  +++ vixie-cron-3.0.1/env.c	2003-09-16 17:21:12.000000000 +0000
  @@ -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 -Naur 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 21:37:28.000000000 +0000
  +++ vixie-cron-3.0.1/misc.c	2003-09-16 17:21:12.000000000 +0000
  @@ -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 -Naur vixie-cron-3.0.1.orig/pathnames.h vixie-cron-3.0.1/pathnames.h
  --- vixie-cron-3.0.1.orig/pathnames.h	2003-09-16 17:20:48.000000000 +0000
  +++ vixie-cron-3.0.1/pathnames.h	2003-09-16 17:21:12.000000000 +0000
  @@ -49,7 +49,7 @@
   			 */
   #define	ALLOW_FILE	"/etc/cron.allow"		/*-*/
   #define DENY_FILE	"/etc/cron.deny"		/*-*/
  -#define LOG_FILE	"/var/log/cron"		/*-*/
  +/* #define LOG_FILE	"/var/log/cron"		*/
   
   			/* where should the daemon stick its PID?
   			 */
  diff -Naur 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 21:37:21.000000000 +0000
  +++ vixie-cron-3.0.1/popen.c	2003-09-16 17:21:13.000000000 +0000
  @@ -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
  
  
  
  1.1                  patches/vixie-cron/vixie-cron-3.0.1-variables-1.patch
  
  Index: vixie-cron-3.0.1-variables-1.patch
  ===================================================================
  Submitted By: Jim Gifford (patches at jg555 dot com)
  Date: 2003-09-16
  Initial Package Version: 3.0.1
  Origin: Jim Gifford
  Description: Added Variable and cleanup
  
  	     Made the variables follow the same format.
  	     Added variable for cron.d location
   
  diff -Naur vixie-cron-3.0.1.orig/CONVERSION vixie-cron-3.0.1/CONVERSION
  --- vixie-cron-3.0.1.orig/CONVERSION	1995-05-31 21:37:19.000000000 +0000
  +++ vixie-cron-3.0.1/CONVERSION	2003-09-17 06:48:57.000000000 +0000
  @@ -24,11 +24,11 @@
   
   I say `how about' and `perhaps' because it really doesn't matter to anyone
   (except you) where you put the crontab source files.  The `crontab' command
  -COPIES them into a protected directory (CRONDIR/SPOOL_DIR in cron.h), named
  +COPIES them into a protected directory (CRON_DIR/SPOOL_DIR in cron.h), named
   after the user whose crontab it is.  If you want to examine, replace, or
   delete a crontab, the `crontab' command does all of those things.  The
   various `crontab.src' (my suggested name for them) files are just source
  -files---they have to be copied to SPOOLDIR using `crontab' before they'll be
  +files---they have to be copied to SPOOL_DIR using `crontab' before they'll be
   executed.
   
   On 4.2, your crontab might have a few lines like this:
  diff -Naur vixie-cron-3.0.1.orig/config.h vixie-cron-3.0.1/config.h
  --- vixie-cron-3.0.1.orig/config.h	2003-09-17 06:33:52.000000000 +0000
  +++ vixie-cron-3.0.1/config.h	2003-09-17 06:50:14.000000000 +0000
  @@ -59,7 +59,7 @@
   /* #define MAILCMD "/usr/mmdf/bin/submit"	/*-*/
   /* #define MAILARGS "%s -mlrxto %s"		/*-*/
   
  -/* #define MAIL_DATE				/*-*/
  +/* #define MAILDATE				/*-*/
   			/* should we include an ersatz Date: header in
   			 * generated mail?  if you are using sendmail
   			 * for MAILCMD, it is better to let sendmail
  @@ -73,7 +73,7 @@
   /*#define ALLOW_ONLY_ROOT			/*-*/
   
   			/* if you want to use syslog(3) instead of appending
  -			 * to CRONDIR/LOG_FILE (/var/cron/log, e.g.), define
  +			 * to CRON_DIR/LOG_FILE (/var/cron/log, e.g.), define
   			 * SYSLOG here.  Note that quite a bit of logging
   			 * info is written, and that you probably don't want
   			 * to use this on 4.2bsd since everything goes in
  diff -Naur vixie-cron-3.0.1.orig/cron.h vixie-cron-3.0.1/cron.h
  --- vixie-cron-3.0.1.orig/cron.h	2003-09-17 06:33:52.000000000 +0000
  +++ vixie-cron-3.0.1/cron.h	2003-09-17 06:56:38.000000000 +0000
  @@ -85,6 +85,7 @@
   #define	DBIT		0x0080	/* bit twiddling shown (long) */
   
   #define	CRON_TAB(u)	"%s/%s", SPOOL_DIR, u
  +#define	CRON_DTAB(u)	"%s/%s", CROND_DIR, u
   #define	REG		register
   #define	PPC_NULL	((char **)NULL)
   
  diff -Naur vixie-cron-3.0.1.orig/database.c vixie-cron-3.0.1/database.c
  --- vixie-cron-3.0.1.orig/database.c	2003-09-17 06:33:52.000000000 +0000
  +++ vixie-cron-3.0.1/database.c	2003-09-17 06:09:41.000000000 +0000
  @@ -60,7 +60,7 @@
   		(void) exit(ERROR_EXIT);
   	}
   
  -	if (stat("/etc/cron.d", &crond_stat) < OK) {
  +	if (stat(CROND_DIR, &crond_stat) < OK) {
   		log_it("CRON", getpid(), "STAT FAILED", SPOOL_DIR);
   		(void) exit(ERROR_EXIT);
   	}
  @@ -99,8 +99,8 @@
   				&new_db, old_db);
   	}
   
  -	if (!(dir = opendir("/etc/cron.d"))) {
  -		log_it("CRON", getpid(), "OPENDIR FAILED", "/etc/cron.d");
  +	if (!(dir = opendir(CROND_DIR))) {
  +		log_it("CRON", getpid(), "OPENDIR FAILED", CROND_DIR);
   		(void) exit(ERROR_EXIT);
   	}
   
  @@ -118,7 +118,7 @@
   		/* ignore files starting with # and ending with ~ */
   
   		(void) strncpy(fname, dp->d_name, MAXNAMLEN);
  -		snprintf(tabname, MAXNAMLEN+1, "/etc/cron.d/%s", fname);
  +		snprintf(tabname, MAXNAMLEN+1, CRON_DTAB(fname));
   
   		process_crontab("root", "*system*", tabname,
   				&crond_stat, &new_db, old_db);
  diff -Naur 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	2003-09-17 06:33:52.000000000 +0000
  +++ vixie-cron-3.0.1/do_command.c	2003-09-17 06:44:32.000000000 +0000
  @@ -401,10 +401,10 @@
   				fprintf(mail, "Subject: Cron <%s@%s> %s\n",
   					usernm, first_word(hostname, "."),
   					e->cmd);
  -# if defined(MAIL_DATE)
  +# if defined(MAILDATE)
   				fprintf(mail, "Date: %s\n",
   					arpadate(&TargetTime));
  -# endif /* MAIL_DATE */
  +# endif /* MAILDATE */
   				for (env = e->envp;  *env;  env++)
   					fprintf(mail, "X-Cron-Env: <%s>\n",
   						*env);
  diff -Naur vixie-cron-3.0.1.orig/misc.c vixie-cron-3.0.1/misc.c
  --- vixie-cron-3.0.1.orig/misc.c	2003-09-17 06:33:52.000000000 +0000
  +++ vixie-cron-3.0.1/misc.c	2003-09-17 06:53:41.000000000 +0000
  @@ -192,31 +192,31 @@
   {
   	struct stat	sb;
   
  -	/* first check for CRONDIR ("/var/cron" or some such)
  +	/* first check for CRON_DIR ("/var/cron" or some such)
   	 */
  -	if (stat(CRONDIR, &sb) < OK && errno == ENOENT) {
  -		perror(CRONDIR);
  -		if (OK == mkdir(CRONDIR, 0700)) {
  -			fprintf(stderr, "%s: created\n", CRONDIR);
  -			stat(CRONDIR, &sb);
  +	if (stat(CRON_DIR, &sb) < OK && errno == ENOENT) {
  +		perror(CRON_DIR);
  +		if (OK == mkdir(CRON_DIR, 0700)) {
  +			fprintf(stderr, "%s: created\n", CRON_DIR);
  +			stat(CRON_DIR, &sb);
   		} else {
  -			fprintf(stderr, "%s: ", CRONDIR);
  +			fprintf(stderr, "%s: ", CRON_DIR);
   			perror("mkdir");
   			exit(ERROR_EXIT);
   		}
   	}
   	if (!(sb.st_mode & S_IFDIR)) {
   		fprintf(stderr, "'%s' is not a directory, bailing out.\n",
  -			CRONDIR);
  +			CRON_DIR);
   		exit(ERROR_EXIT);
   	}
  -	if (chdir(CRONDIR) < OK) {
  -		fprintf(stderr, "cannot chdir(%s), bailing out.\n", CRONDIR);
  -		perror(CRONDIR);
  +	if (chdir(CRON_DIR) < OK) {
  +		fprintf(stderr, "cannot chdir(%s), bailing out.\n", CRON_DIR);
  +		perror(CRON_DIR);
   		exit(ERROR_EXIT);
   	}
   
  -	/* CRONDIR okay (now==CWD), now look at SPOOL_DIR ("tabs" or some such)
  +	/* CRON_DIR okay (now==CWD), now look at SPOOL_DIR ("tabs" or some such)
   	 */
   	if (stat(SPOOL_DIR, &sb) < OK && errno == ENOENT) {
   		perror(SPOOL_DIR);
  @@ -242,7 +242,7 @@
    *
    * note: main() calls us twice; once before forking, once after.
    *	we maintain static storage of the file pointer so that we
  - *	can rewrite our PID into the PIDFILE after the fork.
  + *	can rewrite our PID into the PID_FILE after the fork.
    *
    * it would be great if fflush() disassociated the file buffer.
    */
  @@ -263,7 +263,7 @@
   		char	buf[MAX_TEMPSTR];
   		int	fd, otherpid;
   
  -		(void) snprintf(pidfile, MAX_FNAME, PIDFILE, PIDDIR);
  +		(void) snprintf(pidfile, MAX_FNAME, PID_FILE, PID_DIR);
   		if ((-1 == (fd = open(pidfile, O_RDWR|O_CREAT, 0644)))
   		    || (NULL == (fp = fdopen(fd, "r+")))
   		    ) {
  @@ -633,7 +633,7 @@
   }
   
   
  -#ifdef MAIL_DATE
  +#ifdef MAILDATE
   /* Sat, 27 Feb 93 11:44:51 CST
    * 123456789012345678901234567
    */
  @@ -656,7 +656,7 @@
   		       TZONE(*tm));
   	return ret;
   }
  -#endif /*MAIL_DATE*/
  +#endif /*MAILDATE*/
   
   
   #ifdef HAVE_SAVED_SUIDS
  diff -Naur vixie-cron-3.0.1.orig/pathnames.h vixie-cron-3.0.1/pathnames.h
  --- vixie-cron-3.0.1.orig/pathnames.h	2003-09-17 06:33:52.000000000 +0000
  +++ vixie-cron-3.0.1/pathnames.h	2003-09-17 06:58:32.000000000 +0000
  @@ -23,12 +23,12 @@
   # include <paths.h>
   #endif /*BSD*/
   
  -#ifndef CRONDIR
  -			/* CRONDIR is where crond(8) and crontab(1) both chdir
  +#ifndef CRON_DIR
  +			/* CRON_DIR is where crond(8) and crontab(1) both chdir
   			 * to; SPOOL_DIR, ALLOW_FILE, DENY_FILE, and LOG_FILE
   			 * are all relative to this directory.
   			 */
  -#define CRONDIR		"/var/spool"
  +#define CRON_DIR	"/var/spool"
   #endif
   
   			/* SPOOLDIR is where the crontabs live.
  @@ -41,6 +41,13 @@
   			 */
   #define SPOOL_DIR	"cron"
   
  +			/* CROND_DIR is where a directory similar to SPOOL_DIR.
  +		           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)
  +			*/
  +#define CROND_DIR	"/etc/cron.d"
  +
   			/* undefining these turns off their features.  note
   			 * that ALLOW_FILE and DENY_FILE must both be defined
   			 * in order to enable the allow/deny code.  If neither
  @@ -54,11 +61,11 @@
   			/* where should the daemon stick its PID?
   			 */
   #ifdef _PATH_VARRUN
  -# define PIDDIR	_PATH_VARRUN
  +# define PID_DIR _PATH_VARRUN
   #else
  -# define PIDDIR "/etc/"
  +# define PID_DIR "/etc/"
   #endif
  -#define PIDFILE		"%scrond.pid"
  +#define PID_FILE	"%scrond.pid"
   
   			/* 4.3BSD-style crontab */
   #define SYSCRONTAB	"/etc/crontab"
  
  
  



More information about the patches mailing list