rpms/anacron/devel anacron_2.3-13.patch,NONE,1.1

Marcela Mašláňová (mmaslano) fedora-extras-commits at redhat.com
Thu Aug 9 13:27:24 UTC 2007


Author: mmaslano

Update of /cvs/pkgs/rpms/anacron/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv20544

Added Files:
	anacron_2.3-13.patch 
Log Message:
Add patch


anacron_2.3-13.patch:

--- NEW FILE anacron_2.3-13.patch ---
--- anacron-2.3.orig/ChangeLog
+++ anacron-2.3/ChangeLog
@@ -1,3 +1,8 @@
+   Changes in Anacron 2.3.1
+   ------------------------
+* documentation no longer suggests adding local directories to the PATH
+
+
    Changes in Anacron 2.3
    ----------------------
 * anacron can now read an arbitrary anacrontab file, use the -t option
--- anacron-2.3.orig/README
+++ anacron-2.3/README
@@ -40,7 +40,7 @@
 off for the night or for the weekend, these scripts rarely get run.
 
    Anacron solves this problem.  These jobs can simply be scheduled as
-Anacron-jobs with periods of 1, 7 and 30 days.
+Anacron-jobs with periods of 1, 7 and a special target called @monthly.
 
 
      What Anacron is not ?
@@ -109,11 +109,11 @@
 -----Cut
 # /etc/anacrontab example
 SHELL=/bin/sh
-PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
 # format: period delay job-identifier command
 1       5       cron.daily      run-parts /etc/cron.daily
 7       10      cron.weekly     run-parts /etc/cron.weekly
-30      15      cron.monthly    run-parts /etc/cron.monthly
+ at monthly      15      cron.monthly    run-parts /etc/cron.monthly
 -----Cut
 
 5. Put the command "anacron -s" somewhere in your boot-scripts.
--- anacron-2.3.orig/TODO
+++ anacron-2.3/TODO
@@ -1,6 +1,3 @@
-anacron runs jobs twice in a 31 day month
-add hostname to emails sent to admin
-allow user anacrontabs
 make manpages match #defines automagically --> sed fu
 full ANSI / POSIX compliance
 code cleaning
--- anacron-2.3.orig/anacron.8
+++ anacron-2.3/anacron.8
@@ -1,13 +1,15 @@
-.TH ANACRON 8 2000-06-22 "Sean 'Shaleh' Perry" "Anacron Users' Manual"
+.TH ANACRON 8 2004-07-11 "Pascal Hakim" "Anacron Users' Manual"
 .SH NAME
 anacron \- runs commands periodically
 .SH SYNOPSIS
 .B anacron \fR[\fB-s\fR] [\fB-f\fR] [\fB-n\fR] [\fB-d\fR] [\fB-q\fR]
-[\fB-t anacrontab\fR] [\fIjob\fR] ...
+[\fB-t anacrontab\fR] [\fB-S spooldir\fR] [\fIjob\fR] ...
 .br
-.B anacron -u [\fB-t anacrontab\fR] \fR[\fIjob\fR] ...
+.B anacron [\fB-S spooldir\fR] -u [\fB-t anacrontab\fR] \fR[\fIjob\fR] ...
 .br
 .B anacron \fR[\fB-V\fR|\fB-h\fR]
+.br
+.B anacron -T [\fB-t anacrontab\fR]
 .SH DESCRIPTION
 Anacron
 can be used to execute commands periodically, with a
@@ -58,7 +60,10 @@
 completely independent.
 .PP
 If a job generates any output on its standard output or standard error,
-the output is mailed to the user running Anacron (usually root).
+the output is mailed to the user running Anacron (usually root), or to
+the address contained by the MAILTO environment variable in the crontab, if such
+exists. If the LOGNAME environment variable is set, it will be used as From:
+field.
 .PP
 Informative messages about what Anacron is doing are sent to \fBsyslogd(8)\fR
 under facility \fBcron\fR, priority \fBnotice\fR.  Error messages are sent at
@@ -98,6 +103,15 @@
 .B -t anacrontab
 Use specified anacrontab, rather than the default
 .TP
+.B -T
+Anacrontab testing. The configuration file will be tested for validity. If
+there is an error in the file, an error will be shown and anacron will 
+return 1. Valid anacrontabs will return 0.
+.TP
+.B -S spooldir
+Use the specified spooldir to store timestamps in. This option is required for
+users who wish to run anacron themselves.
+.TP
 .B -V
 Print version information, and exit.
 .TP
@@ -115,6 +129,8 @@
 file.  See
 .B tzset(3)
 for more information.
+
+Timestamp files are created in the spool directory for each job in anacrontab. These are never removed automatically by anacron, and should be removed by hand if a job is no longer being scheduled.
 .SH FILES
 .TP
 .I /etc/anacrontab
@@ -144,4 +160,7 @@
 The current implementation is a complete rewrite by Itai Tzur
 <itzur at actcom.co.il>.
 .PP
-The code base is currently maintained by Sean 'Shaleh' Perry <shaleh@(debian.org|valinux.com)>.
+The code base was maintained by Sean 'Shaleh' Perry <shaleh@(debian.org|valinux.com)>.
+.PP
+Since 2004, it is maintained by Pascal Hakim <pasc@(debian.org|redellipse.net)>.
+
--- anacron-2.3.orig/anacron.apm
+++ anacron-2.3/anacron.apm
@@ -0,0 +1,19 @@
+#! /bin/sh
+
+# This script makes anacron jobs start to run when the machine is
+# plugged into AC power, or woken up.  For a laptop, these are the 
+# closest parallels to turning on a desktop.
+
+# The /etc/init.d/anacron script now normally tries to avoid running
+# anacron unless on AC power, so as to avoid running down the battery.
+# (Things like the slocate updatedb cause a lot of IO.)  Rather than
+# trying to second-guess which events reflect having or not having
+# power, we just try to run anacron every time and let it abort if
+# there's no AC.  You'll see a message on the cron syslog facility 
+# (typically /var/log/cron) if it does run.
+
+case "$1,$2" in
+change,power|resume,*)
+    /etc/init.d/anacron start >/dev/null
+    ;;
+esac
--- anacron-2.3.orig/anacrontab.5
+++ anacron-2.3/anacrontab.5
@@ -1,4 +1,4 @@
-.TH ANACRONTAB 5 1998-02-02 "Itai Tzur" "Anacron Users' Manual"
+.TH ANACRONTAB 5 2004-07-11 "Pascal Hakim" "Anacron Users' Manual"
 .SH NAME
 /etc/anacrontab \- configuration file for anacron
 .SH DESCRIPTION
@@ -8,10 +8,13 @@
 three kinds:  job-description lines, environment
 assignments, or empty lines.
 .PP
-Job-description lines are of the form:
+Job-description lines are of one of these two forms:
 .PP
    period  delay  job-identifier  command
 .PP
+.PP
+   @period_name delay job-identify command
+.PP
 The
 .I period
 is specified in days, the
@@ -22,7 +25,12 @@
 the job in Anacron messages,
 and as the name for the job's timestamp file.  The
 .I command
-can be any shell command.
+can be any shell command. The fields can be seperated by blank spaces or tabs.
+The
+.I period_name
+can only be set to monthly at the present time. This will ensure jobs
+are only run once a month, no matter the number of days in this month,
+or the previous month.
 .PP
 Environment assignment lines are of the form:
 .PP
