<!-- 
Fcron documentation
Copyright 2000-2026 Thibault Godouet <fcron@free.fr>
Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation License,
Version 1.1 or any later version published by the Free Software
Foundation.
A copy of the license is included in gfdl.sgml.
-->


   <sect1 id="changes">
      <title>Changes</title>

      <itemizedlist>
	 <title>From version 3.0.0 to 3.0.1</title>
	 <listitem>
	    <para>Better handling of the pipes in job.c: this should remove some problems encountered on BSD systems.</para>
	 </listitem>
	 <listitem>
	    <para>Bug fix: set the FDs correctly for select(). Should fix the problem encountered on BSD systems.</para>
	 </listitem>
	 <listitem>
	    <para>fcrontab: access user's directory with user's rights (necessary if user/group fcron has not the right to read the directory).</para>
	 </listitem>
	 <listitem>
	    <para>improvement in check_system_crontabs: more comments, added some help messages, added command line options, cleaner, safer code.</para>
	 </listitem>
	 <listitem>
	    <para>Improved English documentation: clarified some previously-unclear points.</para>
	 </listitem>
	 <listitem>
	    <para>Added French translation of the manual pages (thanks go to Alain Portal)</para>
	 </listitem>
      </itemizedlist>

      <itemizedlist>
	 <title>From version 2.9.7 to 3.0.0</title>
	 <listitem>
	    <para>Added a missing entry in changelog (changes from 2.9.6 to 2.9.7, bug fix for NetBSD).</para>
	 </listitem>
	 <listitem>
	    <para>Merged a patch for the check_system_crontabs script (Security enhancements and cleanups).</para>
	 </listitem>
      </itemizedlist>

      <itemizedlist>
	 <title>From version 2.9.6 to 2.9.7</title>
	 <listitem>
	    <para>Added time zone support (option timezone).</para>
	 </listitem>
	 <listitem>
	    <para>Better support FreeBSD's users and groups modifications in
	       fcron's install scripts.</para>
	 </listitem>
	 <listitem>
	    <para>Fixed a bug which used to make fcron send empty mails on very
	       recent systems.</para>
	 </listitem>
	 <listitem>
	    <para>Fixed a bug which prevented fcrondyn to being used on NetBSD (thanks go to Gabor Z. Papp).</para>
	 </listitem>
	 <listitem>
	    <para>Added some casts in fileconf.c and save.c (to avoid some
	       warnings when compiling on HP-UX).</para>
	 </listitem>
	 <listitem>
	    <para>Added a FAQ entry on how to emulate an anacron entry.</para>
	 </listitem>
      </itemizedlist>

      <itemizedlist>
	 <title>From version 2.9.5.1 to 2.9.6</title>
	 <listitem>
	    <para>fixed the bug which made jobs run an hour too early after a
	       daylight saving time change.</para>
	    <para>Added detailed explanations about when a job will run when
	       there is a DST change in the FAQ.</para>
	 </listitem>
	 <listitem>
	    <para>fixed fcrondyn's "Unknown command" bug on x86_64 (thanks go to
	       Georgi Georgiev).</para>
	 </listitem>
	 <listitem>
	    <para>made fcrontab behave better when there is no space left in the
	       spool directory (used to truncate the fcrontab source file).
	    </para>
	 </listitem>
	 <listitem>
	    <para>Added a script, check_system_crontabs, to emulate Vixie cron's
	       behavior about /etc/crontab and /etc/cron.d. Please have a look
	       at the top of script/check_system_crontabs for more information.
	    </para>
	 </listitem>
	 <listitem>
	    <para>HP-UX support (needs more tests).</para>
	 </listitem>
	 <listitem>
	    <para>bug fix: restore umask even if fcron runs
	       unprivileged.</para>
	 </listitem>
      </itemizedlist>

      <itemizedlist>
	 <title>From version 2.9.5 to 2.9.5.1</title>
	 <listitem>
	    <para>Fixed serious security vulnerabilities in fcronsighup, and
	       improved fcronsighup's overall security (drop privileges, better
	       check user inputs, etc).</para>
	 </listitem>
	 <listitem>
	    <para>Fixed several typos in the doc.</para>
	 </listitem>
	 <listitem>
	    <para>Updated debian package scripts (patch from debian
	       maintainer).</para>
	 </listitem>
      </itemizedlist>

      <itemizedlist>
	 <title>From version 2.9.4 to 2.9.5</title>
	 <listitem>
	    <para>Ported to HP-UX (thanks go to Scott Tinsley)</para>
	 </listitem>
	 <listitem>
	    <para>Implemented fcrondyn commands run and runnow.</para>
	 </listitem>
	 <listitem>
	    <para>Merged patch from Russell Coker for new SE Linux.</para>
	 </listitem>
	 <listitem>
	    <para>Merged debian/ dir for debian package.</para>
	 </listitem>
	 <listitem>
	    <para>Mail reports: put the same username in the To: field than the
	       one we give as recipient to the MTA. mailto can now also be a
	       fully qualified email address.</para>
	 </listitem>
	 <listitem>
	    <para>changed a log message: a job which has ended without error is
	       reported has "completed" (which is more appropriated than
	       "terminated").
	    </para>
	 </listitem>
	 <listitem>
	    <para>Internal changes in log.c: code is more segmented, and code
	       has been added to be able to send log message to fcrondyn. Syslog
	       messages are now never longer than MAX_MSG (even with string from
	       strerror()).</para>
	 </listitem>
	 <listitem>
	    <para>Fixed a bug which happened on Daylight Saving Time change on
	       some systems. It would make fcron run into a nasty infinite loop.
	       Added a sanity check in set_nextexe() to avoid such
	       things.</para>
	 </listitem>
	 <listitem>
	    <para>Fixed a crash bug: in 2.9.4, if a user run ls_exeq when a job
	       is running and has been removed from its fcrontab, it makes fcron
	       crash.</para>
	 </listitem>
	 <listitem>
	    <para>Fixed a small bug: scripts were supposing perl was in
	       /usr/bin.</para>
	 </listitem>
	 <listitem>
	    <para>Fixed a bug which caused the pid of a child process to be
	       incorrectly read</para>
	 </listitem>
	 <listitem>
	    <para>fixed memory leak: some strings returned by log.c:make_msg()
	       weren't always free()d.</para>
	 </listitem>
	 <listitem>
	    <para>bug fix: fcrondyn commands renice and kill used not to handle
	       correctly the case where a job has several entries in exeq
	       (exesev jobs).</para>
	 </listitem>
      </itemizedlist>

      <itemizedlist>
	 <title>From version 2.9.3 to 2.9.4</title>
	 <listitem>
	    <para>Merged support for SE Linux (patch from Russell Coker: thanks!)
	    </para>
	 </listitem>
	 <listitem>
	    <para>Work on the documentation (fixed spelling mistakes, tried to
	       make things clearer in fcrontab.5) (thanks Bill Wohler for your
	       help!)</para>
	 </listitem>
	 <listitem>
	    <para>Changed the subject line of mail reports: it now contains the
	       subject line, and is very similar to vixie cron's one.</para>
	 </listitem>
	 <listitem>
	    <para>Added a sum-up at the end of ./configure.</para>
	 </listitem>
	 <listitem>
	    <para>bug fix: "makewhatis" bug is fixed -- at last!</para>
	    <para>In fact, the problems encountered were due to an abusively
	       ignored signal SIGPIPE.</para>
	 </listitem>
	 <listitem>
	    <para>bug fix: possible crash of fcron when trying to save a file
	       if there was no space left on device.</para>
	 </listitem>
	 <listitem>
	    <para>bug fix: we don't consider '-' and '_' as word delimiters for
	       a username before the command anymore, since many programs have
	       one of these characters in their name.</para>
	 </listitem>
	 <listitem>
	    <para>bug fix: option first was broken in fcron 2.9.3.</para>
	 </listitem>
	 <listitem>
	    <para>fixed a little typo in an error message
	       (could->couldn't)</para>
	 </listitem>
	 <listitem>
	    <para>bug fix: do not ignore the last line of a fcrontab if there
	       is no \n before the end of file.</para>
	 </listitem>
	 <listitem>
	    <para>fixed compile on SunOS 5.9 .</para>
	 </listitem>
	 <listitem>
	    <para>Fcron now compiles on MacOS X.</para>
	 </listitem>
	 <listitem>
	    <para>added some $srcdir to be able (again ;) ) to run configure
	       from another directory.</para>
	 </listitem>
	 <listitem>
	    <para>Perf improvement: use buffer for i/o in run_job().</para>
	 </listitem>
      </itemizedlist>

      <itemizedlist>
	 <title>From version 2.9.2 to 2.9.3</title>
	 <listitem>
	    <para>security issue: fcron used not to check the fcrontabs
	       installed by root for a standard user. This could make an
	       inattentive superuser install a user job runas(root)
	       involontary.</para>
	 </listitem>
	 <listitem>
	    <para>Perf improvement: we now use buffers to write something to
	       disk (became necessary due to the use of O_SYNC).</para>
	 </listitem>
	 <listitem>
	    <para>To avoid loss of data in case of an hardware failure or a
	       system crash, fcron now saves files to a temporary name, and then
	       renames them to their definitive filename if everything's
	       ok.</para>
	 </listitem>
	 <listitem>
	    <para>The PID indicated by fcrondyn is now the pid of the job itself
	       (up to now, it was the one of the fcron process controlling the
	       job).</para>
	 </listitem>
	 <listitem>
	    <para>Implemented functions kill (send a signal to a running job)
	       and renice (change the priority of a running job) in
	       fcrondyn.</para>
	 </listitem>
	 <listitem>
	    <para>Added fcron's option -q to control the lavg and serial queue
	       sizes.
	    </para>
	 </listitem>
	 <listitem>
	    <para>Added some timeouts in fcron for fcrondyn clients.</para>
	 </listitem>
	 <listitem>
	    <para>Fcron is less restrictive concerning mailto addresses. In
	       particular, you can now use address like user@host.</para>
	 </listitem>
	 <listitem>
	    <para>bug fix: in 2.9.2, fcrontab and fcron did not set correctly
	       some file modes.</para>
	 </listitem>
	 <listitem>
	    <para>bug (introduced in 2.9.1): when a job stops with an non-zero
	       exit status or because it has been signaled, send a mail to its
	       owner to inform him (in 2.9.1 and 2.9.2, the mail was sent, but
	       contained nothing).</para>
	 </listitem>
	 <listitem>
	    <para>code clean: use the same scheme for all struct types, removed
	       some code redundancy (save to disk management).</para>
	 </listitem>
      </itemizedlist>

      <itemizedlist>
	 <title>From version 2.9.1 to 2.9.2</title>
	 <listitem>
	    <para>Added a system fcrontab. Root can access it with fcrontab by
	       using "-u systab".</para>
	 </listitem>
	 <listitem>
	    <para>fcrondyn's ls_lavgq, ls_serialq and ls_exeq are now
	       functional.</para>
	 </listitem>
	 <listitem>
	    <para>mailto can now be set to a non-real user (for ex., an
	       alias).</para>
	 </listitem>
	 <listitem>
	    <para>fcron now calls shutdown() when a connection from fcrondyn is
	       closed.  Another change in the code should prevent fcrondyn from
	       not returning to the prompt after a command has been run.</para>
	 </listitem>
	 <listitem>
	    <para>use open() instead of fopen() to write files, for more
	       security.</para>
	 </listitem>
	 <listitem>
	    <para>fcrontab sets euid=uid before running the editor. This is
	       required by some programs (for instance, perl).</para>
	 </listitem>
	 <listitem>
	    <para>bug fix: using DESTDIR with make did not work with the
	       doc.</para>
	 </listitem>
	 <listitem>
	    <para>Code clean: changed macros to make parameters clearly
	       different from vars.</para>
	 </listitem>
      </itemizedlist>

      <itemizedlist>
	 <title>From version 2.9.0 to 2.9.1</title>
	 <listitem>
	    <para>fcron can now be run without root's privileges (<link
		  linkend="faq">see FAQ</link>)</para>
	 </listitem>
	 <listitem>
	    <para>added configure's option --with-boot-install .</para>
	 </listitem>
	 <listitem>
	    <para>Minor change in the PAM code of fcron: may work better on
	       some systems.</para>
	 </listitem>
	 <listitem>
	    <para>configure script now uses getpwnam() and getgrnam() instead of
	       reading directly /etc/passwd and /etc/group: this makes easier
	       the use of NIS, LDAP, etc.</para>
	 </listitem>
	 <listitem>
	    <para>Bug fix: using some "cmd > /dev/stderr" (or stdout) in a
	       script used to make fcron send a bogus output mail. (rewrite of
	       the code managing the output of jobs)</para>
	 </listitem>
	 <listitem>
	    <para>Bug fix: typo error prevented fcrontab to be compiled on some
	       systems.</para>
	 </listitem>
	 <listitem>
	    <para>Minor bug fix about stdout option.</para>
	 </listitem>
	 <listitem>
	    <para>Minor bug fix: giving fcrontab's option -c a relative path
	       now works correctly.</para>
	 </listitem>
      </itemizedlist>

      <itemizedlist>
	 <title>From version 2.1.0 to 2.9.0</title>
	 <listitem>
	    <para>Added some new options to fcron: -y, -o, -l; and some
	       fcrontab options: stdout and volatile. All these permit to make
	       fcron run in foreground, execute all the pending jobs (mainly
	       %-jobs), and return. May be used, for instance, in a ppp-up
	       script with a dialup connection to update a software
	       regularly.</para>
	 </listitem>
	 <listitem>
	    <para>Added fcrondyn: this software allows users to dialog
	       dyn-amically with a running fcron daemon. Currently, it can list
	       jobs of the user running it (or all jobs for root). In the near
	       future, it should be able to run a job, change its next time and
	       date of execution, renice a running job, send a signal to a
	       running job, etc.</para>
	 </listitem>
	 <listitem>
	    <para>All the documentation has been ported to SGML DocBook.</para>
	    <para>It results on a much better HTML version, which I recommand
	       you use. It is installed by default in fcron documentation
	       directory (for instance, on my system:
	       <filename>/usr/share/doc/fcron-X.X.X/</filename>).</para>
	 </listitem>
	 <listitem>
	    <para>Fcrontab.5 has been updated and improved. Some examples have
	       been added and some possible use of the different lines and
	       options are mentioned.</para>
	 </listitem>
	 <listitem>
	    <para>Added option random, which allows an entry run periodically to
	       be run at a random time in its intervals of execution, instead of
	       being run as soon as possible.</para>
	 </listitem>
	 <listitem>
	    <para>added some more checks in fileconf.c: allow user to use
	       hours, days, hourly, daily, etc options only with %-lines: it is
	       ignored if set for a &-line, which is quite confusing for users
	       who may type, for instance "&amp;hourly" instead of
	       "%hourly".</para>
	 </listitem>
	 <listitem>
	    <para>bug fixed: you can now use arguments in the var EDITOR and
	       VISUAL.</para>
	 </listitem>
	 <listitem>
	    <para>bug fixed: fcron used to call sometimes a sleep(-1), which
	       causes a freeze (no crash, but a very very long sleep :) ) under
	       system using LIBC5, and maybe on some non-linux systems. It was
	       not causing any problem under GLIBC2. Thanks go to Nick
	       Pasich.</para>
	 </listitem>
      </itemizedlist>
      
      <itemizedlist>
	 <title>From version 2.0.0 to 2.1.0</title>
	 <listitem>
	    <para>PAM support for fcron and fcrontab (need testing! - help
	       would be appreciated).</para>
	 </listitem>
	 <listitem>
	    <para>Fcron now send a mail if a job has noticenotrun set and could
	       not be run because of a queue full.</para>
	 </listitem>
	 <listitem>
	    <para>Fcron now compiles on AIX (thank you, John A. Parker!), and a
	       few AIX-only bugs have been fixed, but it may remain some
	       problems to correct.  Please try, and tell me!</para>
	 </listitem>
	 <listitem>
	    <para>We now use constants ROOTUID and ROOTGID instead of some
	       hard-coded "0", and those constants are defined by the configure
	       script (we use the uid/gid of the name given with the option
	       "--with-root{name|group}"). It allows fcron to be run on system
	       on which root is not uid/gid 0/0.</para>
	 </listitem>
	 <listitem>
	    <para>code cleaning.</para>
	 </listitem>
	 <listitem>
	    <para>bug fixed: setting lavg to (0,0,0) used to make the line be
	       added in the lavg queue instead of the serial queue (but the
	       lavgs were ignored anyway).</para>
	 </listitem>
	 <listitem>
	    <para>bug fixed: fcrontab's "-z" option was not ignoring previous
	       user's fcrontab version.</para> </listitem>
	 <listitem>
	    <para>bug fixed: on systems using putenv(), the var HOME, USER and
	       SHELL wasn't correctly assigned. On system supporting setenv()
	       (which is the default), the problem did not occur. (thanks go to
	       Evan A. Zacks).</para>
	 </listitem>
      </itemizedlist>


      <itemizedlist>
	 <title>From version 1.1.1 to 2.0.0</title>
	 <listitem>
	    <para>using SIGUSR2 on fcron makes it print its current schedule on
	       syslog and toggles on/off the printing of debug info on
	       syslog.</para>
	 </listitem>
	 <listitem>
	    <para>fcron behavior on serial and lavg queues overflow has changed: 
	       in previous versions, it used to run a job to make room to put
	       a new one. As it may conduct to a overwhelming of system
	       resources, the new job is now refused (and not run). An error
	       message is also logged through syslog.</para>
	 </listitem>
	 <listitem>
	    <para>a mail is now sent if the job exited due to a signal, or if
	       exit status is non-zero. Read FAQ if you experience problems
	       about that.</para>
	 </listitem>
	 <listitem>
	    <para>added a FAQ.</para>
	 </listitem>
	 <listitem>
	    <para>bug fixed: a midmonthly job executed after the 15th of the
	       month used to cause an endless loop. Thanks go to Guy Geens
	       (thanks a lot!).</para>
	 </listitem>
	 <listitem>
	    <para>bug fixed: inserting a job in serial queue or running a job
	       not finished at startup was broken, unless the job was
	       strict(no).</para>
	 </listitem>
	 <listitem>
	    <para>bug fixed: some 1.1.1 changes used to make fcron impossible
	       to compile without sendmail (./configure's option
	       "--with-sendmail=no").</para>
	 </listitem>
	 <listitem>
	    <para>bug fixed in sysV boot script: we know specify explicitly the
	       path to fcron.</para>
	 </listitem>
	 <listitem>
	    <para>bug fixed: unresolved error used to occur on some system not
	       defining getopt_long().</para>
	 </listitem>
      </itemizedlist>

      <itemizedlist>
	 <title>From version 1.1.0 to 1.1.1</title>
	 <listitem>
	    <para>security fix: sym link attack against fcrontab. Any user
	       allowed to use fcrontab used to be able to remove any fcrontab,
	       and potentially to truncate any file to zero-length (under
	       certain conditions, anyway).</para>
	 </listitem>
	 <listitem>
	    <para>fcron and fcrontab now have a configuration file: fcron.conf.
	       It contains the default paths (spool dir, etc) and programs to
	       use (editor, shell, etc). Thanks to that file, several fcron
	       processes can run simultaneously if they have a different config
	       (different spool dir and pid file).</para>
	 </listitem>
	 <listitem>
	    <para>added fcron's option "-m" to control the number of serial jobs
	       which can be executed simultaneously.</para>
	 </listitem>
	 <listitem>
	    <para>added fcron's option "-n" to create a new spool dir.</para>
	 </listitem>
	 <listitem>
	    <para>command line syntax of fcrontab has changed: you can know use
	       "user" (after the file name if any) instead of "-u user". It
	       should make fcrontab a little more intuitive.</para>
	 </listitem>
	 <listitem>
	    <para>It is now possible to put a user name between the time/date
	       fields and the shell command of a fcrontab line (for Vixie cron
	       format compatibility): it is equivalent to runas(user).</para>
	 </listitem>
	 <listitem>
	    <para>support of Solaris (and SysV).</para>
	 </listitem>
	 <listitem>
	    <para>early support of OpenBSD.</para>
	 </listitem>
	 <listitem>
	    <para>the installation scripts now use nsswitch.conf to detect if a
	       user or a group exists on the system. That way, naming services
	       (NYS, ldap, etc) are supported.</para>
	 </listitem>
	 <listitem>
	    <para>the man page and doc is now installed by default in
	       $prefix/share/{man|doc} (instead of the previous
	       $prefix/{man|doc}) ($prefix is generally "/usr").</para>
	 </listitem>
	 <listitem>
	    <para>bug corrected: fcron used not to add a serial_sev line to
	       serial/lavg queue if this line was running, saying "already in
	       serial queue".</para>
	 </listitem>

	 <listitem>
	    <para>bug corrected: a "all" in fcron.allow with no fcron.deny file
	       was not considered as an allow rule.</para>
	 </listitem>
      </itemizedlist>

      <itemizedlist>
	 <title>From version 1.0.3 to 1.1.0</title>
	 <listitem>
	    <para>The binary format of the binary fcrontabs has changed: there
	       is now no more need to reinstall the fcrontabs when upgrading
	       fcron (but you need to convert your fcrontabs to the new format
	       once), and this format should allow extensions without losing any
	       information.</para>
	 </listitem>
	 <listitem>
	    <para>better management of the errors in load/save fcrontabs
	       functions.</para>
	 </listitem>
	 <listitem>
	    <para>the doc is a clearer about @-lines.</para>
	 </listitem>
	 <listitem>
	    <para>more security tests by fcrontab in the case it is suid root
	       (but, if possible, it should be suid fcron as it is far more
	       secure).</para>
	 </listitem>
	 <listitem>
	    <para>we now remove unwanted fcrontabs before loading them in memory: 
	       well, it seems to be more logical like that :)) .</para>
	 </listitem>
	 <listitem>
	    <para>bug fix: using options first with a &-line may have led to
	       some problems during the first read by fcron (mail send
	       erroneously if noticenotrun was used, bad set of the first
	       execution's time and date or immediate execution if bootrun was
	       set: in fact, the line was not recognized as a new line).</para>
	 </listitem>
	 <listitem>
	    <para>bug fix: fcron used not to be able to be compiled from any
	       directory because of an absent -I. line option for the compiler
	       (the config.h file was not found).</para>
	 </listitem>
      </itemizedlist>

      <itemizedlist>
	 <title>From version 1.0.2 to 1.0.3</title>
	 <listitem>
	    <para>fcron can now be configured and compiled from any directory
	       (not only from the source dir).</para>
	 </listitem>
	 <listitem>
	    <para>bug fix: fcron now sets umask to the value it got at start
	       before running a job.</para>
	 </listitem>
	 <listitem>
	    <para>bug corrected: a bug used to make the "truncated" system not
	       to work correctly, so a too long log message used to make fcron
	       crash.</para>
	 </listitem>
      </itemizedlist>

      <itemizedlist>
	 <title>From version 1.0.1 to 1.0.2</title>
	 <listitem>
	    <para>the user for whom a job is run is now logged.</para>
	 </listitem>
	 <listitem>
	    <para>installation script is now more explicit about what it is
	       going to do.</para>
	 </listitem>
	 <listitem>
	    <para>a boolean value can now also be set by "yes" and "no".</para>
	 </listitem>
	 <listitem>
	    <para>bug corrected: bootrun option works again.</para>
	 </listitem>
	 <listitem>
	    <para>bug corrected: shell variable containing underscore (_) used
	       to be rejected.</para>
	 </listitem>
	 <listitem>
	    <para>bug corrected: installation script used not to check if user
	       fcron was in group fcron, in which case fcrontab doesn't work
	       correctly (it cannot, in that case, read the fcrontabs for
	       non-privileged users).</para>
	 </listitem>
      </itemizedlist>

      <itemizedlist>
	 <title>From version 1.0.0 to 1.0.1</title>
	 <listitem>
	    <para>security fix: a user used to be able to read a file owned by
	       root if root runs a "fcrontab -u user -e".</para>
	 </listitem>
      </itemizedlist>

      <itemizedlist>
	 <title>From version 0.9.5 to 1.0.0</title>
	 <listitem>
	    <para>added fcron's option "-s" to control the time between two
	       saves of the fcrontabs on disk.</para>
	 </listitem>
	 <listitem>
	    <para>installation scripts now support better FreeBSD and sh.</para>
	 </listitem>
	 <listitem>
	    <para>bug corrected: configure's options prefix and
	       without-sendmail used not to work.</para>
	 </listitem>
	 <listitem>
	    <para>bug corrected: installing an fcrontab by "fcrontab file"
	       wasn't working correctly with a relative path (a path not
	       beginning by a "/").</para>
	 </listitem>
      </itemizedlist>

      <itemizedlist>
	 <title>From version 0.9.4 to 0.9.5</title>
	 <listitem>
	    <para>security fix: the jobs of a fcrontab reinstalled by root used
	       to be run as root (until the next action of the owner on the
	       fcrontab).</para>
	 </listitem>
	 <listitem>
	    <para>added options strict and noticenotrun to tell fcron
	       respectively if a job should be removed from lavg queue if its
	       execution interval is exceeded, and if fcron should mail user to
	       report the non-execution of a job.</para>
	 </listitem>
	 <listitem>
	    <para>added option nolog in order to log only errors (i.e. no
	       message like "job x started"). This can help to reduce the disk
	       access and save energy on a laptop, and make the log more
	       readable if some jobs are run very often.</para>
	 </listitem>
	 <listitem>
	    <para>better handle of changes of the uids of users in /etc/passwd
	       (no more need to reinstall the fcrontabs).</para>
	 </listitem>
	 <listitem>
	    <para>fcron.deny and fcron.allow files are now owned by root (they
	       used to be owned by user fcron).</para>
	 </listitem>
	 <listitem>
	    <para>added ./configure's option --with-answer-all to be able to use
	       "make install" in a non-interactive way (can be useful for
	       automatic installers).</para>
	 </listitem>
	 <listitem>
	    <para>added option --with-rootname and --with-rootgroup to
	       ./configure script for a better support of exotic systems.</para>
	 </listitem>
	 <listitem>
	    <para>bug corrected in make install (script user-group): the script
	       used not to handle correctly the absence of both useradd and
	       adduser commands.  This script now checks and tries to add a
	       group fcron if necessary.</para>
	 </listitem>
      </itemizedlist>

      <itemizedlist>
	 <title>From version 0.9.3 to 0.9.4</title>
	 <listitem>
	    <para>security improvement: after the (horrible) root exploit found
	       in version 0.9.3, I decided to improve fcron/fcrontab's security.
	       I've included some strong (I hope :)) ) tests in fcron to ensure
	       that only root can run commands as superuser and use option
	       runas. Even an corrupted fcrontab should not be able to get
	       root's privileges. Pretty reassuring, isn't it?</para>
	 </listitem>
	 <listitem>
	    <para>runfreq(1) lines have been replaced and extended by a new kind
	       of line: the lines beginning by a "%". It's now possible to tell
	       fcron to run a command once an hour, a week, etc, but only at
	       some specified moments. For instance: '%weekly * 4-7 echo "foo"'
	       will run the command 'echo "foo"' once a week between 4 and 7 in
	       the morning. (see "man 5 fcrontab" for more details).</para>
	 </listitem>
	 <listitem>
	    <para>installation process improved: user is now consulted before
	       anything is done about installation in boot scripts, etc. The
	       default username of fcron is now ... fcron! (this is more secure
	       than daemon, which can be used by other programs). </para>
	 </listitem>
	 <listitem>
	    <para>fcron now adds the host name to the addresses of the mails it
	       sends.</para>
	 </listitem>
	 <listitem>
	    <para>fcrontab determines the identity of the running user by his
	       uid (it used to use the var USER). That way, fcrontab should act
	       as crontab under a "su".</para>
	 </listitem>
	 <listitem>
	    <para>bug fixed: a tmp file was not removed after a "fcron
	       -z"</para>
	 </listitem>
	 <listitem>
	    <para>bug fixed in fcrontab: an expression of the form "start-stop"
	       with start > stop used to be incorrectly managed by fcron.</para>
	 </listitem>
	 <listitem>
	    <para>bug fixed: when fcron and fcrontab were installed under a
	       non-privileged user rights, a normal user used to be not able to
	       use fcrontab.</para>
	 </listitem>
	 <listitem>
	    <para>bug fixed: while fcrontab was asking user if he would like to
	       correct an erroneous line, the answer was not correctly
	       handled.</para>
	 </listitem>
      </itemizedlist>

      <itemizedlist>
	 <title>From version 0.9.2.1 to 0.9.3</title>
	 <listitem>
	    <para>installation scripts improved.</para>
	 </listitem>
	 <listitem>
	    <para>added code to avoid infinite loops.</para>
	 </listitem>
	 <listitem>
	    <para>bugs corrected in the functions to set the time and date of
	       next execution.</para>
	 </listitem>
	 <listitem>
	    <para>bug corrected in the check for invalid lines.</para>
	 </listitem>
      </itemizedlist>

      <itemizedlist>
	 <title>From version 0.9.2 to 0.9.2.1</title>
	 <listitem>
	    <para>minor bug corrected in Makefile</para>
	 </listitem>
      </itemizedlist>

      <itemizedlist>
	 <title>From version 0.9.1 to 0.9.2</title>
	 <listitem>
	    <para>fcron now uses autoconf (the configure script), so it should
	       be easier to compile and install it and various systems.</para>
	 </listitem>
	 <listitem>
	    <para>support of lavg options for all systems where getloadavg() is
	       defined (BSD unix, etc) and on Linux systems with a proc
	       filesystem (fcron can use /proc/loadavg).</para>
	 </listitem>
	 <listitem>
	    <para>a job can now be executed several times simultaneously if
	       option exesev is set to 1.</para>
	 </listitem>
	 <listitem>
	    <para>user can determine if a job can be put several times in the
	       serial queue simultaneously thanks to option serialonce.</para>
	 </listitem>
	 <listitem>
	    <para>fcron does not wait anymore for the completion of all jobs of
	       a file before deleting it from memory.</para>
	 </listitem>
	 <listitem>
	    <para>fcron handles correctly the jobs which are both serial and
	       lavg.</para>
	 </listitem>
	 <listitem>
	    <para>fcron now runs under a specific user and group (other than
	       root) for basic security reasons.</para>
	 </listitem>
	 <listitem>
	    <para>bug corrected: fcron used to crash after a file was deleted
	       from memory in some conditions.</para>
	 </listitem>
	 <listitem>
	    <para>corrected the bug which used to appear when a line was put
	       several times in the serial queue: in this case, fcron used not
	       to count correctly the number of running serial jobs.</para>
	 </listitem>
	 <listitem>
	    <para>bug corrected: fcrontab used not to remove the temporary file
	       it creates if no modification where done to a file after an
	       edition using the -e option and on errors.</para>
	 </listitem>
	 <listitem>
	    <para>bug corrected: fcrontab now defines correctly the remain
	       value of a line based on time and date beginning with a "&" but
	       without runfreq definition.</para>
	 </listitem>
	 <listitem>
	    <para>bug corrected: fcron used to not install correctly a file
	       edited if a correction was made.</para>
	 </listitem>
	 <listitem>
	    <para>bug corrected: reset option was not working correctly when
	       set to a single line.</para>
	 </listitem>
      </itemizedlist>

      <itemizedlist>
	 <title>From version 0.9.0 to 0.9.1</title>
	 <listitem>
	    <para>support of the option mailto for each line (it used to be set
	       for the whole file).</para>
	 </listitem>
	 <listitem>
	    <para>the value of the runas and mailto options are now stored
	       internally as a uid number: you must reinstall all the system's
	       fcrontabs if you change the uid of a user.</para>
	 </listitem>
	 <listitem>
	    <para>Support of options "lavg*", in order to run a job under a
	       specific 1, 5 and/or 15 minutes system load average value(s).
	       When the job should be run, it is placed in a specific queue and
	       the load average is checked regularly until the right value(s)
	       is/are got. The options "lavgor" and "lavgand" permits users to
	       tell fcron if they prefer to perform a logic OR or AND between
	       the 1, 5 and 15 load average values. The option "until" can be
	       use to force the execution of a job after a determined timeout if
	       the right conditions to run the job are not filled.</para>
	 </listitem>
	 <listitem>
	    <para>fcron now uses putenv() in place of setenv() (setenv() is not
	       POSIX compliant).</para>
	 </listitem>
	 <listitem>
	    <para>a mailto option set to "" is now equivalent to
	       "mail(false)".</para>
	 </listitem>
	 <listitem>
	    <para>corrected the bug which used to make a bootrun and runfreq(1)
	       job executed twice when fcron's start occurs in an interval of
	       execution of the job.</para>
	 </listitem>
	 <listitem>
	    <para>corrected the bug which used to make fcron crash after
	       serial_array is resized.</para>
	 </listitem>
      </itemizedlist>

      <itemizedlist>
	 <title>From version 0.8.3 to 0.9.0</title>
	 <listitem>
	    <para>support of options in fcrontabs. Options can be specific to a
	       line or defined once for every line located after their
	       definition (a special option "reset" set all options to their
	       default). Some options also have too names: a long name and an
	       abbreviation.</para>
	 </listitem>
	 <listitem>
	    <para>jobs can now be run be run one after the other (option
	       "serial"): when the job should normally be run, it is added to a
	       queue, which entries are executed one by one. It permits to avoid
	       the use of a lot of system resources for a brief moment by the
	       simultaneous execution of several tasks.</para>
	 </listitem>
	 <listitem>
	    <para>jobs can be run at system start up if they should have been
	       run during system down time (option "bootrun").</para>
	 </listitem>
	 <listitem>
	    <para>root can run jobs as an another user (option "runas")</para>
	 </listitem>
	 <listitem>
	    <para>user can set a nice value to a job, but only root can use a
	       negative value (a negative value will increase priority)</para>
	 </listitem>
	 <listitem>
	    <para>user can choose to perform a logic AND or a logic OR between
	       day of month and day of week (option "dayor" and "dayand")</para>
	 </listitem>
	 <listitem>
	    <para>user can choose to mail the output of jobs (option "mail") if
	       any, and can force fcron to send a mail even if output is
	       zero-length (option "forcemail").</para>
	 </listitem>
	 <listitem>
	    <para>fixed the bug which used to make fcron run a job with a
	       runfreq set to 1 at a wrong time.</para>
	 </listitem>
	 <listitem>
	    <para>fixed a bug which used to make fcrontab crash after several
	       corrections in edit mode.</para>
	 </listitem>
      </itemizedlist>

      <itemizedlist>
	 <title>From version 0.8.2 to 0.8.3</title>
	 <listitem>
	    <para>(all this bugs appeared in version 0.8.2 :)</para>
	 </listitem>
	 <listitem>
	    <para>fixed the bug which used to make fcron crash after a
	       SIGHUP</para>
	 </listitem>
	 <listitem>
	    <para>fixed the bug which used to prevent fcron from running some
	       job based on time and date</para>
	 </listitem>
	 <listitem>
	    <para>fixed the bug which used to makes fcron run the jobs one
	       second too late</para>
	 </listitem>
      </itemizedlist>

      <itemizedlist>
	 <title>From version 0.8.1 to 0.8.2</title>
	 <listitem>
	    <para>code has been optimized: The jobs are now queued in order of
	       execution. It permits avoid useless tests of all jobs every time
	       fcron wakes up, speeds up the determination of the time fcron
	       should sleep, speeds up the processing after the end of a job,
	       etc. I don't know why I haven't made it before :-) ...</para>
	 </listitem>
	 <listitem>
	    <para>fcrontab has been improved: it is now more stable (many bugs
	       which used to make fcrontab crash in case of errors in the
	       fcrontab has been fixed). Plus, it now asks if you want to make
	       corrections if needed when editing.</para>
	 </listitem>
      </itemizedlist>

      <itemizedlist>
	 <title>From version 0.8.0 to 0.8.1</title>
	 <listitem>
	    <para>ported to FreeBSD 4.0</para>
	 </listitem>
      </itemizedlist>

      <itemizedlist>
	 <title>From version 0.7.0 to 0.8.0</title>
	 <listitem>
	    <para>corrected the bug which keep normal users from listing and
	       editing their current configuration file with fcrontab -l or
	       -e.</para>
	 </listitem>
	 <listitem>
	    <para>corrected the bugs which used to block fcron when a task was
	       marked for execution but fcron stopped before it has been
	       launched, and when fcron stopped after the end of a job but
	       before the output has been mailed.</para>
	 </listitem>
	 <listitem>
	    <para>day of week 0 and 7 now both mean Sunday.</para>
	 </listitem>
	 <listitem>
	    <para>the abbreviations of months and day of week are not any more
	       case dependent.</para>
	 </listitem>
	 <listitem>
	    <para>months are now defined from 1 to 12 (and not from 0 to 11) (it
	       was a little bit illogical :-).</para>
	 </listitem>
	 <listitem>
	    <para>you can now force spaces in strings if you place them in
	       quotes.</para>
	 </listitem>
	 <listitem>
	    <para>I discovered ispell :-) ...</para>
	 </listitem>
	 <listitem>
	    <para>I've added a kind of signature in the formated configuration
	       files in order to keep the daemon from attempting to read an old
	       configuration file which doesn't use the same syntax.</para>
	 </listitem>
	 <listitem>
	    <para>You can now install a file with fcrontab from standard
	       input.</para>
	 </listitem>
	 <listitem>
	    <para>others minor adds and bug corrections.</para>
	 </listitem>
      </itemizedlist>
   </sect1>

<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-parent-document:("fcron-doc.sgml" "book" "chapter" "sect1" "")
End:
-->
   
