uudemon.cleanup revision 7c478bd95313f5f23a4c958a745db2134aa03244
#!/usr/bin/sh
#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License, Version 1.0 only
# (the "License"). You may not use this file except in compliance
# with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
# See the License for the specific language governing permissions
# and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
# If applicable, add the following below this CDDL HEADER, with the
# fields enclosed by brackets "[]" replaced with your own identifying
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
#
#
# Copyright 1997 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
#ident "%Z%%M% %I% %E% SMI"
#
# This demon cleans up uucp directories.
# It is started by /var/spool/cron/crontabs/uucp;
# it can be run daily, weekly, whatever depending on the system
# uucp load.
#
# return a list of systems defined in /etc/uucp/Systems
getsystems() {
if [ ! -f /etc/uucp/Systems ]; then
return
else
awk '$1 !~ /^#/ {print $1}' /etc/uucp/Systems
fi
}
# return a list of systems defined in /etc/asppp.cf
getpppsystems() {
if [ ! -f /etc/asppp.cf ]; then
return
else
X=`sed -e 's/#.*$//' /etc/asppp.cf`
set -- $X
while [ $# -ne 0 ];
do
if [ "$1" = "peer_system_name" ]; then
PPPSYSTEMS="$PPPSYSTEMS $2"
fi
shift
done
echo "$PPPSYSTEMS"
fi
}
nouucp() {
# run through the systems list, deleting ppp systems
outstr=""
for i in `getsystems`
do
del=0
for j in `getpppsystems`
do
if [ "$j" = "$i" ]; then
del=1
fi
done
if [ $del -ne 1 ]; then
outstr="$outstr $i"
fi
done
# if any names are in $outstr, assume uucp is configured
if [ -n "$outstr" ]; then
return 1
else
return 0
fi
}
# Start of actual processing. For energystar compatibility,
# we attempt to do as little I/O as possible, so first check
# to see if uucp is configured before doing all this work.
if nouucp; then
exit 0
fi
MAILTO=uucp
MAILDIR=/var/mail
export PATH
PATH=/usr/bin:/usr/lib/uucp
TMP=/tmp/uu$$
# Running as uucp, take care to protect things
umask 0022
#
# These are taken from the Makefile. If changed in Makefile
# they must be changed here also.
#
PUBDIR=/var/spool/uucppublic
SPOOL=/var/spool/uucp
VAR=/var/uucp
LOCKS=/var/spool/locks # needs a comment in parms.h on USRSPOOLOCKS
XQTDIR=$VAR/.Xqtdir
CORRUPT=$SPOOL/.Corrupt
LOGDIR=$VAR/.Log
SEQDIR=$VAR/.Sequence
STATDIR=$VAR/.Status
WORKDIR=$SPOOL/.Workspace
ADMIN=$VAR/.Admin
# OLD is the directory for archiving old admin/log files
OLD=$VAR/.Old
O_LOGS=$OLD/Old-Log
ACCT_LOGS=$OLD/Old-acct
SEC_LOGS=$OLD/Old-sec
[ -f $ADMIN/xferstats ] && mv $ADMIN/xferstats $OLD/xferstats
[ -f $ADMIN/audit ] && mv $ADMIN/audit $OLD/audit
[ -f $ADMIN/command ] &&mv $ADMIN/command $OLD/command
[ -f $ADMIN/errors ] && mv $ADMIN/errors $OLD/errors
[ -f $ADMIN/Foreign ] && mv $ADMIN/Foreign $OLD/Foreign
> $ADMIN/xferstats
> $ADMIN/audit
> $ADMIN/command
> $ADMIN/errors
> $ADMIN/Foreign
#
# If performance log exists, save it and create a new one
#
if [ -f $ADMIN/perflog ]
then
mv $ADMIN/perflog $OLD/perflog
> $ADMIN/perflog
fi
#
# The list in the for controls how many old Log and security logs
# are retained: 2 -> 3, 1 -> 2, current -> 1.
#
for i in 2 1
do
j=`expr $i + 1`
[ -f ${O_LOGS}-$i ] && mv ${O_LOGS}-$i ${O_LOGS}-$j
[ -f ${SEC_LOGS}-$i ] && mv ${SEC_LOGS}-$i ${SEC_LOGS}-$j
done
[ -f $ADMIN/security ] && mv $ADMIN/security ${SEC_LOGS}-1
> $ADMIN/security
#
# Combine all log files into O_LOGS-1.
# Add a name separator between each system.
#
> ${O_LOGS}-1
for i in uucico uucp uux uuxqt
do
if [ ! -d $LOGDIR/$i ]
then
(echo "uudemon.cleanup: $LOGDIR/$i directory does not exist, remove if file"
echo "uudemon.cleanup: making a directory $LOGDIR/$i"
) | mail $MAILTO
rm -f $LOGDIR/$i
mkdir $LOGDIR/$i
continue
fi
cd $LOGDIR/$i
# can't compare exactly because of symlinks
case `pwd` in
*`basename $LOGDIR`/$i)
;;
*)
(echo "uudemon.cleanup: unable to chdir to $LOGDIR/$i") | mail $MAILTO
continue
;;
esac
for j in *
do
if [ "$j" = "*" ]
then
break
fi
echo "********** $j ********** ($i)" >> ${O_LOGS}-1
cat $j >> ${O_LOGS}-1
rm -f $j
done
done
#
# If the accounting log exists, save it and create a new one.
# The list in the for controls how many old accounting logs
# are retained: 2 -> 3, 1 -> 2, current -> 1.
#
if [ -f $ADMIN/account ]
then
for i in 2 1
do
j=`expr $i + 1`
[ -f ${ACCT_LOGS}-$i ] && mv ${ACCT_LOGS}-$i ${ACCT_LOGS}-$j
done
[ -f $ADMIN/account ] && mv $ADMIN/account ${ACCT_LOGS}-1
> $ADMIN/account
fi
# Execute the system directory cleanup program
# See uucleanup.1m for details.
uucleanup -D7 -C7 -X2 -o2 -W1
# Use the grep instead of the mv to ignore warnings to uucp
# grep -v 'warning message sent to uucp' $ADMIN/uucleanup > $OLD/uucleanup
[ -f $ADMIN/uucleanup ] && mv $ADMIN/uucleanup $OLD/uucleanup
if [ -s $OLD/uucleanup ]
then
(echo "Subject: cleanup"; echo; cat $OLD/uucleanup) | mail $MAILTO
fi
>$ADMIN/uucleanup
# cleanup funny directories that may have been created in the spool areas
for d in $SPOOL/[0-9A-Za-z]*
do
if [ -f $d ]
then
# skip any regular files, like lockfiles
# and mail.log and so forth
continue
fi
if [ -z "`ls $d`" ]
then
# empty directory
continue
fi
cd $d
# we'd check that we were in the correct directory
if [ "`basename \`pwd\``" != "`basename $d`" ]
then
(echo "uudemon.cleanup: unable to chdir to $d") | mail $MAILTO
continue
fi
for s in */*
do
if [ "$s" = "*/*" ]
then
break
fi
if [ -d $s ]
then
# Remove subdirs of subdirs
rm -fr $s
fi
done
# if it is now empty, remove it.
cd ..
rmdir $d/* $d
done >/dev/null 2>&1
#
# Find old cores
#
find $SPOOL -name core -print > $TMP
if [ -s $TMP ]
then
(echo "Subject: cores"; echo; cat $TMP) | mail $MAILTO
fi
#
# Remove old files and directories
#
#find $PUBDIR -type f -mtime +30 -exec rm -f {} \;
find $PUBDIR/* -depth -type d -exec rmdir {} \; >/dev/null 2>&1
find $SPOOL/* -depth -type d -exec rmdir {} \; >/dev/null 2>&1
find $SEQDIR -type f -mtime +30 -exec rm -f {} \;
find $WORKDIR -type f -mtime +1 -exec rm -f {} \;
find $STATDIR -type f -mtime +2 -exec rm -f {} \;
find $CORRUPT -type f -mtime +10 -exec rm -f {} \;
rm -f $LOCKS/LTMP*
rmdir $SPOOL/[0-9A-Za-z]* >/dev/null 2>&1
#
# Mail a daily summary of status
#
grep passwd ${O_LOGS}-1 > $TMP
grep "REQUEST.*/" ${O_LOGS}-1 >> $TMP
if [ -s $TMP ]
then
(echo "Subject: uucp requests"; echo; cat $TMP) | mail $MAILTO
fi
awk '/(DENIED)/ {print prev}
{prev = $0}' ${O_LOGS}-1 > $TMP
if [ -s $TMP ]
then
(echo "Subject: uucp DENIED"; echo; cat $TMP) | mail $MAILTO
fi
uustat -q > $TMP
if [ -s $TMP ]
then
(echo "Subject: uu-status"; echo; cat $TMP) | mail $MAILTO
fi
ls $CORRUPT > $TMP
if [ -s $TMP ]
then
(echo "Subject: $CORRUPT"; echo; cat $TMP) | mail $MAILTO
fi
if [ -s $OLD/errors -o -s $OLD/Foreign ]
then
(echo "Subject: uucp Admin"; \
echo; echo tail errors; tail $OLD/errors; \
echo; echo tail Foreign; tail $OLD/Foreign; \
) | mail $MAILTO
fi
# don't run if no system directories exist
if [ "`echo $SPOOL/*`" != "$SPOOL/*" ]
then
(echo "Subject: uucleanup ran; $SPOOL du"; echo; du $SPOOL) | \
mail $MAILTO
fi
#
# Dispose of mail to nuucp
#
rm -f $MAILDIR/nuucp $TMP