Fixes for crontab and crond
authorAdam Glass <glass@postgres.berkeley.edu>
Tue, 6 Apr 1993 00:00:00 +0000 (00:00 +0000)
committerAdam Glass <glass@postgres.berkeley.edu>
Tue, 6 Apr 1993 00:00:00 +0000 (00:00 +0000)
/usr/src/libexec/crond fixed such that it compiles quitely, many
type casts cleaned up and/or added.

/usr/usr/usr.bin/crontab fixed such that it compiles quitely, installs
with the correct permissions, installs both manual pages,

Updated crontab.386bsd to be a pseudo model crontab much more suited
to 386bsd.

AUTHOR: Adam Glass (glass@postgres.berkeley.edu)
386BSD-Patchkit: patch00131

usr/src/libexec/crond/crond.c
usr/src/libexec/crond/do_command.c
usr/src/libexec/crond/env.c
usr/src/libexec/crond/misc.c
usr/src/libexec/crond/user.c
usr/src/usr.bin/crontab/Makefile
usr/src/usr.bin/crontab/crontab.386bsd
usr/src/usr.bin/crontab/crontab.5 [deleted file]
usr/src/usr.bin/crontab/crontab.5.5 [new file with mode: 0644]
usr/src/usr.bin/crontab/crontab.c

index 971c0fa..c9f9059 100644 (file)
@@ -18,6 +18,14 @@ static char rcsid[] = "$Header: /home/local/site/cron2.1/orig/RCS/crond.c,v 2.2
  * I'll try to keep a version up to date.  I can be reached as follows:
  * Paul Vixie, 329 Noe Street, San Francisco, CA, 94114, (415) 864-7013,
  * paul@vixie.sf.ca.us || {hoptoad,pacbell,decwrl,crash}!vixie!paul
  * I'll try to keep a version up to date.  I can be reached as follows:
  * Paul Vixie, 329 Noe Street, San Francisco, CA, 94114, (415) 864-7013,
  * paul@vixie.sf.ca.us || {hoptoad,pacbell,decwrl,crash}!vixie!paul
+ *
+ * PATCHES MAGIC                LEVEL   PATCH THAT GOT US HERE
+ * --------------------         -----   ----------------------
+ * CURRENT PATCH LEVEL:         1       00131
+ * --------------------         -----   ----------------------
+ *
+ * 06 Apr 93   Adam Glass      Fixes so it compiles quitely
+ *
  */
 
 
  */
 
 
