xref: /illumos-gate/usr/src/cmd/bnu/uudemon.cleanup (revision 8119dad84d6416f13557b0ba8e2aaf9064cbcfd3)
1#!/usr/bin/sh
2#
3# CDDL HEADER START
4#
5# The contents of this file are subject to the terms of the
6# Common Development and Distribution License, Version 1.0 only
7# (the "License").  You may not use this file except in compliance
8# with the License.
9#
10# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
11# or http://www.opensolaris.org/os/licensing.
12# See the License for the specific language governing permissions
13# and limitations under the License.
14#
15# When distributing Covered Code, include this CDDL HEADER in each
16# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
17# If applicable, add the following below this CDDL HEADER, with the
18# fields enclosed by brackets "[]" replaced with your own identifying
19# information: Portions Copyright [yyyy] [name of copyright owner]
20#
21# CDDL HEADER END
22#
23#
24# Copyright 1997 Sun Microsystems, Inc.  All rights reserved.
25# Use is subject to license terms.
26#
27#ident	"%Z%%M%	%I%	%E% SMI"
28#
29#	This demon cleans up uucp directories.
30#	It is started by /var/spool/cron/crontabs/uucp;
31#	it can be run daily, weekly, whatever depending on the system
32#	  uucp load.
33#
34
35# return a list of systems defined in /etc/uucp/Systems
36getsystems() {
37if [ ! -f /etc/uucp/Systems ]; then
38  return
39else
40  awk '$1 !~ /^#/ {print $1}' /etc/uucp/Systems
41fi
42}
43
44# return a list of systems defined in /etc/asppp.cf
45getpppsystems() {
46if [ ! -f /etc/asppp.cf ]; then
47  return
48else
49  X=`sed -e 's/#.*$//' /etc/asppp.cf`
50  set -- $X
51  while [ $# -ne 0 ];
52  do
53      if [ "$1" = "peer_system_name" ]; then
54          PPPSYSTEMS="$PPPSYSTEMS $2"
55      fi
56      shift
57  done
58  echo "$PPPSYSTEMS"
59fi
60}
61
62nouucp() {
63# run through the systems list, deleting ppp systems
64outstr=""
65for i in `getsystems`
66do
67    del=0
68    for j in `getpppsystems`
69    do
70        if [ "$j" = "$i" ]; then
71            del=1
72        fi
73    done
74    if [ $del -ne 1 ]; then
75        outstr="$outstr $i"
76    fi
77done
78
79# if any names are in $outstr, assume uucp is configured
80
81if [ -n "$outstr" ]; then
82	return 1
83else
84	return 0
85fi
86}
87
88# Start of actual processing. For energystar compatibility,
89# we attempt to do as little I/O as possible, so first check
90# to see if uucp is configured before doing all this work.
91
92if nouucp; then
93	exit 0
94fi
95
96MAILTO=uucp
97MAILDIR=/var/mail
98export PATH
99PATH=/usr/bin:/usr/lib/uucp
100TMP=/tmp/uu$$
101
102#	Running as uucp, take care to protect things
103
104umask 0022
105
106#
107#	These are taken from the Makefile.  If changed in Makefile
108#	they must be changed here also.
109#
110PUBDIR=/var/spool/uucppublic
111SPOOL=/var/spool/uucp
112VAR=/var/uucp
113LOCKS=/var/spool/locks	# needs a comment in parms.h on USRSPOOLOCKS
114XQTDIR=$VAR/.Xqtdir
115CORRUPT=$SPOOL/.Corrupt
116LOGDIR=$VAR/.Log
117SEQDIR=$VAR/.Sequence
118STATDIR=$VAR/.Status
119WORKDIR=$SPOOL/.Workspace
120ADMIN=$VAR/.Admin
121
122#	OLD is the directory for archiving old admin/log files
123OLD=$VAR/.Old
124O_LOGS=$OLD/Old-Log
125ACCT_LOGS=$OLD/Old-acct
126SEC_LOGS=$OLD/Old-sec
127
128[ -f $ADMIN/xferstats ] && mv $ADMIN/xferstats $OLD/xferstats
129[ -f $ADMIN/audit ] && mv $ADMIN/audit $OLD/audit
130[ -f $ADMIN/command ] &&mv $ADMIN/command $OLD/command
131[ -f $ADMIN/errors ] && mv $ADMIN/errors $OLD/errors
132[ -f $ADMIN/Foreign ] && mv $ADMIN/Foreign $OLD/Foreign
133
134> $ADMIN/xferstats
135> $ADMIN/audit
136> $ADMIN/command
137> $ADMIN/errors
138> $ADMIN/Foreign
139
140#
141#	If performance log exists, save it and create a new one
142#
143if [ -f $ADMIN/perflog ]
144then
145	mv $ADMIN/perflog $OLD/perflog
146	> $ADMIN/perflog
147fi
148
149#
150#	The list in the for controls how many old Log and security logs
151#	are retained: 2 -> 3, 1 -> 2, current -> 1.
152#
153for i in  2 1
154do
155	j=`expr $i + 1`
156	[ -f ${O_LOGS}-$i ] && mv ${O_LOGS}-$i ${O_LOGS}-$j
157	[ -f ${SEC_LOGS}-$i ] && mv ${SEC_LOGS}-$i ${SEC_LOGS}-$j
158done
159
160[ -f $ADMIN/security ] && mv $ADMIN/security ${SEC_LOGS}-1
161> $ADMIN/security
162
163#
164#	Combine all log files into O_LOGS-1.
165#	Add a name separator between each system.
166#
167> ${O_LOGS}-1
168for i in uucico uucp uux uuxqt
169do
170	if [ ! -d $LOGDIR/$i ]
171	then
172	      (echo "uudemon.cleanup: $LOGDIR/$i directory does not exist, remove if file"
173	       echo "uudemon.cleanup: making a directory $LOGDIR/$i"
174	      ) | mail $MAILTO
175		rm -f $LOGDIR/$i
176		mkdir $LOGDIR/$i
177		continue
178	fi
179	cd $LOGDIR/$i
180
181#	can't compare exactly because of symlinks
182	case `pwd` in
183	*`basename $LOGDIR`/$i)
184		;;
185	*)
186	 	 (echo "uudemon.cleanup: unable to chdir to $LOGDIR/$i") | mail $MAILTO
187		continue
188		;;
189	esac
190	for j in *
191	do
192		if [ "$j" = "*" ]
193		then
194			break
195		fi
196		echo "********** $j ********** ($i)" >> ${O_LOGS}-1
197		cat $j >> ${O_LOGS}-1
198		rm -f $j
199	done
200done
201
202#
203#	If the accounting log exists, save it and create a new one.
204#	The list in the for controls how many old accounting logs
205#	are retained: 2 -> 3, 1 -> 2, current -> 1.
206#
207if [ -f $ADMIN/account ]
208then
209	for i in  2 1
210	do
211		j=`expr $i + 1`
212		[ -f ${ACCT_LOGS}-$i ] && mv ${ACCT_LOGS}-$i ${ACCT_LOGS}-$j
213	done
214	[ -f $ADMIN/account ] && mv $ADMIN/account ${ACCT_LOGS}-1
215	> $ADMIN/account
216fi
217
218#	Execute the system directory cleanup program
219#	See uucleanup.1m for details.
220uucleanup -D7 -C7 -X2 -o2 -W1
221
222#	Use the grep instead of the mv to ignore warnings to uucp
223# grep -v 'warning message sent to uucp' $ADMIN/uucleanup > $OLD/uucleanup
224[ -f $ADMIN/uucleanup ] && mv $ADMIN/uucleanup $OLD/uucleanup
225if [ -s $OLD/uucleanup ]
226then
227	(echo "Subject: cleanup"; echo; cat $OLD/uucleanup) | mail $MAILTO
228fi
229>$ADMIN/uucleanup
230
231#  cleanup funny directories that may have been created in the spool areas
232for d in $SPOOL/[0-9A-Za-z]*
233do
234	if [ -f $d ]
235	then
236		# skip any regular files, like lockfiles
237		# and mail.log and so forth
238		continue
239	fi
240	if [ -z "`ls $d`" ]
241	then
242		# empty directory
243		continue
244	fi
245	cd $d
246	# we'd check that we were in the correct directory
247	if [ "`basename \`pwd\``" != "`basename $d`" ]
248	then
249		(echo "uudemon.cleanup: unable to chdir to $d") | mail $MAILTO
250		continue
251	fi
252	for s in */*
253	do
254		if [ "$s" = "*/*" ]
255		then
256			break
257		fi
258		if [ -d $s ]
259		then
260			# Remove subdirs of subdirs
261			rm -fr $s
262		fi
263	done
264
265	# if it is now empty, remove it.
266	cd ..
267	rmdir $d/* $d
268done >/dev/null 2>&1
269
270#
271#	Find old cores
272#
273find $SPOOL -name core -print > $TMP
274if [ -s $TMP ]
275then
276	(echo "Subject: cores"; echo; cat $TMP) | mail $MAILTO
277fi
278
279#
280#	Remove old files and directories
281#
282#find $PUBDIR -type f -mtime +30 -exec rm -f {} \;
283find $PUBDIR/* -depth -type d -exec rmdir {} \; >/dev/null 2>&1
284find $SPOOL/* -depth -type d -exec rmdir {} \; >/dev/null 2>&1
285find $SEQDIR -type f -mtime +30 -exec rm -f {} \;
286find $WORKDIR -type f -mtime +1 -exec rm -f {} \;
287find $STATDIR -type f -mtime +2 -exec rm -f {} \;
288find $CORRUPT -type f -mtime +10 -exec rm -f {} \;
289
290rm -f $LOCKS/LTMP*
291rmdir $SPOOL/[0-9A-Za-z]* >/dev/null 2>&1
292
293#
294#	Mail a daily summary of status
295#
296grep passwd ${O_LOGS}-1 > $TMP
297grep "REQUEST.*/" ${O_LOGS}-1 >> $TMP
298if [ -s $TMP ]
299then
300	(echo "Subject: uucp requests"; echo; cat $TMP) | mail $MAILTO
301fi
302
303
304awk '/(DENIED)/	{print prev}
305		{prev = $0}' ${O_LOGS}-1 > $TMP
306if [ -s $TMP ]
307then
308	(echo "Subject: uucp DENIED"; echo; cat $TMP) | mail $MAILTO
309fi
310
311uustat -q > $TMP
312if [ -s $TMP ]
313then
314	(echo "Subject: uu-status"; echo; cat $TMP) | mail $MAILTO
315fi
316
317ls $CORRUPT > $TMP
318if [ -s $TMP ]
319then
320	(echo "Subject: $CORRUPT"; echo; cat $TMP) | mail $MAILTO
321fi
322
323if [ -s $OLD/errors -o -s $OLD/Foreign ]
324then
325	(echo "Subject: uucp Admin"; \
326	echo; echo tail errors; tail $OLD/errors; \
327	echo; echo tail Foreign; tail $OLD/Foreign; \
328	) | mail $MAILTO
329fi
330# don't run if no system directories exist
331if [ "`echo $SPOOL/*`" != "$SPOOL/*" ]
332then
333	(echo "Subject: uucleanup ran; $SPOOL du"; echo; du $SPOOL) | \
334		mail $MAILTO
335fi
336
337#
338#	Dispose of mail to nuucp
339#
340rm -f $MAILDIR/nuucp $TMP
341