Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/external/bsd/cron/dist import cron 4.1



details:   https://anonhg.NetBSD.org/src/rev/bf3a2e7223fe
branches:  trunk
changeset: 754625:bf3a2e7223fe
user:      christos <christos%NetBSD.org@localhost>
date:      Thu May 06 18:50:28 2010 +0000

description:
import cron 4.1

diffstat:

 external/bsd/cron/dist/CHANGES      |  177 ++++++++
 external/bsd/cron/dist/CONVERSION   |   85 ++++
 external/bsd/cron/dist/FEATURES     |   84 ++++
 external/bsd/cron/dist/INSTALL      |   91 ++++
 external/bsd/cron/dist/MAIL         |  475 +++++++++++++++++++++++
 external/bsd/cron/dist/Makefile     |  135 ++++++
 external/bsd/cron/dist/README       |   72 +++
 external/bsd/cron/dist/THANKS       |   29 +
 external/bsd/cron/dist/config.h     |  105 +++++
 external/bsd/cron/dist/cron.8       |   93 ++++
 external/bsd/cron/dist/cron.c       |  450 +++++++++++++++++++++
 external/bsd/cron/dist/cron.h       |   38 +
 external/bsd/cron/dist/crontab.1    |  105 +++++
 external/bsd/cron/dist/crontab.5    |  189 +++++++++
 external/bsd/cron/dist/crontab.c    |  675 ++++++++++++++++++++++++++++++++
 external/bsd/cron/dist/database.c   |  259 ++++++++++++
 external/bsd/cron/dist/do_command.c |  526 +++++++++++++++++++++++++
 external/bsd/cron/dist/entry.c      |  587 ++++++++++++++++++++++++++++
 external/bsd/cron/dist/env.c        |  250 ++++++++++++
 external/bsd/cron/dist/externs.h    |  123 +++++
 external/bsd/cron/dist/funcs.h      |   79 +++
 external/bsd/cron/dist/globals.h    |   79 +++
 external/bsd/cron/dist/job.c        |   73 +++
 external/bsd/cron/dist/macros.h     |  130 ++++++
 external/bsd/cron/dist/misc.c       |  739 ++++++++++++++++++++++++++++++++++++
 external/bsd/cron/dist/pathnames.h  |  108 +++++
 external/bsd/cron/dist/popen.c      |  180 ++++++++
 external/bsd/cron/dist/pw_dup.c     |  127 ++++++
 external/bsd/cron/dist/structs.h    |   62 +++
 external/bsd/cron/dist/user.c       |  114 +++++
 30 files changed, 6239 insertions(+), 0 deletions(-)

diffs (truncated from 6359 to 300 lines):

