OpenSolaris_b135/cmd/calendar/calendar.sh

#!/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 (c) 1984, 1986, 1987, 1988, 1989 AT&T
#	  All Rights Reserved


#	Copyright (c) 1999 by Sun Microsystems, Inc.
#	All rights reserved.

#ident	"%Z%%M%	%I%	%E% SMI"	/* SVr4.0 1.8	*/
#	calendar.sh - calendar command, uses /usr/lib/calprog

PATH=/usr/bin
USAGE="usage: calendar [ - ]"

# mktmpdir - Create a private (mode 0700) temporary directory inside of /tmp
mktmpdir() {
	tmpdir=/tmp/calendar.$$
	/usr/bin/mkdir -m 700 $tmpdir || exit 1
}
mktmpdir
_tmp=$tmpdir/cal$$

cleanup()
{
	/usr/bin/rm -rf $tmpdir
}

# Trap on SIGHUP, SIGINT, SIGQUIT, SIGPIPE, SIGTERM
for i in 1 2 3 13 15
do
	# Ignore trap if already set by the shell.  NOTE: If /bin/sh
	# is made XCU4 compliant, updates will also be required to this
	# if statement because of XCU4 changes to the trap built-in.
	TRAP_IGNORE=`trap | egrep -c "^$i:\$"`
	if [ "$TRAP_IGNORE" != "1" ]
	then
		# Cleanup; reset default value; send signal to process.
		trap "cleanup; trap $i; kill -$i $$" $i
	fi
done

# POSIX.2 and XCU4 specify that if a utility accepts an operand,
# it also handle -- as a delimitor.
if [ "$1" = -- ]; then
	shift
fi

case $# in
0)	if [ -f calendar ]; then
		/usr/lib/calprog > ${_tmp}
		egrep -f ${_tmp} calendar
	else
		echo >&2 $0: `pwd`/calendar not found
		exit 1
	fi;;
*)	case $* in
	-)	if (rpcinfo -p | fgrep -s ypbind); then
			caldata="ypcat passwd.byname | grep /`uname -n`/"
		else
			caldata="cat /dev/null"
		fi
		/usr/lib/calprog > ${_tmp}
		eval $caldata | cat /etc/passwd - | \
		sed 's/\([^:]*\):.*:\(.*\):[^:]*$/_dir=\2 _user=\1/' | \
		while read _token; do
			eval ${_token}	# evaluates _dir= and _user=
			if [ -s ${_dir}/calendar ]; then
				egrep -f ${_tmp} ${_dir}/calendar 2>/dev/null \
					> $tmpdir/calendar.$$
				if [ -s $tmpdir/calendar.$$ ]; then
					mail ${_user} < $tmpdir/calendar.$$
				fi
			fi
		done;;
	*)	echo >&2 $0: illegal option -- $@
		echo >&2 $USAGE
		exit 1
	esac
esac
cleanup
exit 0