Removed the additional '-f "${LOGFILE2}' per the bug report and it works
correctly.
--- /usr/local/src/acct 2008-09-04 17:34:59.000000000 -0400
+++ /usr/local/src/acct.new 2008-09-04 17:49:20.000000000 -0400
@@ -1,44 +1,53 @@
#!/bin/sh
+#
+# cron script to perform monthly login accounting.
+#
+# Written by Ian A. Murdock <[EMAIL PROTECTED]>
+# Modified by Dirk Eddelbuettel <[EMAIL PROTECTED]>
+# Modified by Tero Tilus <[EMAIL PROTECTED]>
+# patch adopted by Christian Perrier <[EMAIL PROTECTED]> for #187538
LOGROTATE="/etc/cron.daily/logrotate"
-test -x /usr/sbin/accton || exit 0
-
-echo "Login accounting for the month ended `date`:" > /var/log/wtmp.report
-echo >> /var/log/wtmp.report
+if [ -x /usr/sbin/accton ]
+then
+ echo "Login accounting for the month ended `date`:" > /var/log/wtmp.report
+ echo >> /var/log/wtmp.report
-# The logrotate script happens to run before this one, effectively swallowing
-# all information out of wtmp before we can use it. Hence, we need to use the
-# previous file. Bad hack. Too bad we never heard from the logrotate maintainer
-# about this ...
+ # The logrotate script happens to run before this one, effectively
+ # swallowing all information out of wtmp before we can use it.
+ # Hence, we need to use the previous file. Bad hack.
+ # Too bad we never heard from the logrotate maintainer about this ...
+
+ # edd 18 May 2002 make sure wtmp.1 exists
-if [ -f "${LOGROTATE}" ] && [ -x /usr/sbin/logrotate ]
-then
- # make sure wtmp.1 exists
- if [ -f /var/log/wtmp.1 ]
+ if [ -f "${LOGROTATE}" ] && [ -x /usr/sbin/logrotate ]
then
- LOGFILE="/var/log/wtmp.1"
- fi
- if [ -f /var/log/wtmp.1.gz ]
- then
- LOGFILE2="`tempfile`"
- fi
- if [ -n "${LOGFILE}" ] && [ -n "${LOGFILE2}" ]
- then
- ac -f "${LOGFILE2}" -f "${LOGFILE}" -p | sort -nr -k2 >> /var/log/wtmp.report
+ if [ -f /var/log/wtmp.1 ]
+ then
+ WTMP="/var/log/wtmp.1"
+ elif [ -f /var/log/wtmp.1.gz ]
+ then
+ WTMP_WAS_GZIPPED="1"
+ WTMP="`tempfile`"
+
+ gunzip -c /var/log/wtmp.1.gz > "${WTMP}"
+ fi
+
+ ac -f "${WTMP}" -p | sort -nr -k2 >> /var/log/wtmp.report
echo >> /var/log/wtmp.report
- last -f "${LOGFILE2}" >> /var/log/wtmp.report
- elif [ -n "${LOGFILE}" ] && [ -z "${LOGFILE2}" ]
- then
- ac -f "${LOGFILE}" -p | sort -nr -k2 >> /var/log/wtmp.report
+ last -f "${WTMP}" >> /var/log/wtmp.report
+
+ if [ -n "${WTMP_WAS_GZIPPED}" ]
+ then
+ # remove temporary file
+ rm -f "${WTMP}"
+ fi
+ else
+ ac -p | sort -nr -k2 >> /var/log/wtmp.report
echo >> /var/log/wtmp.report
- last -f "${LOGFILE}" >> /var/log/wtmp.report
+ last >> /var/log/wtmp.report
fi
- rm -f "${LOGFILE2}"
-else
- ac -p | sort -nr -k2 >> /var/log/wtmp.report
- echo >> /var/log/wtmp.report
- last >> /var/log/wtmp.report
fi
chown root:adm /var/log/wtmp.report