@@ -38,6 +46,8 @@
 .PP
 Empty lines are either blank lines, line containing white-space only, or
 lines with white-space followed by a '#' followed by an arbitrary comment.
+.PP
+You can continue a line onto the next line by ending it with a '\'.
 .SH "SEE ALSO"
 .B anacron(8)
 .PP
@@ -46,3 +56,5 @@
 file.
 .SH AUTHOR
 Itai Tzur <itzur at actcom.co.il>
+.PP
+Currently maintained by Pascal Hakim <pasc@(debian.org|redellipse.net)>.
--- anacron-2.3.orig/debian/0anacron.daily
+++ anacron-2.3/debian/0anacron.daily
@@ -0,0 +1,12 @@
+#!/bin/sh
+#
+# anacron's cron script
+#
+# This script updates anacron time stamps. It is called through run-parts
+# either by anacron itself or by cron.
+#
+# The script is called "0anacron" to assure that it will be executed
+# _before_ all other scripts.
+
+test -x /usr/sbin/anacron || exit 0
+anacron -u cron.daily
--- anacron-2.3.orig/debian/0anacron.monthly
+++ anacron-2.3/debian/0anacron.monthly
@@ -0,0 +1,12 @@
+#!/bin/sh
+#
+# anacron's cron script
+#
+# This script updates anacron time stamps. It is called through run-parts
+# either by anacron itself or by cron.
+#
+# The script is called "0anacron" to assure that it will be executed
+# _before_ all other scripts.
+
+test -x /usr/sbin/anacron || exit 0
+anacron -u cron.monthly
--- anacron-2.3.orig/debian/0anacron.weekly
+++ anacron-2.3/debian/0anacron.weekly
@@ -0,0 +1,12 @@
+#!/bin/sh
+#
+# anacron's cron script
+#
+# This script updates anacron time stamps. It is called through run-parts
+# either by anacron itself or by cron.
+#
+# The script is called "0anacron" to assure that it will be executed
+# _before_ all other scripts.
+
+test -x /usr/sbin/anacron || exit 0
+anacron -u cron.weekly
--- anacron-2.3.orig/debian/compat
+++ anacron-2.3/debian/compat
@@ -0,0 +1 @@
+4
--- anacron-2.3.orig/debian/anacrontab
+++ anacron-2.3/debian/anacrontab
@@ -0,0 +1,12 @@
+# /etc/anacrontab: configuration file for anacron
+
+# See anacron(8) and anacrontab(5) for details.
+
+SHELL=/bin/sh
+PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
+
+# These replace cron's entries
+1	5	cron.daily	 nice run-parts --report /etc/cron.daily
+7	10	cron.weekly	 nice run-parts --report /etc/cron.weekly
+ at monthly	15	cron.monthly nice run-parts --report /etc/cron.monthly
+
--- anacron-2.3.orig/debian/apm.d
+++ anacron-2.3/debian/apm.d
@@ -0,0 +1,19 @@
+#! /bin/sh
+
+# This script makes anacron jobs start to run when the machine is
+# plugged into AC power, or woken up.  For a laptop, these are the 
+# closest parallels to turning on a desktop.
+
+# The /etc/init.d/anacron script now normally tries to avoid running
+# anacron unless on AC power, so as to avoid running down the battery.
+# (Things like the slocate updatedb cause a lot of IO.)  Rather than
+# trying to second-guess which events reflect having or not having
+# power, we just try to run anacron every time and let it abort if
+# there's no AC.  You'll see a message on the cron syslog facility 
+# (typically /var/log/cron) if it does run.
+
+case "$1,$2" in
+change,power|resume,*)
+    /usr/sbin/invoke-rc.d anacron start >/dev/null   
+    ;;
+esac
--- anacron-2.3.orig/debian/init.d
+++ anacron-2.3/debian/init.d
@@ -0,0 +1,48 @@
+#! /bin/sh
+# /etc/init.d/anacron: start anacron
+#
+
+PATH=/bin:/usr/bin:/sbin:/usr/sbin
+
+test -x /usr/sbin/anacron || exit 0
+
+. /lib/lsb/init-functions
+
+case "$1" in
+  start)
+    log_daemon_msg "Starting anac(h)ronistic cron" "anacron"
+    if test -x /usr/bin/on_ac_power 
+    then
+        /usr/bin/on_ac_power >/dev/null
+        if test $? -eq 1
+        then
+          log_progress_msg "deferred while on battery power."
+	  log_end_msg 0
+	  exit 0
+        fi
+    fi
+
+    # on_ac_power doesn't exist, on_ac_power returns 0 (ac power being used)
+    # or on_ac_power returns 255 (undefined, desktop machine without APM)
+    start-stop-daemon --start --exec /usr/sbin/anacron -- -s
+    log_end_msg 0
+    ;;
+  restart|force-reload)
+	# nothing to do
+    :
+    ;;
+  stop)
+    log_daemon_msg "Stopping anac(h)ronistic cron" "anacron"
+    start-stop-daemon --stop --exec /usr/sbin/anacron --oknodo --quiet
+    log_end_msg 0
+    ;;
+  status)
+    exit 4
+    ;;
+  *)
+    echo "Usage: /etc/init.d/anacron {start|stop}"
+    exit 2
+    ;;
+esac
+
+exit 0
--- anacron-2.3.orig/debian/control
+++ anacron-2.3/debian/control
@@ -0,0 +1,27 @@
+Source: anacron
+Section: admin
+Priority: optional
+Build-Depends: debhelper (>= 4.0)
+Maintainer: Pascal Hakim <pasc at debian.org>
+Standards-Version: 3.7.2
+
+Package: anacron
+Architecture: any
+Depends: ${shlibs:Depends}, debianutils (>= 1.7), ${misc:Depends}, lsb-base (>= 3.0-10)
+Replaces: pe
+Recommends: cron (>= 3.0pl1-43), exim4 | mail-transport-agent, sysklogd | system-log-daemon
+Suggests: powermgmt-base
+Description: cron-like program that doesn't go by time
+ Anacron (like `anac(h)ronistic') is a periodic command scheduler.  It
+ executes commands at intervals specified in days.  Unlike cron, it
+ does not assume that the system is running continuously.  It can
+ therefore be used to control the execution of daily, weekly and
+ monthly jobs (or anything with a period of n days), on systems that
+ don't run 24 hours a day.  When installed and configured properly,
+ Anacron will make sure that the commands are run at the specified
+ intervals as closely as machine-uptime permits.
+ .
+ This package is pre-configured to execute the daily jobs of the Debian 
+ system. You should install this program if your system isn't powered on
+ 24 hours a day to make sure the maintenance jobs of other Debian packages
+ are executed each day.
--- anacron-2.3.orig/debian/copyright
+++ anacron-2.3/debian/copyright
@@ -0,0 +1,26 @@
+
+This is the Debian Linux prepackaged version of the anacron utility.
+
+    Anacron - run commands periodically
+    Copyright (C) 1998  Itai Tzur <itzur at actcom.co.il>
+    Copyright (C) 1999  Sean 'Shaleh' Perry <shaleh at debian.org>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc., 51
+    Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
+anacron can be found on http://www.sourceforge.net.
+
+On Debian Linux systems, the complete text of the GNU General
+Public License can be found in `/usr/share/common-licenses/GPL'.
--- anacron-2.3.orig/debian/cron.d
+++ anacron-2.3/debian/cron.d
@@ -0,0 +1,6 @@
+# /etc/cron.d/anacron: crontab entries for the anacron package
+
+SHELL=/bin/sh
+PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
+
+30 7    * * *   root	test -x /etc/init.d/anacron && /usr/sbin/invoke-rc.d anacron start >/dev/null
--- anacron-2.3.orig/debian/dirs
+++ anacron-2.3/debian/dirs
@@ -0,0 +1,11 @@
+etc/cron.d
+etc/init.d
+etc/cron.daily
+etc/cron.weekly
+etc/cron.monthly
+etc/apm/event.d
+usr/sbin
+usr/share/doc/anacron
+usr/share/man/man5
+usr/share/man/man8
+var/spool/anacron
--- anacron-2.3.orig/debian/docs
+++ anacron-2.3/debian/docs
@@ -0,0 +1 @@
+README TODO
--- anacron-2.3.orig/debian/rules
+++ anacron-2.3/debian/rules
@@ -0,0 +1,69 @@
+#!/usr/bin/make -f
+# Made with the aid of dh_make, by Craig Small
+# Sample debian/rules that uses debhelper. GNU copyright 1997 by Joey Hess.
+# Some lines taken from debmake, by Cristoph Lameter.
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+build: build-stamp
+build-stamp:
+	dh_testdir
+	
+	$(MAKE)
+
+	touch build-stamp
+
+clean:
+	dh_testdir
+	dh_testroot
+	rm -f build-stamp install-stamp
+
+	-$(MAKE) clean
+
+	dh_clean
+
+install: install-stamp
+install-stamp: build-stamp
+	dh_testdir
+	dh_testroot
+	dh_clean -k
+	dh_installdirs
+
+	$(MAKE) install PREFIX=debian/anacron MANDIR=debian/anacron/usr/share/man
+	install -m 644 debian/anacrontab debian/anacron/etc/
+	install debian/0anacron.daily debian/anacron/etc/cron.daily/0anacron
+	install debian/0anacron.weekly debian/anacron/etc/cron.weekly/0anacron
+	install debian/0anacron.monthly debian/anacron/etc/cron.monthly/0anacron
+	install -m 755 debian/apm.d debian/anacron/etc/apm/event.d/anacron
+
+	touch install-stamp
+
+# Build architecture-independent files here.
+binary-indep: build install
+# We have nothing to do 
+
+# Build architecture-dependent files here.
+binary-arch: build install
+	dh_testdir
+	dh_testroot
+	dh_installdocs
+	dh_installinit -u"start 89 2 3 4 5 . stop 11 0 1 6 ."
+	dh_installcron
+	dh_installman
+	dh_installchangelogs ChangeLog
+	#dh_installdebconf
+	dh_strip
+	dh_compress
+	dh_fixperms
+	dh_installdeb
+	dh_shlibdeps
+	dh_gencontrol
+	dh_md5sums
+	dh_builddeb
+
+source diff:                                                                  
+	@echo >&2 'source and diff are obsolete - use dpkg-source -b'; false
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary
--- anacron-2.3.orig/debian/anacron.postinst
+++ anacron-2.3/debian/anacron.postinst
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+case "$1" in
+    configure)
+        # continue below
+    ;;
+
+    abort-upgrade|abort-remove|abort-deconfigure)
+        exit 0
+    ;;
+
+    *)
+        echo "postinst called with unknown argument \`$1'" >&2
+        exit 0
+    ;;
+esac
+
+#DEBHELPER#
--- anacron-2.3.orig/debian/changelog
+++ anacron-2.3/debian/changelog
@@ -0,0 +1,471 @@
+anacron (2.3-13) unstable; urgency=medium
+
+  * Remove debconf remnant
+    (Closes: #392253)
+
+ -- Pascal Hakim <pasc at debian.org>  Sat, 14 Oct 2006 18:47:00 +1000
+
+anacron (2.3-12) unstable; urgency=medium
+
+  * Removed debconf note as it's really not needed anymore. Thanks to all the
+    people who did translations.
+    - Removed un-needed debconf note
+      (Closes: #388703)
+    - Arabic (Ossama M. Khayat <okhayat at yahoo.com>)
+      (Closes: #320761)
+    - Danish (Claus Hindsgaul <claus.hindsgaul at gmail.com>)
+    - Dutch (Frans Pop <aragorn at tiscali.nl>)
+      (Closes: #374267)
+    - German (Erik Schanze <schanzi_ at gmx.de>)
+    - Italian (Luca Monducci <luca.mo at tiscali.it>)
+      (Closes: #375411)
+    - Portuguese (Miguel Figueiredo <elmig at debianpt.org>)
+      (Closes: #336839)
+    - Russian (Yuriy Talakan <yt at amur.elektra.ru>)
+      (Closes: #310069)
+    - Spanish (Lucas Wall <lwall at debian.org>)
+      (Closes: #374312)
+    - Swedish (Daniel Nylander <yeager at lidkoping.net>)
+      (Closes: #331300)
+    - Vietnamese (Clytie Siddall <clytie at riverland.net.au>)
+      (Closes: #307740)
+  * Fixed description to not have a leading particle
+    (Closes: #320303)
+  * Start anacron properly on bootup using start-stop-daemon to ensure
+    automated installers work properly
+    (Closes: #310797)
+  * Clarified README.Debian to make more sense and match what's going on
+    (Closes: #307114)
+  * Added alternate dependency on debconf-2.0
+    (as per <20050802224620.GB12557 at kitenet.net>)
+    (Closes: #331739)
+  * Changed default path to the default cron one to reduce confusion
+    (Closes: #304327)
+  * Bumped up the debhelper compability version to 4
+  * Bumped standards version to 3.7.2
+  * Cleaned up debian/
+  * Added { and } to the Usage line to make bash competition work
+    (Closes: #350603)
+  * Added a note about timestamp files in the spool directory in the man
+    page.
+    (Closes: #305424)
+  * Fixed substition in debconf template, and make escape it properly
+    (Closes: #366850)
+  * Test whether anacron is executable, not just present
+    (Closes: #378380)
+  * Make anacron have an lsb-compliant init.d script
+    (Closes: #384689)
+
+ -- Pascal Hakim <pasc at debian.org>  Mon, 09 Oct 2006 18:47:00 +1000
+
+anacron (2.3-11) unstable; urgency=low
+
+  * Added @yearly target in anacrontab.
+    (Closes: #258617)
+  * Let an anacrontabs be multiline
+    (Closes: #215684)
+  * Remove dependency on an MTA (it's a recommend instead)
+    (Closes: #252633)
+  * Remove dependency on syslog (recommend as well)
+    (Closes: #252633)
+  * Fix the kill sysvinit invocations
+    (Closes: #289547)
+
+ -- Pascal Hakim <pasc at debian.org>  Wed, 9 Feb 2005 08:08:00 +1100
+
+anacron (2.3-10) unstable; urgency=low
+
+  * Changed current maintainer in documentation
+    (Closes: #256590)
+  * Added precisions to @monthly usage in anacrontab (5).
+    (Closes: #256590)
+  * Fixed a printf segfault when DEBUG mode is enabled
+    (Thanks to Martin Quinson <mquinson at ens-lyon.fr>)
+    (Closes: #257669)
+  * Added two variables to change the ability to change the 
+    destination and source emails for anacron emails
+    (Thanks to Martin Quinson <mquinson at ens-lyon.fr>)
+    (Closes: #223337)
+  * Translations:
+    + Updated German (Erik Schanze <schanzi_usenet at gmx.de>)
+      (Closes: #250293)
+    + Added Brazilian Portuguese (Andre Luis Lopes <andrelop at debian.org>)
+      (Closes: #254107)
+    + Added Spanish (Lucas Wall <kthulhu at kadath.com.ar>)
+      (Closes: #254559)
+    + Addedd Czech (Jan Outrata <outrataj at upcase.inf.upol.cz>)
+
+ -- Pascal Hakim <pasc at debian.org>  Sun, 11 Jul 2004 04:52:00 +1000
+
+anacron (2.3-9) unstable; urgency=low
+
+  * Fixed priority
+  * Added translations
+    + Danish from Claus Hindsgaul <claus_h at image.dk>
+      (Closes: #242814)
+    + Japanese from Hideki Yamane <henrich at samba.gr.jp>
+      (Closes: #243268)
+    + Italian from Luca Monducci <luca.mo at tiscali.it>
+      (Closes: #249072)
+    + German from Erik Schanze <schanzi_usenet at gmx.de>
+      (Closes: #250293)
+    + Dutch from Luk Claes <luk.claes at ugent.be>
+      (Closes: #250657)
+   * Added an option to check the validity of the config file.
+     (Closes: #248692)
+   * Make the -t option work with non-absolute path names.
+   * Added an extra anacrontab entry (@monthly) which can be used to
+     schedule a job to run once a month.
+     (Closes: #35754, #43947)
+   * Add the ability for normal users to run anacron by specifying a 
+     spool directory.
+     (Closes: #65853)
+
+ -- Pascal Hakim <pasc at debian.org>  Mon, 31 May 2004 23:30:00 +1000
+
+anacron (2.3-8) unstable; urgency=low
+
+  * New maintainer. A side effect of this will be to fix the email alias.
+    (Closes: #215685)
+  * Updated to standard versions 3.6.1.0
+    + Rebuild fixes /usr/share/doc symlink
+      (Closes: #224559)
+  * Fixed FTBFS bug.
+    (Closes: #240043)
+  * Added powermgmt-base to Suggests.
+    (Closes: #137435, #140912)
+  * Fixed up README.Debian to remove a missing example. That example is now
+    included by default, as anacron will check the power status.
+    (Closes: #181034)
+  * Added debconf-isation.
+    (Patch from Martin Quinson <Martin.Quinson at ens-lyon.fr>)
+    (closes: #134017)
+  * Fixed grammar mistake.
+    (Patch from Julian Gilbey <jdg at debian.org>)
+    (Closes: #184649)
+  * Use invoke-rc.d instead of calling the init.d script directly
+    (Closes: #187544)
+  * Clarified documentation in respect to tabs and spaces in anacrontab(5).
+    (Closes: #214314)
+  * Include hostname in mail subject
+    (Patch from Martin Quinson <Martin.Quinson at ens-lyon.fr>)
+    (Closes: #63543, #45149)
+  * Make the From field in mails RFC2822-compliant
+    (Patch from Santiago Villa <sanvila at unex.es>)
+    (Closes: #163083)
+  * Update depency on exim to exim4, which is the new standard mailer
+    (Closes: #228571)
+  * Make "/etc/init.d/anacron stop" try to stop anacron
+    (Closes: #97969)
+
+ -- Pascal Hakim <pasc at debian.org>  Thu, 01 Apr 2004 21:30:00 +1000
+
+anacron (2.3-7) unstable; urgency=high
+
+  * forgive the delay all, life has been hectic
+  * urgency is high because anacron no longer works if on_ac_power is missing.
+    This was caused by the reshuffled of on_ac_power into powermgmt-base which
+    I did not believe was going into Woody.
+  * fixed the init.d script so it works if on_ac_power is not installed,
+    Closes: #140911 (and a few more via merge)
+  * postrm deletes /var/spool/anacron, Closes: #102638
+
+ -- Sean 'Shaleh' Perry <shaleh at debian.org>  Tue, 11 Jun 2002 08:20:46 -0700 
+
+anacron (2.3-6) unstable; urgency=low
+
+  * update Standards version
+
+ -- Sean 'Shaleh' Perry <shaleh at debian.org>  Thu, 29 Mar 2001 17:33:32 -0800
+
+anacron (2.3-5) unstable; urgency=low
+
+  * Duh, left off half the patch, Closes: #83334
+
+ -- Sean 'Shaleh' Perry <shaleh at debian.org>  Sun,  4 Feb 2001 10:35:01 -0800
+
+anacron (2.3-4) unstable; urgency=low
+
+  * Added apm event
+  * init.d script now checks whether machine is on battery power (via APM)
+    before starting.  This saves jobs like slocate from running when you start
+    your laptop on a place.  Code used submitted by Martin Pool.
+    Closes: #83334
+  * now that I ship an apm event, I removed the example
+
+ -- Sean 'Shaleh' Perry <shaleh at debian.org>  Thu, 25 Jan 2001 10:05:23 -0800
+
+anacron (2.3-3) unstable; urgency=low
+
+  * Removed local dirs from default anacrontab
+  * Changed to depeds from syslog to syslog | system-log-daemon
+
+ -- Sean 'Shaleh' Perry <shaleh at debian.org>  Wed, 18 Oct 2000 07:41:27 -0700
+
+anacron (2.3-2) unstable; urgency=low
+
+  * Oops, forgot a '.'
+  * Closes: #66161
+
+ -- Sean 'Shaleh' Perry <shaleh at debian.org>  Sat, 24 Jun 2000 11:45:15 -0700
+
+anacron (2.3-1) unstable; urgency=low
+
+  * New release
+
+ -- Sean 'Shaleh' Perry <shaleh at debian.org>  Thu, 22 Jun 2000 16:02:42 -0700
+
+anacron (2.2-2) unstable; urgency=low
+
+  * Fixed clock skew check
+  * anacron is now on sourceforge.net
+  * anacron installs init at S89, not S20 as before.  This is to match cron.
+  * Closes: #63146, #65785, #65923
+
+ -- Sean 'Shaleh' Perry <shaleh at debian.org>  Thu, 22 Jun 2000 14:18:41 -0700
+
+anacron (2.2-1) unstable; urgency=low
+
+  * maintainer upload
+  * Closes: #57286, #65436, #61417, #64599
+  * Torsten, thanks, you caught me the one time I was away from my desk (-:
+
+ -- Sean 'Shaleh' Perry <shaleh at debian.org>  Tue, 13 Jun 2000 13:19:12 -0700
+
+anacron (2.1-5.1) frozen unstable; urgency=low
+
+  * Non maintainer upload. Shaleh, please forgive me, but this is a 
+    really small change and I would really hate to see reports that 
+    the installation does not work because of broken task packages...
+  * [RC] Name exim as solution for mail-transport-agent in Depends line. 
+    Otherwise tasksel will break on the task-dialup package (closes: #64599).
+  * I'm dumb - uploaded to unstable only *sigh*
+
+ -- Torsten Landschoff <torsten at debian.org>  Thu, 25 May 2000 20:08:37 +0200
+
+anacron (2.1-5) unstable; urgency=low
+
+  * updates for recent policy
+  * Closes: #50255
+
+ -- Sean E. Perry <shaleh at debian.org>  Thu, 21 Nov 1999 22:17:33 -0800
+
+anacron (2.1-4) unstable; urgency=low
+
+  * Closes: #45954 
+
+ -- Sean E. Perry <shaleh at debian.org>  Wed, 29 Sep 1999 11:20:12 -0700
+
+anacron (2.1-3) unstable; urgency=low
+
+  * Real FHS compliance
+  * Closes: #33828, #34851, #39841, #43047, #44083, #44889
+
+ -- Sean E. Perry <shaleh at debian.org>  Mon, 20 Sep 1999 15:28:37 -0700
+
+anacron (2.1-2) unstable; urgency=low
+
+  * Upload for fhs compliance
+
+ -- Sean E. Perry <shaleh at debian.org>  Tue,  7 Sep 1999 14:26:00 -0700
+
+anacron (2.1-1) unstable; urgency=low
+
+  * New release
+
+ -- Sean E. Perry <shaleh at debian.org>  Thu, 12 Aug 1999 12:23:37 -0700
+
+anacron (2.0.1-5) unstable; urgency=low
+
+  * D'uh, closes #37344, learn to type Sean (-: 
+
+ -- Sean E. Perry <shaleh at debian.org>  Sun,  9 May 1999 00:21:22 -0400
+
+anacron (2.0.1-4) unstable; urgency=low
+
+  * check for anacron's existence in conffiles 
+  * clean up in rules file
+
+ -- Sean E. Perry <shaleh at debian.org>  Thu,  6 May 1999 23:19:45 -0400
+
+anacron (2.0.1-3) unstable; urgency=low
+
+  * New maintainer (finally)
+  * begin clean mode
+  * removed rc?.d/K20anacron scripts, they were useless
+  * switched to debhelper
+  * closes: 23258
+  * closes: 24555
+  * closes: 26612
+  * closes: 32852
+
+ -- Sean E. Perry <shaleh at debian.org>  Thu, 25 Mar 1999 12:56:02 -0500
+
+anacron (2.0.1-2) frozen unstable; urgency=low
+
+  * Orphaned package
+  * Incorporated changes from last NMR (fixes:bug#21598)
+
+ -- Christian Schwarz <schwarz at debian.org>  Thu, 14 May 1998 22:49:30 +0200
+
+anacron (2.0.1-1.1) frozen unstable; urgency=low
+
+  * NMR to correct problems with build not using gcc and trying to install
+    files somewhere other than debian/tmp and not using dpkg-shlibdeps to
+    make sure debian/substvars (which wasn't being deleted during clean) was
+    correct (fixes:bug#21598)
+
+ -- Michael Alan Dorman <mdorman at debian.org>  Sun, 10 May 1998 11:03:33 +0500
+
+anacron (2.0.1-1) frozen unstable; urgency=low
+
+  * New upstream release (contains only bug fixes; fixes:bug#19557)
+  
+  * Recommend "cron (>= 3.0pl1-43)" which does not include the obsolete
+    cronanacron script anymore
+  
+  * Install manual pages with correct file permissions
+    (detected by Lintian)
+
+ -- Christian Schwarz <schwarz at debian.org>  Sat, 21 Mar 1998 11:03:33 +0100
+
+anacron (2.0-3) unstable; urgency=low
+
+  * Fixed typo in Description (fixes:bug#18875)
+
+ -- Christian Schwarz <schwarz at debian.org>  Fri,  6 Mar 1998 21:15:48 +0100
+
+anacron (2.0-2) unstable; urgency=low
+
+  * Added "Depends: smail | sendmail | mail-transport-agent"
+  * Don't tag /etc/cron.d/anacron executable (fixes bug #18307)
+
+ -- Christian Schwarz <schwarz at debian.org>  Tue, 17 Feb 1998 22:49:35 +0100
+
+anacron (2.0-1) unstable; urgency=low
+
+  * New upstream maintainer
+    (Thanks to Itai Tzur <itzur at actcom.co.il> for taking over
+    upstream maintenance!)
+
+  * New upstream version:
+      - anacron has been completely rewritten in C (no perl anymore)
+      - uses flock to lock its lock files (this fixes bug #17550)
+      - uses syslog for logging messages
+
+  * Register cron job via /etc/cron.d
+  * Updated /etc/cron.*/0anacron* scripts to use `anacron -u'
+  * Modified postinst script to check for existing anacron jobs in
+    /etc/crontab
+  * Changed "Suggests: cron" into "Recommends: cron (>= 3.0pl1-42)"
+
+  * Added dependency on sysklogd
+  * Removed cron.weekly script to rotate log files
+
+  * Added new (dummy) options to etc/init.d/anacron: restart, force-reload
+    (reported by Lintian)
+
+  * Removed buggy prerm script
+
+  * Updated FSF's address (reported by Lintian)
+  * Updated package description
+  * Added README.Debian to explain Debian specific setup
+
+  * Built package with fakeroot
+  * Upgraded package to Standards-Version 2.4.0.0
+
+ -- Christian Schwarz <schwarz at debian.org>  Mon, 16 Feb 1998 17:19:38 +0100
+
+anacron (1.0.7) unstable; urgency=low
+
+  * debian/rules: Don't use debstd anymore
+  * debian/rules: Compress changelog file (fixes:#15442)
+  * debian/control: Upgraded to Standards Version 2.3.0.1
+  * debian/control: Removed perl dependency (perl-base is tagged
+    `Essential')
+
+ -- Christian Schwarz <schwarz at debian.org>  Wed, 24 Dec 1997 13:10:52 +0100
+
+anacron (1.0.6) unstable; urgency=low
+
+  * Handle arguments for postinst (fixes #12572)
+  * Upgraded to Standards Version 2.3.0.0
+  * Document two more feature requests in the TODO file
+
+ -- Christian Schwarz <schwarz at debian.org>  Fri, 12 Sep 1997 02:26:17 +0200
+
+anacron (1.0.5) unstable; urgency=low
+
+  * Use little help program to run jobs: this program removes the lockfile
+    even when the job is killed (fixes bug#12060).
+  * Package is now arch-dependent.
+  * postrm: remove log files when purged (fixes bug#12038).
+  * prerm: remove spool files when purged.
+  * Specify /etc/cron.*/*, /etc/init.d/anacron scripts as conffiles.
+  * New file TODO which documents all feature requests: currently bug#11085.
+  * Use debstd in debian/rules .
+
+ -- Christian Schwarz <schwarz at debian.org>  Mon, 18 Aug 1997 19:31:40 +0200
+
+anacron (1.0.4) unstable; urgency=low
+
+  * Anacron is preconfigured to run the daily/weekly/monthly jobs now.
+  * Updated description to tell the user about this.
+  * Added "Suggests: cron".
+  * Changed behaviour of /etc/init.d/anacron script: Just run anacron if
+    it's later then 7:30am.
+  * Added scripts to /etc/cron.{daily,weekly,monthly} to update anacron's
+    time stamps (necessary if the scripts are run by cron).
+  * Added check and message to postinst script to tell the user about
+    adding a cron entry for anacron.
+  * Updated README file to describe new setup.
+  * Moved anacron script to /usr/sbin.
+  * Upgraded to Standards-Version 2.2.0.0.
+
+ -- Christian Schwarz <schwarz at debian.org>  Sat,  2 Aug 1997 19:18:53 +0200
+
+anacron (1.0.3) unstable; urgency=low
+
+  * Fixed date calculation (thanks to Itai Tzur for the patch!)
+  * Upgraded to Standards-Version 2.1.3.3.
+
+ -- Christian Schwarz <schwarz at debian.org>  Wed, 2 Jul 1997 17:48:43 +0200
+
+anacron (1.0.2-1) unstable; urgency=low
+
+  * New upstream source: improved README (fixes bug #5933).
+  * Changed console message in /etc/init.d to apply to new standard.
+  * Upgraded to Standards-Version 2.1.2.2.
+  * Removed buggy check for `pe' in postinst.
+  * Added `Replaces: pe' to control file.
+
+ -- Christian Schwarz <schwarz at debian.org>  Thu, 9 Jan 1997 17:16:36 +0100
+
+anacron (1.0.1-3) unstable; urgency=low
+
+  * Changed priority from standard to extra.
+
+ -- Christian Schwarz <schwarz at debian.org>  Tue, 5 Nov 1996 22:30:37 +0100
+
+anacron (1.0.1-2) unstable; urgency=low
+
+  * Upgraded to Standards-Version 2.1.1.0.
+
+ -- Christian Schwarz <schwarz at debian.org>  Sat, 2 Nov 1996 20:31:12 +0100
+
+anacron (1.0.1-1) unstable; urgency=low
+
+  * Upgraded to Standards-Version 2.1.0.0.
+  * Fixed problem when anacron was called multiple times.
+  * Changed distribution from experimental to unstable.
+
+ -- Christian Schwarz <schwarz at debian.org>  Wed, 18 Sep 1996 20:00:40 +0200
+
+anacron (1.0-1) experimental; urgency=low
+
+  * First Debian release.
+  * Changed program name from `pe' to `anacron'.
+  * Rewrote program and docs.
+
+ -- Christian Schwarz <schwarz at monet.m.isar.de>  Fri, 23 Aug 1996 22:32:33 +0200
+
--- anacron-2.3.orig/debian/anacron.postrm
+++ anacron-2.3/debian/anacron.postrm
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+set -e
+
+if [ "$1" = "purge" ]; then
+# here for historical reasons
+	rm -f /var/log/anacron /var/log/anacron.[0-9]*
+	rm -rf /var/spool/anacron
+fi
+
+#DEBHELPER#
--- anacron-2.3.orig/debian/README.debian
+++ anacron-2.3/debian/README.debian
@@ -0,0 +1,13 @@
+anacron for DEBIAN
+----------------------
+
+Anacron runs transparently to the system.  In other words, you should never be
+aware that anacron and not cron is actually running cron.{daily,weekly,monthly}.
+
+Anacron itself however is not a daemon, so it will either be called at startup,
+on APM power status change, or by cron. Disabling those will result in some
+jobs not being executed on time.
+
+Anacron leaves messages in /var/log/syslog and /var/log/messages by default.
+
+-- Pascal hakim <pasc at debian.org>, Tue, 02 Aug 2005 20:27:00 +1100
--- anacron-2.3.orig/global.h
+++ anacron-2.3/global.h
@@ -2,6 +2,7 @@
     Anacron - run commands periodically
     Copyright (C) 1998  Itai Tzur <itzur at actcom.co.il>
     Copyright (C) 1999  Sean 'Shaleh' Perry <shaleh at debian.org>
+    Copyright (C) 2004  Pascal Hakim <pasc at redellipse.net>
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -53,9 +54,11 @@
 
 struct job_rec1 {
    int period;
+   int named_period;
    int delay;
    char *ident;
    char *command;
+   char *mailto;
 
    int tab_line;
    int arg_num;
@@ -75,9 +78,10 @@
 extern pid_t primary_pid;
 extern char *program_name;
 extern char *anacrontab;
+extern char *spooldir;
 extern int old_umask;
 extern sigset_t old_sigmask;
-extern int serialize,force,update_only,now,no_daemon,quiet;
+extern int serialize,force,update_only,now,no_daemon,quiet,testing_only;
 extern int day_now;
 extern int year,month,day_of_month;
 extern int in_background;
@@ -93,6 +97,7 @@
 
 extern int running_jobs,running_mailers;
 
+extern int complaints;
 
 /* Function prototypes */
 
@@ -121,7 +126,7 @@
 #endif /* not DEBUG */
 
 /* readtab.c */
-void read_tab();
+void read_tab(int cwd);
 void arrange_jobs();
 
 /* lock.c */
--- anacron-2.3.orig/gregor.c
+++ anacron-2.3/gregor.c
@@ -2,6 +2,7 @@
     Anacron - run commands periodically
     Copyright (C) 1998  Itai Tzur <itzur at actcom.co.il>
     Copyright (C) 1999  Sean 'Shaleh' Perry <shaleh at debian.org>
+    Copyright (C) 2004  Pascal Hakim <pasc at redellipse.net>
  
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -23,6 +24,7 @@
 
 
 #include <limits.h>
+#include <time.h>
 #include "gregor.h"
 
 const static int
@@ -65,7 +67,7 @@
 {
     int dn;
     int i;
-    const int isleap; /* save three calls to leap() */
+    int isleap; /* save three calls to leap() */
 
     /* Some validity checks */
 
@@ -114,3 +116,66 @@
     /* but not by 400 */
     return (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
 }
+
+int
+days_last_month (void)
+/* How many days did last month have? */
+{
+    struct tm time_record;
+    time_t current_time;
+    time (&current_time);
+    localtime_r (&current_time, &time_record);
+
+    switch (time_record.tm_mon) {
+	case 0: return days_in_month[11];
+	case 2: return days_in_month[1] + (leap (time_record.tm_year + 1900) ? 1 : 0);
+	default: return days_in_month[time_record.tm_mon - 1];
+    }
+}
+
+int
+days_this_month (void)
+/* How many days does this month have? */
+{
+    struct tm time_record;
+    time_t current_time;
+    time (&current_time);
+    localtime_r (&current_time, &time_record);
+
+    switch (time_record.tm_mon) {
+	case 1: return days_in_month[1] + (leap (time_record.tm_year + 1900) ? 1 : 0);
+	default: return days_in_month[time_record.tm_mon];
+    }
+}
+
+int
+days_last_year (void)
+/* How many days this last year have? */
+{
+    struct tm time_record;
+    time_t current_time;
+    time (&current_time);
+    localtime_r (&current_time, &time_record);
+
+    if (leap(time_record.tm_year - 1 + 1900)) {
+	return 366;
+    }
+
+    return 365;
+}
+
+int
+days_this_year (void)
+/* How many days does this year have */
+{
+     struct tm time_record;
+    time_t current_time;
+    time (&current_time);
+    localtime_r (&current_time, &time_record);
+
+    if (leap(time_record.tm_year + 1900)) {
+	return 366;
+    }
+
+    return 365;
+}
--- anacron-2.3.orig/gregor.h
+++ anacron-2.3/gregor.h
@@ -2,6 +2,7 @@
     Anacron - run commands periodically
     Copyright (C) 1998  Itai Tzur <itzur at actcom.co.il>
     Copyright (C) 1999  Sean 'Shaleh' Perry <shaleh at debian.org>
+    Copyright (C) 2004  Pascal Hakim <pasc at redellipse.net>
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -23,3 +24,7 @@
 
 
 int day_num(int year, int month, int day);
+int days_last_month (void);
+int days_this_month (void);
+int days_last_year (void);
+int days_this_year (void);
--- anacron-2.3.orig/lock.c
+++ anacron-2.3/lock.c
@@ -2,6 +2,7 @@
     Anacron - run commands periodically
     Copyright (C) 1998  Itai Tzur <itzur at actcom.co.il>
     Copyright (C) 1999  Sean 'Shaleh' Perry <shaleh at debian.org>
+    Copyirght (C) 2004  Pascal Hakim <pasc at redellipse.net>
  
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -111,6 +112,35 @@
 	    xclose(jr->timestamp_fd);
 	    return 0;
 	}
+
+	/*
+	 * Check to see if it's a named period, in which case we need 
+	 * to figure it out.
+	 */
+	if (jr->named_period)
+	{
+	    int period = 0, bypass = 0;
+	    switch (jr->named_period)
+	    {
+		case 1:
+		    period = days_last_month ();
+		    bypass = days_this_month ();
+		    break;
+		case 2:
+		    period = days_last_year ();
+		    bypass = days_this_year ();
+		    break;
+		default:
+		    die ("Unknown named period for %s (%d)", jr->ident, jr->named_period);
+	    }
+	    printf ("Checking against %d with %d\n", day_delta, period);
+	    if (day_delta < period && day_delta != bypass)
+	    {
+		/* Job is still too young */
+		xclose (jr->timestamp_fd);
+		return 0;
+	    }
+	}
     }
 
     /* no! try to grab the lock */
--- anacron-2.3.orig/log.c
+++ anacron-2.3/log.c
@@ -2,6 +2,7 @@
     Anacron - run commands periodically
     Copyright (C) 1998  Itai Tzur <itzur at actcom.co.il>
     Copyright (C) 1999  Sean 'Shaleh' Perry <shaleh at debian.org>
+    Copyright (C) 2004  Pascal Hakim <pasc at redellipse.net>
  
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -48,6 +49,9 @@
 static char msg[MAX_MSG + 1];
 static int log_open = 0;
 
+/* Number of complaints that we've seen */
+int complaints = 0;
+
 static void
 xopenlog()
 {
@@ -147,6 +151,8 @@
     va_start(args, fmt);
     log(COMPLAIN_LEVEL, fmt, args);
     va_end(args);
+
+    complaints += 1;
 }
 
 void
@@ -158,6 +164,8 @@
     va_start(args, fmt);
     log_e(COMPLAIN_LEVEL, fmt, args);
     va_end(args);
+
+    complaints += 1;
 }
 
 void
--- anacron-2.3.orig/main.c
+++ anacron-2.3/main.c
@@ -2,6 +2,7 @@
     Anacron - run commands periodically
     Copyright (C) 1998  Itai Tzur <itzur at actcom.co.il>
     Copyright (C) 1999  Sean 'Shaleh' Perry <shaleh at debian.org>
+    Copyright (C) 2004  Pascal Hakim <pasc at redellipse.net>
  
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -39,8 +40,9 @@
 
 char *program_name;
 char *anacrontab;
+char *spooldir;
 int serialize, force, update_only, now,
-    no_daemon, quiet;                            /* command-line options */
+    no_daemon, quiet, testing_only;            /* command-line options */
 char **args;                       /* vector of "job" command-line arguments */
 int nargs;                                     /* number of these */
 char *defarg = "*";
@@ -61,17 +63,19 @@
     printf("Anacron " RELEASE "\n"
 	   "Copyright (C) 1998  Itai Tzur <itzur at actcom.co.il>\n"
 	   "Copyright (C) 1999  Sean 'Shaleh' Perry <shaleh at debian.org>\n"
+	   "Copyright (C) 2004  Pascal Hakim <pasc at redellipse.net>\n"
 	   "\n"
-	   "Mail comments, suggestions and bug reports to <shaleh at debian.org>."
+	   "Mail comments, suggestions and bug reports to <pasc at redellipse.net>."
 	   "\n\n");
 }
 
 static void
 print_usage()
 {
-    printf("Usage:  anacron [-s] [-f] [-n] [-d] [-q] [-t anacrontab] [job] ...\n"
-	   "        anacron -u [job] ...\n"
+    printf("Usage:  anacron [-s] [-f] [-n] [-d] [-q] [-t anacrontab] [-S spooldir] [job] ...\n"
+	   "        anacron [-S spooldir] -u [job] ...\n"
 	   "        anacron [-V|-h]\n"
+	   "        anacron -T [-t anacrontab]\n"
 	   "\n"
 	   " -s  Serialize execution of jobs\n"
 	   " -f  Force execution of jobs, even before their time\n"
@@ -82,6 +86,8 @@
 	   " -t  Use this anacrontab\n"
 	   " -V  Print version information\n"
 	   " -h  Print this message\n"
+	   " -T  Test an anacrontab\n"
+	   " -S  Select a different spool directory\n"
 	   "\n"
 	   "See the manpage for more details.\n"
 	   "\n");
@@ -95,7 +101,7 @@
 
     quiet = no_daemon = serialize = force = update_only = now = 0;
     opterr = 0;
-    while ((opt = getopt(argc, argv, "sfundqt:Vh")) != EOF)
+    while ((opt = getopt(argc, argv, "sfundqt:TS:Vh")) != EOF)
     {
 	switch (opt)
 	{
@@ -120,6 +126,12 @@
 	case 't':
 	    anacrontab = strdup(optarg);
 	    break;
+	case 'T':
+	    testing_only = 1;
+	    break;
+	case 'S':
+	    spooldir = strdup(optarg);
+	    break;
 	case 'V':
 	    print_version();
 	    exit(0);
@@ -351,7 +363,7 @@
     day_of_month = tm_now->tm_mday;
     day_now = day_num(year, month, day_of_month);
     if (day_now == -1) die("Invalid date (this is really embarrassing)");
-    if (!update_only)
+    if (!update_only && !testing_only)
 	explain("Anacron " RELEASE " started on %04d-%02d-%02d",
 		year, month, day_of_month);
 }
@@ -414,7 +426,10 @@
 {
     int j;
 
+    int cwd;
+
     anacrontab = NULL;
+    spooldir = NULL;
 
     if((program_name = strrchr(argv[0], '/')) == NULL)
 	program_name = argv[0];
@@ -426,9 +441,16 @@
     if (anacrontab == NULL)
 	anacrontab = strdup(ANACRONTAB);
 
+    if (spooldir == NULL)
+	spooldir = strdup(SPOOLDIR);
+
+    if ((cwd = open ("./", O_RDONLY)) == -1) {
+	die_e ("Can't save current directory");
+    }
+
     in_background = 0;
 
-    if (chdir(SPOOLDIR)) die_e("Can't chdir to " SPOOLDIR);
+    if (chdir(spooldir)) die_e("Can't chdir to %s", spooldir );
 
     old_umask = umask(0);
 
@@ -437,15 +459,22 @@
     if (fclose(stdin)) die_e("Can't close stdin");
     xopen(0, "/dev/null", O_RDONLY);
 
-    if (!no_daemon)
+    if (!no_daemon && !testing_only)
 	go_background();
     else
 	primary_pid = getpid();
 
     record_start_time();
-    read_tab();
+    read_tab(cwd);
     arrange_jobs();
 
+    if (testing_only)
+    {
+	if (complaints) exit (1);
+	
+	exit (0);
+    }
+
     if (update_only)
     {
 	fake_jobs();
@@ -462,6 +491,6 @@
 	launch_job(job_array[j]);
     }
     wait_children();
-    explain("Normal exit (%d jobs run)", njobs);
+    explain("Normal exit (%d job%s run)", njobs, (njobs == 1 ? "" : "s"));
     exit(0);
 }
--- anacron-2.3.orig/readtab.c
+++ anacron-2.3/readtab.c
@@ -2,6 +2,7 @@
     Anacron - run commands periodically
     Copyright (C) 1998  Itai Tzur <itzur at actcom.co.il>
     Copyright (C) 1999  Sean 'Shaleh' Perry <shaleh at debian.org>
+    Copyright (C) 2004  Pascal Hakim <pasc at redellipse.net>
  
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -83,11 +84,23 @@
 Return NULL if no more lines.
  */
 {
-    int c;
+    int c, prev=0;
 
     if (feof(tab)) return NULL;
-    while ((c = getc(tab)) != EOF && c != '\n')
-	obstack_1grow(&input_o, c);
+    while (1)
+    {
+	c = getc(tab);
+	if ((c == '\n' && prev != '\\') || c == EOF)
+	{
+	    if (0 != prev) obstack_1grow(&input_o, prev);
+	    break;
+	}
+
+	if ('\\' != prev && 0 != prev && '\n' != prev) obstack_1grow(&input_o, prev);
+	else if ('\n' == prev) obstack_1grow(&input_o, ' ');
+
+	prev = c;
+    }
     if (ferror(tab)) die_e("Error reading %s", anacrontab);
     obstack_1grow(&input_o, '\0');
     return obstack_finish(&input_o);
@@ -153,6 +166,7 @@
     }
     jr = obstack_alloc(&tab_o, sizeof(job_rec));
     jr->period = period;
+    jr->named_period = 0;
     jr->delay = delay;
     jr->tab_line = line_num;
     jr->ident = obstack_alloc(&tab_o, ident_len + 1);
@@ -171,6 +185,54 @@
 }
 
 static void
+register_period_job(const char *periods, const char *delays,
+		    const char *ident, char *command)
+/* Store a job definition with a named period */
+{
+    int delay;
+    job_rec *jr;
+    int period_len, ident_len, command_len;
+
+    period_len = strlen(periods);
+    ident_len = strlen(ident);
+    command_len = strlen(command);
+    jobs_read++;
+    delay = conv2int(delays);
+    if (delay < 0)
+    {
+	complain("%s: number out of range on line %d, skipping",
+		 anacrontab, line_num);
+	return;
+    }
+
+    jr = obstack_alloc(&tab_o, sizeof(job_rec));
+    if (!strncmp ("@monthly", periods, 7)) {
+	jr->named_period = 1;
+    } else if (!strncmp("@yearly", periods, 7)) {
+	jr->named_period = 2;
+    } else {
+	complain("%s: Unknown named period on line %d, skipping",
+		 anacrontab, line_num);
+    }
+    jr->period = 0;
+    jr->delay = delay;
+    jr->tab_line = line_num;
+    jr->ident = obstack_alloc(&tab_o, ident_len + 1);
+    strcpy(jr->ident, ident);
+    jr->arg_num = job_arg_num(ident);
+    jr->command = obstack_alloc(&tab_o, command_len + 1);
+    strcpy(jr->command, command);
+    jr->job_pid = jr->mailer_pid = 0;
+    if (last_job_rec != NULL) last_job_rec->next = jr;
+    else first_job_rec = jr;
+    last_job_rec = jr;
+    jr->prev_env_rec = last_env_rec;
+    jr->next = NULL;
+    Debug(("Read job - period %d, delay=%d, ident%s, command=%s",
+	  jr->named_period, jr->delay, jr->ident, jr->command));
+}
+
+static void
 parse_tab_line(char *line)
 {
     int r;
@@ -210,6 +272,18 @@
 	register_job(periods, delays, ident, command);
 	return;
     }
+
+    /* A period job? */
+    r = match_rx("^[ \t]*(@[^ \t]+)[ \t]+([[:digit:]]+)[ \t]+"
+		 "([^ \t/]+)[ \t]+([^ \t].*)$",
+		 line, 4, &periods, &delays, &ident, &command);
+    if (r == -1) goto reg_err;
+    if (r)
+    {
+	register_period_job(periods, delays, ident, command);
+	return;
+    }
+
     complain("Invalid syntax in %s on line %d - skipping this line",
 	     anacrontab, line_num);
     return;
@@ -219,7 +293,7 @@
 }
 
 void
-read_tab()
+read_tab(int cwd)
 /* Read the anacrontab file into memory */
 {
     char *tab_line;
@@ -229,7 +303,10 @@
     jobs_read = 0;
     line_num = 0;
     /* Open the anacrontab file */
+    fchdir (cwd);
     tab = fopen(anacrontab, "r");
+    if (chdir(spooldir)) die_e("Can't chdir to %s", SPOOLDIR);
+
     if (tab == NULL) die_e("Error opening %s", anacrontab);
     /* Initialize the obstacks */
     obstack_init(&input_o);
@@ -271,7 +348,7 @@
     njobs = 0;
     while (j != NULL)
     {
-	if (j->arg_num != -1 && (update_only || consider_job(j)))
+	if (j->arg_num != -1 && (update_only || testing_only || consider_job(j)))
 	{
 	    njobs++;
 	    obstack_grow(&tab_o, &j, sizeof(j));
--- anacron-2.3.orig/runjob.c
+++ anacron-2.3/runjob.c
@@ -109,7 +109,6 @@
 run_job(const job_rec *jr)
 /* This is called to start the job, after the fork */
 {
-    setup_env(jr);
     /* setup stdout and stderr */
     xclose(1);
     xclose(2);
@@ -153,6 +152,15 @@
 launch_mailer(job_rec *jr)
 {
     pid_t pid;
+    struct stat buf;
+    int r;
+
+    /* Check that we have a way of sending mail. */
+    if(stat(SENDMAIL, &buf))
+    {
+	complain("Can't find sendmail at %s, not mailing output", SENDMAIL);
+	return;
+    }
 
     pid = xfork();
     if (pid == 0)
@@ -173,7 +181,7 @@
 	 * options, which don't seem to be appropriate here.
 	 * Hopefully, this will keep all the MTAs happy. */
 	execl(SENDMAIL, SENDMAIL, "-FAnacron", "-odi",
-	      username(), (char *)NULL);
+	      jr->mailto, (char *)NULL);
 	die_e("Can't exec " SENDMAIL);
     }
     /* parent */
@@ -207,19 +215,44 @@
 {
     pid_t pid;
     int fd;
+    char hostname[512];
+    char *mailto;
+
+    /* get hostname */
+    if (gethostname(hostname, 512)) {
+      strcpy (hostname,"unknown machine");
+    }
+
+    setup_env(jr);
+   
+    /* Get the destination email address if set, or current user otherwise */
+    mailto = getenv("MAILTO");
+
+    if (mailto)
+	    jr->mailto = mailto;
+    else
+	    jr->mailto = username ();
 
     /* create temporary file for stdout and stderr of the job */
     fd = jr->output_fd = temp_file();
     /* write mail header */
     xwrite(fd, "From: ");
+    xwrite(fd, "Anacron <");
     xwrite(fd, username());
-    xwrite(fd, " (Anacron)\n");
+    xwrite(fd, ">\n");
     xwrite(fd, "To: ");
-    xwrite(fd, username());
+    if (mailto) {
+       xwrite(fd, mailto);
+    } else {
+       xwrite(fd, username());
+    }
     xwrite(fd, "\n");
     xwrite(fd, "Subject: Anacron job '");
     xwrite(fd, jr->ident);
-    xwrite(fd, "'\n\n");
+    xwrite(fd, "' on ");
+    xwrite(fd, hostname);
+    xwrite(fd, "\n\n");
+
     jr->mail_header_size = file_size(fd);
 
     pid = xfork();




More information about the fedora-extras-commits mailing list