uudemon.cleanup revision 7c478bd95313f5f23a4c958a745db2134aa03244
98N/A#!/usr/bin/sh
98N/A#
98N/A# CDDL HEADER START
98N/A#
493N/A# The contents of this file are subject to the terms of the
98N/A# Common Development and Distribution License, Version 1.0 only
98N/A# (the "License"). You may not use this file except in compliance
98N/A# with the License.
98N/A#
98N/A# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
98N/A# or http://www.opensolaris.org/os/licensing.
98N/A# See the License for the specific language governing permissions
98N/A# and limitations under the License.
98N/A#
98N/A# When distributing Covered Code, include this CDDL HEADER in each
98N/A# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
98N/A# If applicable, add the following below this CDDL HEADER, with the
98N/A# fields enclosed by brackets "[]" replaced with your own identifying
98N/A# information: Portions Copyright [yyyy] [name of copyright owner]
98N/A#
98N/A# CDDL HEADER END
98N/A#
98N/A#
98N/A# Copyright 1997 Sun Microsystems, Inc. All rights reserved.
98N/A# Use is subject to license terms.
98N/A#
98N/A#ident "%Z%%M% %I% %E% SMI"
98N/A#
98N/A# This demon cleans up uucp directories.
98N/A# It is started by /var/spool/cron/crontabs/uucp;
98N/A# it can be run daily, weekly, whatever depending on the system
98N/A# uucp load.
591N/A#
98N/A
98N/A# return a list of systems defined in /etc/uucp/Systems
235N/Agetsystems() {
156N/Aif [ ! -f /etc/uucp/Systems ]; then
156N/A return
156N/Aelse
156N/A awk '$1 !~ /^#/ {print $1}' /etc/uucp/Systems
98N/Afi
98N/A}
98N/A
98N/A# return a list of systems defined in /etc/asppp.cf
493N/Agetpppsystems() {
493N/Aif [ ! -f /etc/asppp.cf ]; then
98N/A return
98N/Aelse
235N/A X=`sed -e 's/#.*$//' /etc/asppp.cf`
493N/A set -- $X
98N/A while [ $# -ne 0 ];
98N/A do
98N/A if [ "$1" = "peer_system_name" ]; then
98N/A PPPSYSTEMS="$PPPSYSTEMS $2"
98N/A fi
98N/A shift
98N/A done
98N/A echo "$PPPSYSTEMS"
98N/Afi
98N/A}
98N/A
98N/Anouucp() {
98N/A# run through the systems list, deleting ppp systems
493N/Aoutstr=""
493N/Afor i in `getsystems`
493N/Ado
98N/A del=0
235N/A for j in `getpppsystems`
235N/A do
493N/A if [ "$j" = "$i" ]; then
493N/A del=1
493N/A fi
493N/A done
235N/A if [ $del -ne 1 ]; then
98N/A outstr="$outstr $i"
98N/A fi
98N/Adone
591N/A
591N/A# if any names are in $outstr, assume uucp is configured
493N/A
493N/Aif [ -n "$outstr" ]; then
587N/A return 1
587N/Aelse
587N/A return 0
587N/Afi
587N/A}
493N/A
493N/A# Start of actual processing. For energystar compatibility,
493N/A# we attempt to do as little I/O as possible, so first check
493N/A# to see if uucp is configured before doing all this work.
493N/A
493N/Aif nouucp; then
493N/A exit 0
555N/Afi
493N/A
557N/AMAILTO=uucp
557N/AMAILDIR=/var/mail
493N/Aexport PATH
493N/APATH=/usr/bin:/usr/lib/uucp
493N/ATMP=/tmp/uu$$
493N/A
493N/A# Running as uucp, take care to protect things
493N/A
493N/Aumask 0022
98N/A
591N/A#
591N/A# These are taken from the Makefile. If changed in Makefile
591N/A# they must be changed here also.
591N/A#
591N/APUBDIR=/var/spool/uucppublic
235N/ASPOOL=/var/spool/uucp
98N/AVAR=/var/uucp
98N/ALOCKS=/var/spool/locks # needs a comment in parms.h on USRSPOOLOCKS
98N/AXQTDIR=$VAR/.Xqtdir
343N/ACORRUPT=$SPOOL/.Corrupt
343N/ALOGDIR=$VAR/.Log
527N/ASEQDIR=$VAR/.Sequence
527N/ASTATDIR=$VAR/.Status
98N/AWORKDIR=$SPOOL/.Workspace
98N/AADMIN=$VAR/.Admin
493N/A
493N/A# OLD is the directory for archiving old admin/log files
493N/AOLD=$VAR/.Old
493N/AO_LOGS=$OLD/Old-Log
98N/AACCT_LOGS=$OLD/Old-acct
493N/ASEC_LOGS=$OLD/Old-sec
98N/A
591N/A[ -f $ADMIN/xferstats ] && mv $ADMIN/xferstats $OLD/xferstats
111N/A[ -f $ADMIN/audit ] && mv $ADMIN/audit $OLD/audit
111N/A[ -f $ADMIN/command ] &&mv $ADMIN/command $OLD/command
111N/A[ -f $ADMIN/errors ] && mv $ADMIN/errors $OLD/errors
111N/A[ -f $ADMIN/Foreign ] && mv $ADMIN/Foreign $OLD/Foreign
111N/A
111N/A> $ADMIN/xferstats
493N/A> $ADMIN/audit
493N/A> $ADMIN/command
98N/A> $ADMIN/errors
98N/A> $ADMIN/Foreign
98N/A
212N/A#
212N/A# If performance log exists, save it and create a new one
212N/A#
212N/Aif [ -f $ADMIN/perflog ]
98N/Athen
98N/A mv $ADMIN/perflog $OLD/perflog
98N/A > $ADMIN/perflog
98N/Afi
182N/A
98N/A#
# 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