:
#	@(#) ckpacct.sh 1.4 88/11/11 
#
#
#	      UNIX is a registered trademark of AT&T
#		Portions Copyright 1976-1989 AT&T
#	Portions Copyright 1980-1989 Microsoft Corporation
#    Portions Copyright 1983-1989 The Santa Cruz Operation, Inc
#		      All Rights Reserved

:
#	Copyright (c) 1984, 1986, 1987, 1988 AT&T
#	  All Rights Reserved

#	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T
#	The copyright notice above does not evidence any
#	actual or intended publication of such source code.

#	"periodically check the size of /usr/adm/pacct"
#	"if over $1 blocks (500) default, execute turnacct switch"
#	"should be run as adm"

PATH=/usr/lib/acct:/bin:/usr/bin:/etc
trap "rm -f /usr/adm/cklock*; exit 0" 0 1 2 3 9 15
export PATH

_max=${1-500}
_MIN_BLKS=500
cd /usr/adm

#	set up lock files to prevent simultaneous checking

cp /dev/null cklock
chmod 400 cklock
ln cklock cklock1 > /dev/null 2>&1
if test $? -ne 0 ; then exit 1; fi

#	Find a non-existent file in /tmp with prefix accttmp and create it.
#	Accounting may be momentarily switched on to it.

TDIR=/tmp
IND=1

while test -r $TDIR/accttmp${IND}
do
	IND=`expr ${IND} + 1`
done
TEMPFILE=${TDIR}/accttmp${IND}

echo "" > ${TEMPFILE} #	Temporary file is created.

#	check to see if accounting enabled. If "accton $TEMPFILE"
#	exits 1, then accounting was enabled.


accton ${TEMPFILE} 2> /dev/null	#	don't print potential error msg
			 	#	to stderr
ACCTSTAT=$?
if test ${ACCTSTAT} -eq 0
then	     
	 accton  #	accting was disabled. Disable it again
fi
rm -f ${TEMPFILE}

#	If there are less than $_MIN_BLKS free blocks left on the /usr
#	file system and accounting was on, turn it off (unless things improve
#	the accounting wouldn't run anyway).  If something has
#	returned the file system space and accounting was turned off due to
#	low /usr space (the existence of /tmp/acctoff indicates this), restart
#	accounting.  This feature relies on the fact that ckpacct is kicked off
#	by the cron at least once per hour. 

sync;sync;

_blocks=`df /usr | sed "s/.*:  *\([0-9][0-9]*\) blocks.*/\1/"`

if [ "$_blocks" -lt $_MIN_BLKS   -a  -f /tmp/acctoff ];then
	 echo "ckpacct: /usr still low on space ($_blocks blks); \c"
	 echo "acctg still off"
	 ( echo "ckpacct: /usr still low on space ($_blocks blks); \c"
	 echo "acctg still off" ) | mail root adm
	 exit 1
elif [ "$_blocks" -lt $_MIN_BLKS ];then
	 if test ${ACCTSTAT} -ne 0; then 
		  echo "ckpacct: /usr too low on space ($_blocks blks); \c"
		  echo "turning acctg off"
		  ( echo "ckpacct: /usr too low on space ($_blocks blks); \c"
		  echo "turning acctg off" ) | mail root adm
		  nulladm /tmp/acctoff
		  turnacct off
		  exit 1
	 fi
elif [ -f /tmp/acctoff ];then
	 echo "ckpacct: /usr free space restored; turning acctg on" | \
		  mail root adm
	 rm /tmp/acctoff
	 turnacct on
fi

_cursize="`du -s pacct | sed 's/	.*//'`"
if [ "${_max}" -lt "${_cursize}" ]; then
	 turnacct switch
fi
