Changes in 1.12:

Two new actions have been added: tidy, and mrespawn.

tidy acts like leave, but only if the runset process was killed by
SIGTERM.  It's handy for non-vital, slow, cleanup procedures that should
be skipped when you are in a hurry to shut down.

The switch daemon now uses SIGINT when told to cancel a runset, and
SIGTERM when shutting down because the last user un-requested it
normally.

The init daemon now kills the initial script with SIGINT when it itself
receives a SIGINT signal.  SIGHUP now does a warmboot but kills the
script normally.

mrespawn acts like once, but will re-spawn the command if the runset
process sees SIGUSR1.  It can be used to allow a daemon to be restarted
without having to tear down and restart the entire runset.

Changes in 1.11:

The clock support, which has a crond-like WEEKDAYS field which has never
been implemented, used to complain that WEEKDAYS wasn't supported unless
this field was "0".  That was wrong -- a crond line which doesn't use
weekdays has "*" there.  I've fixed it to now require "*" and complain
about "0".

That breaks backwards compatibility somewhat, but it's better to get
this over with long before I ever implement weekdays.

Since perfect compatibility is being broken here anyway, I've also
removed a runset-1.5 compatibility kludge in request that allowed
"--cancel" to always work for the superuser even if "--force" was not
present.

Changes in 1.10:

The inetd-like actions (service and pass_socket) now support the local
("unix-domain") protocol, as "local:" and "localdg:".

(This was actually present in the earlier versions as "unix:", but it was
undocumented and useless due to a bug.)

Changes in 1.9:

Another fix to the clock subsystem -- it should handle DST better.

Changes in 1.8:

It is now possible to specify that a process is never SIGKILLed when it 
is slow to exit during shutdown, via the parameter `grace=-1'.

`init' now handles the SIGUSR1 and SIGUSR2 signals.  On SIGUSR2 it will
go through the motions of shutting down, but at the end re-exec /sbin/init
instead of halting or rebooting.  This means that once runset-1.8's init
is installed, you can transition to any future version without a full
reboot.  (Uptime fans will appreciate this.)

SIGUSR1 is similar, except that it re-execs /sbin/init with the "single"
argument.  So SIGUSR1 and SIGUSR2 can be used to switch between singleuser
and multiuser modes, again without a reboot.

There is a new parameter `ctty' on runset actions that launch processes.
It is intended for singleuser mode, and makes the process a session leader
with the boot TTY as controlling TTY.  What this means is that if you
launch a shell with `ctty=1', Ctrl-C will work properly.  Before, using
`ping' from a singleuser shell would cause an unbreakable loop.

Changes in 1.7:

Some unneeded 'volatile' keywords were removed from the code.  In passing
this should solve a problem -- apparently recent versions of GCC refuse to
compile runset-1.6 because `volatile' was present on the definitions but
missing in the header declarations.

Also, a section of kludge code to accomodate a bug in pre-Linux-2.0.36
kernels (which was already #if 0'd out) has been entirely removed from the
code.

Changes in 1.6:

Another bug fix for clock.

There is now a `!group' directive, allowing runsets to be controlled by 
any user from a specified group.

The '-C' option can now be enabled for nonpriveledged users, with two new
directives `!user/cancel' and `!group/cancel'

It is now possible to bind TCP/IP services to specific IP addresses.

Changes in 1.5:

Bug fixes in the clock command, again.  Also, use of the unimplemented 
day-of-week option is now recognized as an error.

There were also some miscellaneous fixes and cleanups, as well as an 
update to newer versions of autoconf/automake.

Changes in 1.4:

A bug that could cause a segfault if `runset' could not open the script
file has been fixed.  Also, earlier releases could treat unrecognized 
options as filenames -- this has been fixed.

Two new actions were added.  `together' allows runset to launch several 
commands simultaeously, and then wait for all of them to complete.  
`done' tells a runset to shut itself down -- useful for a script that 
just does a single task.

SIGHUP signals are now gracefully handled by runset.  Previously, a SIGHUP
would cause it to exit without proper cleanup.  The handler is not
installed if the `nohup' utility is in use, since otherwise that would
defeat nohup's purpose.

The --help text for the programs is now friendlier.

The code now never uses interrupting signals.  I've come to realize that 
almost no use of EINTR is safe from race conditions, so I've cleansed my 
code of it.

The documentation has been reworked a bit.  It's still not great, but 
it's approaching respectability.

I've noticed that the "init" program probably does not work on Linux 2.2,
because of the integrated bdflush support.  2.2 doesn't need a bdflush
daemon and kills any process that tries to do that job, thus killing the
init process.  I've added a variant "init-noflush" program for use on 2.2
that should address this.  Both init programs are declared "noinst" -- you
must manually install one of them.  (Note that I do not run Linux 2.2.x,
as I do not consider it stable.  I only noticed this problem reading it's
source code.  So this is untested.)

The sample scripts have been revised to include a very large `grace' time
for the execution of switch from the main runset-script.  This is needed
in practice since switch may legitimately take a long time to shut down
(waiting for the grace periods on it's subordinate processes to expire),
and SIGKILLing it can create a mess.

Changes in 1.3:

Some simple bugs that could cause segfaults have been corrected.  One bug 
(a missing include) that would block compilation on older libc's has also 
been fixed.

Changes in 1.2:

A security loophole has been plugged.  The switch daemon's control socket 
was wide open, meaning any unpriveledged program could masquerade as 
`request'.  The severity of this problem depends on what scripts you have 
set up in /etc/rs.d/switch/.

Changes in 1.1:

This release fixes a serious bug on glibc-2.1 systems.  glibc-2.1 changed 
the semantics of `strsep', and utterly broke runset-1.0.

Multiple significant bugs in the clock (crond-like) system were also fixed.

The UTMP logging code has been changed to go through the library for WTMP
accesses and no longer attempts to enforce correct permissions for the
WTMP file.  That makes 1.1 slightly friendlier to glibc-2.1's utmpd ---
however, I do not recommend using the `openutmp' action with utmpd. 

There were also some cleanups.