@@ -262,7 +270,7 @@ sigchld_handler()
 
        for (;;)
        {
 
        for (;;)
        {
-               pid = wait3(&waiter, WNOHANG, (struct rusage *)0);
+               pid = wait3((int *) &waiter, WNOHANG, (struct rusage *)0);
                switch (pid)
                {
                case -1:
                switch (pid)
                {
                case -1:
index 62b3eeb..e5e7f08 100644 (file)
@@ -29,6 +29,14 @@ static char rcsid[] = "$Header: do_command.c,v 2.1 90/07/18 00:23:38 vixie Exp $
  * 
  * Revision 1.1  87/01/26  23:47:00  paul
  * Initial revision
  * 
  * Revision 1.1  87/01/26  23:47:00  paul
  * Initial revision
+ *
+ * PATCHES MAGIC                LEVEL   PATCH THAT GOT US HERE
+ * --------------------         -----   ----------------------
+ * CURRENT PATCH LEVEL:         1       00131
+ * --------------------         -----   ----------------------
+ *
+ * 06 Apr 93   Adam Glass      Fixes so it compiles quitely
+ *
  */
 
 /* Copyright 1988,1990 by Paul Vixie
  */
 
 /* Copyright 1988,1990 by Paul Vixie
@@ -97,7 +105,7 @@ do_command(cmd, u)
 }
 
 
 }
 
 
-static void
+void
 child_process(cmd, u)
        char    *cmd;
        user    *u;
 child_process(cmd, u)
        char    *cmd;
        user    *u;
@@ -424,7 +432,7 @@ child_process(cmd, u)
                        if (mailto)
                        {
                                extern FILE     *popen();
                        if (mailto)
                        {
                                extern FILE     *popen();
-                               extern char     *sprintf(), *print_cmd();
+                               extern char     *print_cmd();
                                register char   **env;
                                auto char       mailcmd[MAX_COMMAND];
                                auto char       hostname[MAXHOSTNAMELEN];
                                register char   **env;
                                auto char       mailcmd[MAX_COMMAND];
                                auto char       hostname[MAXHOSTNAMELEN];
@@ -513,7 +521,7 @@ child_process(cmd, u)
 
                Debug(DPROC, ("[%d] waiting for grandchild #%d to finish\n",
                        getpid(), children))
 
                Debug(DPROC, ("[%d] waiting for grandchild #%d to finish\n",
                        getpid(), children))
-               pid = wait(&waiter);
+               pid = wait((int *) &waiter);
                if (pid < OK) {
                        Debug(DPROC, ("[%d] no more grandchildren--mail written?\n",
                                getpid()))
                if (pid < OK) {
                        Debug(DPROC, ("[%d] no more grandchildren--mail written?\n",
                                getpid()))
index 01199db..bb9a0c6 100644 (file)
@@ -18,6 +18,14 @@ static char rcsid[] = "$Header: env.c,v 2.2 90/07/18 00:23:48 vixie Exp $";
  * I'll try to keep a version up to date.  I can be reached as follows:
  * Paul Vixie, 329 Noe Street, San Francisco, CA, 94114, (415) 864-7013,
  * paul@vixie.sf.ca.us || {hoptoad,pacbell,decwrl,crash}!vixie!paul
  * I'll try to keep a version up to date.  I can be reached as follows:
  * Paul Vixie, 329 Noe Street, San Francisco, CA, 94114, (415) 864-7013,
  * paul@vixie.sf.ca.us || {hoptoad,pacbell,decwrl,crash}!vixie!paul
+ *
+ * PATCHES MAGIC                LEVEL   PATCH THAT GOT US HERE
+ * --------------------         -----   ----------------------
+ * CURRENT PATCH LEVEL:         1       00131
+ * --------------------         -----   ----------------------
+ *
+ * 06 Apr 93   Adam Glass      Fixes so it compiles quitely
+ *
  */
 
 
  */
 
 
@@ -92,7 +100,6 @@ load_env(envstr, f)
         *              FALSE = not an env setting (file was repositioned)
         *              TRUE = was an env setting
         */
         *              FALSE = not an env setting (file was repositioned)
         *              TRUE = was an env setting
         */
-       char    *strcpy(), *sprintf();
        long    filepos;
        int     fileline;
        char    name[MAX_TEMPSTR], val[MAX_ENVSTR];
        long    filepos;
        int     fileline;
        char    name[MAX_TEMPSTR], val[MAX_ENVSTR];
index 46b5d14..d906f87 100644 (file)
@@ -5,6 +5,14 @@ static char rcsid[] = "$Header: misc.c,v 2.1 90/07/18 00:24:33 vixie Exp $";
 /* vix 26jan87 [RCS has the rest of the log]
  * vix 15jan87 [added TIOCNOTTY, thanks csg@pyramid]
  * vix 30dec86 [written]
 /* vix 26jan87 [RCS has the rest of the log]
  * vix 15jan87 [added TIOCNOTTY, thanks csg@pyramid]
  * vix 30dec86 [written]
+ *
+ * PATCHES MAGIC                LEVEL   PATCH THAT GOT US HERE
+ * --------------------         -----   ----------------------
+ * CURRENT PATCH LEVEL:         1       00131
+ * --------------------         -----   ----------------------
+ *
+ * 06 Apr 93   Adam Glass      Fixes so it compiles quitely
+ *
  */
 
 /* Copyright 1988,1990 by Paul Vixie
  */
 
 /* Copyright 1988,1990 by Paul Vixie
@@ -286,7 +294,6 @@ be_different()
         *  do an IOCTL to void tty association
         */
 
         *  do an IOCTL to void tty association
         */
 
-       extern int      getpid(), setpgrp(), open(), ioctl(), close();
        auto int        fd;
 
        (void) setpgrp(0, getpid());
        auto int        fd;
 
        (void) setpgrp(0, getpid());
index 5e288bd..9d99852 100644 (file)
@@ -3,6 +3,14 @@ static char rcsid[] = "$Header: user.c,v 2.1 90/07/18 00:23:45 vixie Exp $";
 #endif
 
 /* vix 26jan87 [log is in RCS file]
 #endif
 
 /* vix 26jan87 [log is in RCS file]
+ *
+ * PATCHES MAGIC                LEVEL   PATCH THAT GOT US HERE
+ * --------------------         -----   ----------------------
+ * CURRENT PATCH LEVEL:         1       00131
+ * --------------------         -----   ----------------------
+ *
+ * 06 Apr 93   Adam Glass      Fixes so it compiles quitely
+ *
  */
 
 /* Copyright 1988,1990 by Paul Vixie
  */
 
 /* Copyright 1988,1990 by Paul Vixie
@@ -54,7 +62,7 @@ load_user(crontab_fd, name, uid, gid, dir, shell)
        char    *dir;
        char    *shell;
 {
        char    *dir;
        char    *shell;
 {
-       char    *malloc(), *sprintf(), **env_init(), **env_set();
+       char    **env_init(), **env_set();
        int     load_env();
        entry   *load_entry();
 
        int     load_env();
        entry   *load_entry();
 
index fa6a1e0..20e43fe 100644 (file)
@@ -1,8 +1,25 @@
-
+#
+# PATCHES MAGIC                LEVEL   PATCH THAT GOT US HERE
+# --------------------         -----   ----------------------
+# CURRENT PATCH LEVEL:         1       00131
+# --------------------         -----   ----------------------
+#
+# 06 Apr 93    Adam Glass      Fixed so manual pages install, install crontab
+#                              with proper permissions and owners
+#
 PROG=  crontab
 SRCS=  crontab.c misc.c entry.c env.c
 CFLAGS+=-I${.CURDIR} -I${.CURDIR}/../../libexec/crond -DDEBUGGING=1 -DBSD -DCRONDIR='"/var/cron"' -fstrength-reduce
 PROG=  crontab
 SRCS=  crontab.c misc.c entry.c env.c
 CFLAGS+=-I${.CURDIR} -I${.CURDIR}/../../libexec/crond -DDEBUGGING=1 -DBSD -DCRONDIR='"/var/cron"' -fstrength-reduce
-MAN5=  crontab.0
+BINOWN =root
+BINMODE=4111
+MAN1=   crontab.0
+CLEANFILES=crontab.5.0
+
+crontab.0: crontab.5.0
+
+afterinstall:
+       install -c -o ${MANOWN} -g ${MANGRP} -m ${MANMODE} crontab.5.0 \
+            ${DESTDIR}${MANDIR}5/crontab.0
 
 .include <bsd.prog.mk>
 .PATH: ${.CURDIR}/../../libexec/crond
 
 .include <bsd.prog.mk>
 .PATH: ${.CURDIR}/../../libexec/crond
index 8157b97..9070efa 100644 (file)
@@ -1,8 +1,14 @@
 # /etc/crontab.src - root's crontab for Vixie's cron
 #
 # /etc/crontab.src - root's crontab for Vixie's cron
 #
+# PATCHES MAGIC                LEVEL   PATCH THAT GOT US HERE
+# --------------------         -----   ----------------------
+# CURRENT PATCH LEVEL:         1       00131
+# --------------------         -----   ----------------------
+#
+# 06 Apr 93    Adam Glass      Fixed to be a better template for 386bsd
+#
 SHELL=/bin/sh
 SHELL=/bin/sh
-PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin
-MAILTO=rich
+PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
 HOME=/var/log
 #
 #minute        hour    mday    month   wday    command
 HOME=/var/log
 #
 #minute        hour    mday    month   wday    command
@@ -12,10 +18,10 @@ HOME=/var/log
 #37    4       *       *       *       ./cronrun-day > cronout-day 2>&1
 #43    4       *       *       Sun     ./cronrun-wk  > cronout-wk  2>&1
 #51    4       1       *       *       ./cronrun-mon > cronout-mon 2>&1
 #37    4       *       *       *       ./cronrun-day > cronout-day 2>&1
 #43    4       *       *       Sun     ./cronrun-wk  > cronout-wk  2>&1
 #51    4       1       *       *       ./cronrun-mon > cronout-mon 2>&1
-#0/15  *       *       *       *       /usr/libexec/atrun
+0/15   *       *       *       *       /usr/libexec/atrun
 0      2       *       *       *       /etc/daily > /var/log/daily.out 2>&1
 30     3       *       *       6       /etc/weekly > /var/log/weekly.out 2>&1
 30     5       1       *       *       /etc/monthly > /var/log/monthly.out 2>&1
 #45    *       *       *       *       /bin/echo /usr/local/bin/uucico -r1 | /bin/su uucpa
 0      2       *       *       *       /etc/daily > /var/log/daily.out 2>&1
 30     3       *       *       6       /etc/weekly > /var/log/weekly.out 2>&1
 30     5       1       *       *       /etc/monthly > /var/log/monthly.out 2>&1
 #45    *       *       *       *       /bin/echo /usr/local/bin/uucico -r1 | /bin/su uucpa
-0-59/5 *       *       *       *       /usr/local/bin/uucico -r1
-37     *       *       *       *       touch /var/spool/uucp/jpunix/C./C.A0000
+#0-59/5        *       *       *       *       /usr/local/bin/uucico -r1
+#37    *       *       *       *       touch /var/spool/uucp/jpunix/C./C.A0000
diff --git a/usr/src/usr.bin/crontab/crontab.5 b/usr/src/usr.bin/crontab/crontab.5
deleted file mode 100644 (file)
index fb981ea..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-.\" $Header: crontab.5,v 2.1 90/07/18 00:23:50 vixie Exp $
-.\" 
-.\"/* Copyright 1988,1990 by Paul Vixie
-.\" * All rights reserved
-.\" *
-.\" * Distribute freely, except: don't remove my name from the source or
-.\" * documentation (don't take credit for my work), mark your changes (don't
-.\" * get me blamed for your possible bugs), don't alter or remove this
-.\" * notice.  May be sold if buildable source is provided to buyer.  No
-.\" * warrantee of any kind, express or implied, is included with this
-.\" * software; use at your own risk, responsibility for damages (if any) to
-.\" * anyone resulting from the use of this software rests entirely with the
-.\" * user.
-.\" *
-.\" * Send bug reports, bug fixes, enhancements, requests, flames, etc., and
-.\" * I'll try to keep a version up to date.  I can be reached as follows:
-.\" * Paul Vixie, 329 Noe Street, San Francisco, CA, 94114, (415) 864-7013,
-.\" * paul@vixie.sf.ca.us || {hoptoad,pacbell,decwrl,crash}!vixie!paul
-.\" */
-.TH CRONTAB 5 "15 January 1990"
-.UC 4
-.SH NAME
-crontab \- tables for driving cron
-.SH DESCRIPTION
-A
-.I crontab
-file contains instructions to the
-.IR crond (8)
-daemon of the general form: ``run this command at this time on this date''.
-Each user has their own crontab, and commands in any given crontab will be
-executed as the user who owns the crontab.  Uucp and News will usually have
-their own crontabs, eliminating the need for explicitly running
-.IR su (1)
-as part of a cron command.
-.PP
-Blank lines and leading spaces and tabs are ignored.  Lines whose first
-non-space character is a pound-sign (#) are comments, and are ignored.
-Note that comments are not allowed on the same line as cron commands, since
-they will be taken to be part of the command.  Similarly, comments are not
-allowed on the same line as environment variable settings.
-.PP
-An active line in a crontab will be either an environment setting or a cron
-command.  An environment setting is of the form,
-.PP
-    name = value
-.PP
-where the spaces around the equal-sign (=) are optional, and any subsequent
-non-leading spaces in
-.I value
-will be part of the value assigned to
-.IR name .
-The
-.I value
-string may be placed in quotes (single or double, but matching) to preserve
-leading or trailing blanks.
-.PP
-Several environment variables are set up
-automatically by the
-.IR crond (8)
-daemon from the /etc/passwd line of the crontab's owner: USER, HOME, and SHELL.
-HOME and SHELL may be overridden by settings in the crontab; USER may not.
-.PP
-(Note: for UUCP, always set SHELL=/bin/sh, or
-.IR crond (8)
-will cheerfully try to execute your commands using /usr/lib/uucp/uucico.)
-.PP
-(Another note: the USER variable is sometimes called LOGNAME or worse on
-System V... on these systems, LOGNAME will be set rather than USER.)
-.PP
-In addition to USER, HOME, and SHELL,
-.IR crond (8)
-will look at MAILTO if it has any reason to send mail as a result of running
-commands in ``this'' crontab.  If MAILTO is defined (and non-empty), mail is
-sent to the user so named.  If MAILTO is defined but empty (MAILTO=""), no
-mail will be sent.  Otherwise mail is sent to the owner of the crontab.  This
-option is useful if you decide on /bin/mail instead of /usr/lib/sendmail as
-your mailer when you install cron -- /bin/mail doesn't do aliasing, and UUCP
-usually doesn't read its mail.
-.PP
-The format of a cron command is very much the V7 standard, with a number of
-upward-compatible extensions.  Each line has five time and date fields,
-followed by a command.  Commands are executed by
-.IR crond (8)
-when the minute, hour, and month of year fields match the current time,
-.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).
-.IR crond (8)
-examines cron entries once every minute.
-The time and date fields are:
-.IP
-.ta 1.5i
-field  allowed values
-.br
------  --------------
-.br
-minute 0-59
-.br
-hour   0-23
-.br
-day of month   0-31
-.br
-month  0-12 (or names, see below)
-.br
-day of week    0-7 (0 or 7 is Sun, or use names)
-.br
-.PP
-A field may be an asterisk (*), which always matches the
-current time.
-.PP
-Ranges of numbers are allowed.  Ranges are two numbers separated
-with a hyphen.  The specified range is inclusive.  For example,
-8-11 for an ``hours'' entry specifies execution at hours 8, 9, 10
-and 11.
-.PP
-Lists are allowed.  A list is a set of numbers (or ranges)
-separated by commas.  Examples: ``1,2,5,9'', ``0-4,8-12''.
-.PP
-Step values can be used in conjunction with ranges.  Following
-a range with ``/<number>'' specifies skips of the number's value
-through the range.  For example, ``0-23/2'' can be used in the hours
-field to specify command execution every other hour (the alternative
-in the V7 standard is ``0,2,4,6,8,10,12,14,16,18,20,22'').
-.PP
-Names can also be used for the ``month'' and ``day of week''
-fields.  Use the first three letters of the particular
-day or month (case doesn't matter).  Ranges or
-lists of names are not allowed.
-.PP
-The ``sixth'' field (the rest of the line) specifies the command to be
-run.
-The entire command portion of the line, up to a newline or %
-character, will be executed by the user's login shell or by the shell
-specified in the SHELL variable of the cronfile.
-Percent-signs (%) in the command, unless escaped with backslash
-(\\), will be changed into newline characters, and all data
-after the first % will be sent to the command as standard
-input.
-.PP
-Note: The day of a command's execution can be specified by two
-fields \(em day of month, and day of week.  If both fields are
-restricted (ie, aren't *), the command will be run when
-.I either
-field matches the current time.  For example,
-.br
-``30 4 1,15 * 5''
-would cause a command to be run at 4:30 am on the 1st and 15th of each
-month, plus every Friday.
-.SH EXAMPLE CRON FILE
-.nf
-
-# use /bin/sh to run commands, no matter what /etc/passwd says
-SHELL=/bin/sh
-# mail any output to `paul', no matter whose crontab this is
-MAILTO=paul
-#
-# run five minutes after midnight, every day
-5 0 * * *       $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
-# run at 2:15pm on the first of every month -- output mailed to paul
-15 14 1 * *     $HOME/bin/monthly
-# run at 10 pm on weekdays, annoy Joe
-0 22 * * 1-5   mail -s "It's 10pm" joe%Joe,%%Where are your kids?%
-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 SEE ALSO
-crond(8), crontab(1)
-.SH EXTENSIONS
-When specifying day of week, both day 0 and day 7 will be considered Sunday.
-BSD and ATT seem to disagree about this.
-.PP
-Lists and ranges are allowed to co-exist in the same field.  "1-3,7-9" would
-be rejected by ATT or BSD cron -- they want to see "1-3" or "7,8,9" ONLY.
-.PP
-Ranges can include "steps", so "1-9/2" is the same as "1,3,5,7,9".
-.PP
-Names of months or days of the week can be specified by name.
-.PP
-Environment variables can be set in the crontab.  In BSD or ATT, the
-environment handed to child processes is basically the one from /etc/rc.
-.PP
-Command output is mailed to the crontab owner (BSD can't do this), can be
-mailed to a person other than the crontab owner (SysV can't do this), or the
-feature can be turned off and no mail will be sent at all (SysV can't do this
-either).
-.SH AUTHOR
-.nf
-Paul Vixie, paul@vixie.sf.ca.us
diff --git a/usr/src/usr.bin/crontab/crontab.5.5 b/usr/src/usr.bin/crontab/crontab.5.5
new file mode 100644 (file)
index 0000000..fb981ea
--- /dev/null
@@ -0,0 +1,188 @@
+.\" $Header: crontab.5,v 2.1 90/07/18 00:23:50 vixie Exp $
+.\" 
+.\"/* Copyright 1988,1990 by Paul Vixie
+.\" * All rights reserved
+.\" *
+.\" * Distribute freely, except: don't remove my name from the source or
+.\" * documentation (don't take credit for my work), mark your changes (don't
+.\" * get me blamed for your possible bugs), don't alter or remove this
+.\" * notice.  May be sold if buildable source is provided to buyer.  No
+.\" * warrantee of any kind, express or implied, is included with this
+.\" * software; use at your own risk, responsibility for damages (if any) to
+.\" * anyone resulting from the use of this software rests entirely with the
+.\" * user.
+.\" *
+.\" * Send bug reports, bug fixes, enhancements, requests, flames, etc., and
+.\" * I'll try to keep a version up to date.  I can be reached as follows:
+.\" * Paul Vixie, 329 Noe Street, San Francisco, CA, 94114, (415) 864-7013,
+.\" * paul@vixie.sf.ca.us || {hoptoad,pacbell,decwrl,crash}!vixie!paul
+.\" */
+.TH CRONTAB 5 "15 January 1990"
+.UC 4
+.SH NAME
+crontab \- tables for driving cron
+.SH DESCRIPTION
+A
+.I crontab
+file contains instructions to the
+.IR crond (8)
+daemon of the general form: ``run this command at this time on this date''.
+Each user has their own crontab, and commands in any given crontab will be
+executed as the user who owns the crontab.  Uucp and News will usually have
+their own crontabs, eliminating the need for explicitly running
+.IR su (1)
+as part of a cron command.
+.PP
+Blank lines and leading spaces and tabs are ignored.  Lines whose first
+non-space character is a pound-sign (#) are comments, and are ignored.
+Note that comments are not allowed on the same line as cron commands, since
+they will be taken to be part of the command.  Similarly, comments are not
+allowed on the same line as environment variable settings.
+.PP
+An active line in a crontab will be either an environment setting or a cron
+command.  An environment setting is of the form,
+.PP
+    name = value
+.PP
+where the spaces around the equal-sign (=) are optional, and any subsequent
+non-leading spaces in
+.I value
+will be part of the value assigned to
+.IR name .
+The
+.I value
+string may be placed in quotes (single or double, but matching) to preserve
+leading or trailing blanks.
+.PP
+Several environment variables are set up
+automatically by the
+.IR crond (8)
+daemon from the /etc/passwd line of the crontab's owner: USER, HOME, and SHELL.
+HOME and SHELL may be overridden by settings in the crontab; USER may not.
+.PP
+(Note: for UUCP, always set SHELL=/bin/sh, or
+.IR crond (8)
+will cheerfully try to execute your commands using /usr/lib/uucp/uucico.)
+.PP
+(Another note: the USER variable is sometimes called LOGNAME or worse on
+System V... on these systems, LOGNAME will be set rather than USER.)
+.PP
+In addition to USER, HOME, and SHELL,
+.IR crond (8)
+will look at MAILTO if it has any reason to send mail as a result of running
+commands in ``this'' crontab.  If MAILTO is defined (and non-empty), mail is
+sent to the user so named.  If MAILTO is defined but empty (MAILTO=""), no
+mail will be sent.  Otherwise mail is sent to the owner of the crontab.  This
+option is useful if you decide on /bin/mail instead of /usr/lib/sendmail as
+your mailer when you install cron -- /bin/mail doesn't do aliasing, and UUCP
+usually doesn't read its mail.
+.PP
+The format of a cron command is very much the V7 standard, with a number of
+upward-compatible extensions.  Each line has five time and date fields,
+followed by a command.  Commands are executed by
+.IR crond (8)
+when the minute, hour, and month of year fields match the current time,
+.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).
+.IR crond (8)
+examines cron entries once every minute.
+The time and date fields are:
+.IP
+.ta 1.5i
+field  allowed values
+.br
+-----  --------------
+.br
+minute 0-59
+.br
+hour   0-23
+.br
+day of month   0-31
+.br
+month  0-12 (or names, see below)
+.br
+day of week    0-7 (0 or 7 is Sun, or use names)
+.br
+.PP
+A field may be an asterisk (*), which always matches the
+current time.
+.PP
+Ranges of numbers are allowed.  Ranges are two numbers separated
+with a hyphen.  The specified range is inclusive.  For example,
+8-11 for an ``hours'' entry specifies execution at hours 8, 9, 10
+and 11.
+.PP
+Lists are allowed.  A list is a set of numbers (or ranges)
+separated by commas.  Examples: ``1,2,5,9'', ``0-4,8-12''.
+.PP
+Step values can be used in conjunction with ranges.  Following
+a range with ``/<number>'' specifies skips of the number's value
+through the range.  For example, ``0-23/2'' can be used in the hours
+field to specify command execution every other hour (the alternative
+in the V7 standard is ``0,2,4,6,8,10,12,14,16,18,20,22'').
+.PP
+Names can also be used for the ``month'' and ``day of week''
+fields.  Use the first three letters of the particular
+day or month (case doesn't matter).  Ranges or
+lists of names are not allowed.
+.PP
+The ``sixth'' field (the rest of the line) specifies the command to be
+run.
+The entire command portion of the line, up to a newline or %
+character, will be executed by the user's login shell or by the shell
+specified in the SHELL variable of the cronfile.
+Percent-signs (%) in the command, unless escaped with backslash
+(\\), will be changed into newline characters, and all data
+after the first % will be sent to the command as standard
+input.
+.PP
+Note: The day of a command's execution can be specified by two
+fields \(em day of month, and day of week.  If both fields are
+restricted (ie, aren't *), the command will be run when
+.I either
+field matches the current time.  For example,
+.br
+``30 4 1,15 * 5''
+would cause a command to be run at 4:30 am on the 1st and 15th of each
+month, plus every Friday.
+.SH EXAMPLE CRON FILE
+.nf
+
+# use /bin/sh to run commands, no matter what /etc/passwd says
+SHELL=/bin/sh
+# mail any output to `paul', no matter whose crontab this is
+MAILTO=paul
+#
+# run five minutes after midnight, every day
+5 0 * * *       $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
+# run at 2:15pm on the first of every month -- output mailed to paul
+15 14 1 * *     $HOME/bin/monthly
+# run at 10 pm on weekdays, annoy Joe
+0 22 * * 1-5   mail -s "It's 10pm" joe%Joe,%%Where are your kids?%
+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 SEE ALSO
+crond(8), crontab(1)
+.SH EXTENSIONS
+When specifying day of week, both day 0 and day 7 will be considered Sunday.
+BSD and ATT seem to disagree about this.
+.PP
+Lists and ranges are allowed to co-exist in the same field.  "1-3,7-9" would
+be rejected by ATT or BSD cron -- they want to see "1-3" or "7,8,9" ONLY.
+.PP
+Ranges can include "steps", so "1-9/2" is the same as "1,3,5,7,9".
+.PP
+Names of months or days of the week can be specified by name.
+.PP
+Environment variables can be set in the crontab.  In BSD or ATT, the
+environment handed to child processes is basically the one from /etc/rc.
+.PP
+Command output is mailed to the crontab owner (BSD can't do this), can be
+mailed to a person other than the crontab owner (SysV can't do this), or the
+feature can be turned off and no mail will be sent at all (SysV can't do this
+either).
+.SH AUTHOR
+.nf
+Paul Vixie, paul@vixie.sf.ca.us
index a2c290d..c457ca1 100644 (file)
@@ -22,6 +22,14 @@ static char rcsid[] = "$Header: /home/local/site/cron2.1/orig/RCS/crontab.c,v 2.
  * 
  * Revision 1.1  87/01/26  23:49:06  paul
  * Initial revision
  * 
  * Revision 1.1  87/01/26  23:49:06  paul
  * Initial revision
+ *
+ * PATCHES MAGIC                LEVEL   PATCH THAT GOT US HERE
+ * --------------------         -----   ----------------------
+ * CURRENT PATCH LEVEL:         1       00131
+ * --------------------         -----   ----------------------
+ *
+ * 06 Apr 93   Adam Glass      Fixes so it compiles quitely
+ *
  */
 
 /* Copyright 1988,1990 by Paul Vixie
  */
 
 /* Copyright 1988,1990 by Paul Vixie
@@ -71,7 +79,7 @@ extern void   log_it();
 static char    *Options[] = {"???", "list", "delete", "replace"};
 #endif
 
 static char    *Options[] = {"???", "list", "delete", "replace"};
 #endif
 
-static void
+void
 usage()
 {
        fprintf(stderr, "usage:  %s [-u user] ...\n", ProgramName);
 usage()
 {
        fprintf(stderr, "usage:  %s [-u user] ...\n", ProgramName);
@@ -86,8 +94,8 @@ main(argc, argv)
        int     argc;
        char    *argv[];
 {
        int     argc;
        char    *argv[];
 {
-       void    parse_args(), set_cron_uid(), set_cron_cwd(),
-               list_cmd(), delete_cmd(), replace_cmd();
+        void parse_args(), set_cron_uid(), set_cron_cwd(),
+             list_cmd(), delete_cmd(), replace_cmd();
 
        Pid = getpid();
        ProgramName = argv[0];
 
        Pid = getpid();
        ProgramName = argv[0];
@@ -117,7 +125,7 @@ main(argc, argv)
 }
        
 
 }
        
 
-static void
+ void
 parse_args(argc, argv)
        int     argc;
        char    *argv[];
 parse_args(argc, argv)
        int     argc;
        char    *argv[];
@@ -219,7 +227,7 @@ parse_args(argc, argv)
 }
 
 
 }
 
 
-static void
+ void
 list_cmd()
 {
        extern  errno;
 list_cmd()
 {
        extern  errno;
@@ -247,7 +255,7 @@ list_cmd()
 }
 
 
 }
 
 
-static void
+ void
 delete_cmd()
 {
        extern  errno;
 delete_cmd()
 {
        extern  errno;
@@ -269,7 +277,7 @@ delete_cmd()
 }
 
 
 }
 
 
-static void
+ void
 check_error(msg)
        char    *msg;
 {
 check_error(msg)
        char    *msg;
 {
@@ -278,10 +286,9 @@ check_error(msg)
 }
 
 
 }
 
 
-static void
+ void
 replace_cmd()
 {
 replace_cmd()
 {
-       char    *sprintf();
        entry   *load_entry();
        int     load_env();
        int     unlink();
        entry   *load_entry();
        int     load_env();
        int     unlink();
@@ -318,7 +325,7 @@ replace_cmd()
        fflush(tmp);  rewind(tmp);
 
        if (ferror(tmp)) {
        fflush(tmp);  rewind(tmp);
 
        if (ferror(tmp)) {
-               fprintf("%s: error while writing new crontab to %s\n",
+               fprintf(stderr, "%s: error while writing new crontab to %s\n",
                        ProgramName, tn);
                fclose(tmp);  unlink(tn);
                exit(ERROR_EXIT);
                        ProgramName, tn);
                fclose(tmp);  unlink(tn);
                exit(ERROR_EXIT);
@@ -383,7 +390,7 @@ replace_cmd()
 }
 
 
 }
 
 
-static void
+ void
 poke_daemon()
 {
 #if defined(BSD)
 poke_daemon()
 {
 #if defined(BSD)