diff -r dfb99d5a1e9d -r bf3a2e7223fe external/bsd/cron/dist/CHANGES
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/external/bsd/cron/dist/CHANGES    Thu May 06 18:50:28 2010 +0000
@@ -0,0 +1,177 @@
+ISC Cron V4
+
+9.     [misc]          megapatch from tcmiller (posix compliance, etc).
+8.     [bug]           fix stepsize 0 infinite loop.
+7.     [evol]          "enum" version of freebsd fix to env-var settings.
+6.     [evol]          changes #12-17 from tcmiller (for *BSD alignment).
+5.     [feature]       give cron a version number and display it.
+4.     [bug]           handle clock jumps (from freebsd pr# 24485)
+3.     [feature]       add -n to cron (for nofork).
+2.     [evol]          merge in many changes from *BSD and Linux.
+1.     [port]          fixups for nextstep, plus a syslog configuration bug.
+
+--------
+
+Vixie Cron             V3.0 Patch 2 notes
+Paul Vixie
+12-Dec-1994
+
+3. "Coherent" now supported.  All kinds of flock() damage was repaired.
+2. gethostname() now available in compat.c for systems that need it.
+1. There was a problem in the way the environment was being imported.
+
+Vixie Cron             Changes from V2 to V3
+Paul Vixie
+29-Dec-1993
+
+The crontab command now conforms to POSIX 1003.2.  This means that when you
+install it, if you have any "crontab" command lines floating around in shell
+scripts (such as /etc/rc or /etc/rc.local), you will need to change them.
+
+I have integrated several changes made by BSDi for their BSD/386 operating
+system; these were offerred to me before I started consulting for them, so
+it is safe to say that they were intended for publication.  Most notably,
+the name of the cron daemon has changed from "crond" to "cron".  This was
+done for compatibility with 4.3BSD.  Another change made for the same reason
+is the ability to read in an /etc/crontab file which has an extra field in
+each entry, between the time fields and the command.  This field is a user
+name, and it permits the /etc/crontab command to contain commands which are
+to be run by any user on the system.  /etc/crontab is not "installed" via
+the crontab(1) command; it is automatically read at startup time and it will
+be reread whenever it changes.
+
+I also added a "-e" option to crontab(1).  Nine people also sent me diffs
+to add this option, but I had already implemented it on my own.  I actually
+released an interrim version (V2.2, I think) for limited testing, and got a
+chance to fix a bad security bug in the "-e" option thanks to XXX.
+
+The daemon used to be extraordinarily sloppy in its use of file descriptors.
+A heck of a lot of them were left open in spawned jobs, which caused problems
+for the daemon and also caused problems with the spawned jobs if they were 
+shell scripts since "sh" and "csh" have traditionally used hidden file
+descriptors to pass information to subshells, and cron was causing them to
+think they were subshells.  If you had trouble with "sh" or "csh" scripts in
+V2, chances are good that V3 will fix your problems.
+
+About a dozen people have reminded me that I forgot to initialize
+"crontab_fd" in database.c.  Keith Cantrell was the first, so he gets the
+point.
+
+Steve Simmons reminded me that once an account has been deleted from the
+system, "crontab -u USER -d" will not work.  My solution is to suggest to
+all of you that before you delete a user's account, you first delete that
+user's crontab file if any.  From cron's point of view, usernames can never
+be treated as arbitrary strings.  Either they are valid user names, or they
+are not.  I will not make an exception for the "-d" case, for security
+reasons that I consider reasonable.  It is trivial for a root user to delete
+the entry by hand if necessary.
+
+Dan O'Neil reminded me that I forgot to reset "log_fd" in misc.c.  A lot of
+others also reminded me of this, but Dan gets the point.  I didn't fix it
+there, since the real bug was that it should have been open in the parent.
+
+Peter Kabal reminded me that I forgot to "#ifdef DEBUGGING" some code in
+misc.c.  Hans Trompert actually told me first, but Peter sent the patch so
+he gets the point.
+
+Russell Nelson told me that I'd forgotten to "#include <syslog.h>" in misc.c,
+which explains why a lot of other people complained that it wasn't using
+syslog even when they configured it that way :-).  Steve Simmons told me
+first, though, so he gets the point.
+
+An interrim version of the daemon tried to "stat" every file before
+executing it; this turned out to be a horribly bad idea since finding the
+name of a file from a shell command is a hard job (that's why we have
+shells, right?)  I removed this bogus code.  Dave Burgess gets the point.
+
+Dennis R. Conley sent a suggestion for MMDF systems, which I've added to the
+comments in cron.h.
+
+Mike Heisler noted that I use comments in the CONVERSION file which are
+documented as illegal in the man pages.  Thanks, Mike.
+
+Irving Wolfe sent me some very cheerful changes for a NeXT system, but I
+consider the system itself broken and I can't bring myself to #ifdef for
+something as screwed up as this system seems to be.  However, various others
+did send me smaller patches which appear to have cause cron to build and run
+correctly on (the latest) NeXT machines, with or without the "-posix" CFLAG.
+Irving also asked for a per-job MAILTO, and this was finally added later when
+I integrated the BSD/386 changes contributed by BSDi, and generalized some of
+the parsing.
+
+Lots of folks complained that the autogenerated "Date:" header wasn't in
+ARPA format.  I didn't understand this -- either folks will use Sendmail and
+not generate a Date:  at all (since Sendmail will do it), or folks will use
+something other than Sendmail which won't care about Date: formats.  But
+I've "fixed" it anyway...
+
+Several people suggested that "*" should be able to take a "/step".  One person
+suggested that "N/step" ought to mean "N-last/step", but that's stretching things
+a bit far.  "*/step" seems quite intuitive to me, so I've added it.  Colin Plumb
+sent in the first and most polite request for this feature.
+
+As with every release of Cron, BIND, and seemingly everything else I do, one
+user stands out with the most critical but also the most useful analysis.
+Cron V3's high score belongs to Peter Holzer, who sent in the nicest looking
+patch for the "%" interpretation problem and also helped me understand a
+tricky bit of badness in the "log_fd" problem.
+
+agulbra%flode.nvg.unit.no@localhost wins the honors for being the first to point out the
+nasty security hole in "crontab -r".  'Nuff said.
+
+Several folks pointed out that log_it() needed to exist even if logging was
+disabled.  Some day I will create a tool that will compile a subsystem with
+every possible combination and permutation of #ifdef options, but meanwhile
+thanks to everybody.
+
+job_runqueue() was using storage after freeing it, since Jordan told me back
+in 1983 that C let you do that, and I believed him in 1986 when I wrote all
+this junk.  Linux was the first to die from this error, and the Linux people
+sent me the most amazing, um, collection of patches for this problem.  Thanks
+for all the fish.
+
+Jeremy Bettis reminded me that popen() isn't safe.  I grabbed Ken Arnold's 
+version of popen/pclose from the ftpd and hacked it to taste.  We're safe now,
+from this at least.
+
+Branko Lankester sent me a very timely and helpful fix for a looming security
+problem in my "crontab -e" implementation.
+
+--------
+
+Vixie Cron             Changes from V1 to V2
+Paul Vixie
+8-Feb-1988
+
+Many changes were made in a rash of activity about six months ago, the exact
+list of which is no longer clear in my memory.  I know that V1 used a file
+called POKECRON in /usr/spool/cron to tell it that it was time to re-read
+all the crontab files; V2 uses the modtime the crontab directory as a flag to
+check out the crontab files; those whose modtime has changed will be re-read,
+and the others left alone.  Note that the crontab(1) command will do a utimes
+call to make sure the mtime of the dir changes, since the filename/inode will
+often remain the same after a replacement and the mtime wouldn't change in
+that case.
+
+8-Feb-88: made it possible to use much larger environment variable strings.
+       V1 allowed 100 characters; V2 allows 1000.  This was needed for PATH
+       variables on some systems.  Thanks to Toerless Eckert for this idea.
+       E-mail: UUCP: ...pyramid!fauern!faui10!eckert
+
+16-Feb-88: added allow/deny, moved /usr/spool/cron/crontabs to
+       /usr/lib/cron/tabs.  allow and deny are /usr/lib/cron/{allow,deny},
+       since the sysv naming for this depends on 'at' using the same
+       dir, which would be stupid (hint: use /usr/{lib,spool}/at).
+
+22-Feb-88: made it read the spool directory for crontabs and look each one
+       up using getpwnam() rather than reading all passwds with getpwent()
+       and trying to open each crontab.
+
+9-Dec-88: made it sync to :00 after the minute, makes cron predictable.
+       added logging to /var/cron/log.
+
+14-Apr-90: (actually, changes since December 1989)
+       fixed a number of bugs reported from the net and from John Gilmore.
+       added syslog per Keith Bostic.  security features including not
+       being willing to run a command owned or writable by other than
+       the owner of the crontab 9not working well yet)
diff -r dfb99d5a1e9d -r bf3a2e7223fe external/bsd/cron/dist/CONVERSION
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/external/bsd/cron/dist/CONVERSION Thu May 06 18:50:28 2010 +0000
@@ -0,0 +1,85 @@
+Id: CONVERSION,v 1.1.1.1 1996/12/16 19:39:48 halley Exp
+
+Conversion of BSD 4.[23] crontab files:
+
+Edit your current crontab (/usr/lib/crontab) into little pieces, with each
+users' commands in a different file.  This is different on 4.2 and 4.3,
+but I'll get to that below.  The biggest feature of this cron is that you
+can move 'news' and 'uucp' cron commands into files owned and maintainable
+by those two users.  You also get to rip all the fancy 'su' footwork out
+of the cron commands.  On 4.3, there's no need for the 'su' stuff since the
+user name appears on each command -- but I'd still rather have separate
+crontabs with seperate environments and so on.
+
+Leave the original /usr/lib/crontab!  This cron doesn't use it, so you may
+as well keep it around for a while in case something goes wakko with this
+fancy version.
+
+Most commands in most crontabs are run by root, have to run by root, and
+should continue to be run by root.  They still have to be in their own file;
+I recommend /etc/crontab.src or /usr/adm/crontab.src.
+
+'uucp's commands need their own file; how about /usr/lib/uucp/crontab.src?
+'news' also, perhaps in /usr/lib/news/crontab.src...
+
+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
+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
+executed.
+
+On 4.2, your crontab might have a few lines like this:
+
+       5 * * * *   su uucp < /usr/lib/uucp/uudemon.hr
+       10 4 * * *  su uucp < /usr/lib/uucp/uudemon.day
+       15 5 * * 0  su uucp < /usr/lib/uucp/uudemon.wk
+
+...or like this:
+
+       5 * * * *   echo /usr/lib/uucp/uudemon.hr | su uucp
+       10 4 * * *  echo /usr/lib/uucp/uudemon.day | su uucp
+       15 5 * * 0  echo /usr/lib/uucp/uudemon.wk | su uucp
+
+On 4.3, they'd look a little bit better, but not much:
+
+       5 * * * *   uucp  /usr/lib/uucp/uudemon.hr
+       10 4 * * *  uucp  /usr/lib/uucp/uudemon.day
+       15 5 * * 0  uucp  /usr/lib/uucp/uudemon.wk
+
+For this cron, you'd create /usr/lib/uucp/crontab.src (or wherever you want
+to keep uucp's commands) which would look like this:
+
+       # /usr/lib/uucp/crontab.src - uucp's crontab
+       #
+       PATH=/usr/lib/uucp:/bin:/usr/bin
+       SHELL=/bin/sh
+       HOME=/usr/lib/uucp
+       #
+       5 * * * *   uudemon.hr
+       10 4 * * *  uudemon.day
+       15 5 * * 0  uudemon.wk
+
+The application to the `news' cron commands (if any) is left for you to
+figure out.  Likewise if there are any other cruddy-looking 'su' commands in
+your crontab commands, you don't need them anymore: just find a good place
+to put the `crontab.src' (or whatever you want to call it) file for that
+user, put the cron commands into it, and install it using the `crontab'
+command (probably with "-u USERNAME", but see the man page).
+
+If you run a 4.2-derived cron, you could of course just install your current
+crontab in toto as root's crontab.  It would work exactly the way your
+current one does, barring the extra steps in installing or changing it.
+There would still be advantages to this cron, mostly that you get mail if
+there is any output from your cron commands.
+
+One note about getting mail from cron: you will probably find, after you
+install this version of cron, that your cron commands are generating a lot
+of irritating output.  The work-around for this is to redirect all EXPECTED
+output to a per-execution log file, which you can examine if you want to
+see the output from the "last time" a command was executed; if you get any
+UNEXPECTED output, it will be mailed to you.  This takes a while to get
+right, but it's amazingly convenient.  Trust me.
+
diff -r dfb99d5a1e9d -r bf3a2e7223fe external/bsd/cron/dist/FEATURES
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/external/bsd/cron/dist/FEATURES   Thu May 06 18:50:28 2010 +0000
@@ -0,0 +1,84 @@
+Id: FEATURES,v 1.2 2004/01/23 18:56:42 vixie Exp
+
+Features of ISC cron relative to BSD 4.[23] and SysV crons:
+
+--     Environment variables can be set in each crontab.  SHELL, USER,
+       LOGNAME, and HOME are set from the user's passwd entry; all except
+       USER can be changed in the crontab.  PATH is especially useful to
+       set there.  TZ can be set, but cron ignores it other than passing
+       it on through to the commands it runs.  Format is
+
+               variable=value
+
+       Blanks surrounding the '=' will be eaten; other blanks in value are
+       okay.  Leading or trailing blanks can be preserved by quoting, single
+       or double quotes are okay, just so they match.
+
+               PATH=.:/bin:/usr/bin
+               SHELL=/bin/sh
+               FOOBAR = this is a long blanky example
+
+       Above, FOOBAR would get "this is a long blanky example" as its value.
+
+       SHELL and HOME will be used when it's time to run a command; if
+       you don't set them, HOME defaults to your /etc/passwd entry
+       and SHELL defaults to /bin/sh.
+



Home | Main Index | Thread Index | Old Index