#! /bin/sh
set -e

isDigit() {
	test -n "$1" || return 1
	string="$1"
	while [ "${string#[[:digit:]]}" != "$string" ]; do
		string="${string#[[:digit:]]}"
	done
	[ -z "$string" ] || return 1
}

# Remove cron.daily file which has been installed by old (and bugged)
# apticron versions. (see #587597)
DPKG_MAINTSCRIPT_NAME=${DPKG_MAINTSCRIPT_NAME:-postinst} \
dpkg-maintscript-helper rm_conffile /etc/cron.daily/apticron "1.1.44" apticron -- "$@"

case "$1" in
    configure)

    	. /usr/share/debconf/confmodule

	db_get apticron/notification
	EMAIL="$RET"

	if [ ! -d /etc/apticron/ ] ; then
		mkdir /etc/apticron
	fi

	# Move the old timestamp file
	tsfile_new='/var/lib/apticron/cron_run'
	tsfile_old='/var/lib/misc/apticron.cron'
	if [ -f "$tsfile_old" ] ; then
		if [ ! -e "$tsfile_new" ] ; then
			mv "$tsfile_old" "$tsfile_new"
		else
			rm -f "$tsfile_old"
		fi
	fi

	tmpfile="$( mktemp -t apticron.conf.XXXXXXXXXX )"
	chmod 0644 "$tmpfile"

	cat <<EOF > "$tmpfile"
# apticron.conf
#
# set EMAIL to a space separated list of addresses which will be notified of
# impending updates
#
EMAIL="$EMAIL"

#
# Set DIFF_ONLY to "1" to only output the difference of the current run
# compared to the last run (ie. only new upgrades since the last run). If there
# are no differences, no output/email will be generated. By default, apticron
# will output everything that needs to be upgraded.
#
# DIFF_ONLY="1"

#
# Set LISTCHANGES_PROFILE if you would like apticron to invoke apt-listchanges
# with the --profile option. You should add a corresponding profile to
# /etc/apt/listchanges.conf
#
# LISTCHANGES_PROFILE="apticron"

#
# From hostname manpage: "Displays  all FQDNs of the machine. This option
# enumerates all configured network addresses on all configured network inter‐
# faces, and translates them to DNS domain names. Addresses that cannot be
# translated (i.e. because they do not have an appro‐ priate  reverse DNS
# entry) are skipped. Note that different addresses may resolve to the same
# name, therefore the output may contain duplicate entries. Do not make any
# assumptions about the order of the output."
#
# ALL_FQDNS="1"

#
# Set SYSTEM if you would like apticron to use something other than the output
# of "hostname -f" for the system name in the mails it generates. This option
# overrides the ALL_FQDNS above.
#
# SYSTEM="foobar.example.com"

#
# Set IPADDRESSNUM if you would like to configure the maximal number of IP
# addresses apticron displays. The default is to display 1 address of each
# family type (inet, inet6), if available.
#
# IPADDRESSNUM="1"

#
# Set IPADDRESSES to a whitespace separated list of reachable addresses for
# this system. By default, apticron will try to work these out using the
# "ip" command
#
# IPADDRESSES="192.0.2.1 2001:db8:1:2:3::1"

#
# Set NOTIFY_HOLDS="0" if you don't want to be notified about new versions of
# packages on hold in your system. The default behavior is downloading and
# listing them as any other package.
#
# NOTIFY_HOLDS="0"

#
# Set NOTIFY_NEW="0" if you don't want to be notified about packages which
# are not installed in your system. Yes, it's possible! There are some issues
# related to systems which have mixed stable/unstable sources. In these cases
# apt-get will consider for example that packages with "Priority:
# required"/"Essential: yes" in unstable but not in stable should be installed,
# so they will be listed in dist-upgrade output. Please take a look at
# http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=531002#44
#
# NOTIFY_NEW="0"

#
# Set NOTIFY_NO_UPDATES="0" if you don't want to be notified when there is no
# new versions. Set to 1 could assure you that apticron works well.
#
# NOTIFY_NO_UPDATES="0"

#
# Set CUSTOM_SUBJECT if you want to replace the default subject used in
# the notification e-mails. This may help filtering/sorting client-side e-mail.
# If you want to use internal vars please use single quotes here. Ex:
# \$CUSTOM_SUBJECT='[apticron] \$SYSTEM: \$NUM_PACKAGES package update(s)'
#
# CUSTOM_SUBJECT=""

# Set CUSTOM_NO_UPDATES_SUBJECT if you want to replace the default subject used
# in the no update notification e-mails. This may help filtering/sorting
# client-side e-mail.
# If you want to use internal vars please use single quotes here. Ex:
# \$CUSTOM_NO_UPDATES_SUBJECT='[apticron] \$SYSTEM: no updates'
#
# CUSTOM_NO_UPDATES_SUBJECT=""

#
# Set CUSTOM_FROM if you want to replace the default sender by changing the
# 'From:' field used in the notification e-mails. Your default sender will
# be something like `id -un`@`hostname --long`.
#
# CUSTOM_FROM=""
EOF

	ucf --debconf-ok --three-way "$tmpfile" /etc/apticron/apticron.conf
	rm -f "$tmpfile"

	# read time from cron.d job, if any
	if [ -f /etc/cron.d/apticron ] ; then

		min=$( grep -v '^[[:space:]]*\(\#\|$\)' /etc/cron.d/apticron \
			2>/dev/null | {
			read min null
			isDigit "$min" && echo "$min"
			} ) || true

	fi

	# get random time if cron.d snippet doesn't exist or is malformed
	if ! isDigit "$min" ; then
		min=$(( $( od -vAn -N2 -tu4 < /dev/urandom ) % 60 ))
	fi

	tmpfile="$( mktemp -t apticron.crond.XXXXXXXXXX )"
	chmod 0644 "$tmpfile"

	cat <<EOF >"$tmpfile"
# cron entry for apticron

$min * * * * root if test -x /usr/sbin/apticron; then /usr/sbin/apticron --cron; else true; fi
EOF
	ucf --debconf-ok --three-way "$tmpfile" /etc/cron.d/apticron
	rm -f "$tmpfile"

    ;;

    abort-upgrade|abort-remove|abort-deconfigure)
    ;;

    *)
        echo "postinst called with unknown argument \`$1'" >&2
        exit 1
    ;;
esac

#DEBHELPER#

exit 0
