#!/bin/ksh
#
#                   check_dtrek -- 15.1 
#
# This script is a troubleshooter for the dtrek program.  It makes
# checks of permissions, shared memory usage, and other things to
# insure that everything is set up correctly for dtrek to run.
#

DTREK_DIR=/usr/local/games/lib/dtrek
permission_list=" \
	.motd						-rw-r--r--	\
	.dtrek_mode					-r--r--r--	\
	.dtrek_ctrl					-r--r--r--	\
	.planets					-rw-r--r--	\
	README						-r--r--r--	\
	clock.bitmap				-r--r--r--	\
	dtrek						-rws--x--x	\
	dtrek.6						-r--r--r--	\
	dtrek_daemon				-rws--x--x	\
	dtrek_robot					-rws--x--x	\
	dtrek_scores				-rwxr-xr-x	\
	dtrek_shipmenu				-rws--x--x	\
	swap_game					-rwxr--r--	\
	scores						lrwxr-xr-x	\
	bitmaps						dr-xr-xr-x	\
	bitmaps/shield.0			-r--r--r--	\
	bitmaps/shield.1			-r--r--r--	\
	bitmaps/shield.10			-r--r--r--	\
	bitmaps/shield.11			-r--r--r--	\
	bitmaps/shield.12			-r--r--r--	\
	bitmaps/shield.13			-r--r--r--	\
	bitmaps/shield.14			-r--r--r--	\
	bitmaps/shield.15			-r--r--r--	\
	bitmaps/shield.2			-r--r--r--	\
	bitmaps/shield.3			-r--r--r--	\
	bitmaps/shield.4			-r--r--r--	\
	bitmaps/shield.5			-r--r--r--	\
	bitmaps/shield.6			-r--r--r--	\
	bitmaps/shield.7			-r--r--r--	\
	bitmaps/shield.8			-r--r--r--	\
	bitmaps/shield.9			-r--r--r--	\
	bitmaps/shield20.0.0		-r--r--r--	\
	bitmaps/shield20.0.1		-r--r--r--	\
	bitmaps/shield20.0.10		-r--r--r--	\
	bitmaps/shield20.0.11		-r--r--r--	\
	bitmaps/shield20.0.12		-r--r--r--	\
	bitmaps/shield20.0.13		-r--r--r--	\
	bitmaps/shield20.0.14		-r--r--r--	\
	bitmaps/shield20.0.15		-r--r--r--	\
	bitmaps/shield20.0.2		-r--r--r--	\
	bitmaps/shield20.0.3		-r--r--r--	\
	bitmaps/shield20.0.4		-r--r--r--	\
	bitmaps/shield20.0.5		-r--r--r--	\
	bitmaps/shield20.0.6		-r--r--r--	\
	bitmaps/shield20.0.7		-r--r--r--	\
	bitmaps/shield20.0.8		-r--r--r--	\
	bitmaps/shield20.0.9		-r--r--r--	\
	bitmaps/shield20.1.0		-r--r--r--	\
	bitmaps/shield20.1.1		-r--r--r--	\
	bitmaps/shield20.1.10		-r--r--r--	\
	bitmaps/shield20.1.11		-r--r--r--	\
	bitmaps/shield20.1.12		-r--r--r--	\
	bitmaps/shield20.1.13		-r--r--r--	\
	bitmaps/shield20.1.14		-r--r--r--	\
	bitmaps/shield20.1.15		-r--r--r--	\
	bitmaps/shield20.1.2		-r--r--r--	\
	bitmaps/shield20.1.3		-r--r--r--	\
	bitmaps/shield20.1.4		-r--r--r--	\
	bitmaps/shield20.1.5		-r--r--r--	\
	bitmaps/shield20.1.6		-r--r--r--	\
	bitmaps/shield20.1.7		-r--r--r--	\
	bitmaps/shield20.1.8		-r--r--r--	\
	bitmaps/shield20.1.9		-r--r--r--	\
	bitmaps/shield20.2.0		-r--r--r--	\
	bitmaps/shield20.2.1		-r--r--r--	\
	bitmaps/shield20.2.10		-r--r--r--	\
	bitmaps/shield20.2.11		-r--r--r--	\
	bitmaps/shield20.2.12		-r--r--r--	\
	bitmaps/shield20.2.13		-r--r--r--	\
	bitmaps/shield20.2.14		-r--r--r--	\
	bitmaps/shield20.2.15		-r--r--r--	\
	bitmaps/shield20.2.2		-r--r--r--	\
	bitmaps/shield20.2.3		-r--r--r--	\
	bitmaps/shield20.2.4		-r--r--r--	\
	bitmaps/shield20.2.5		-r--r--r--	\
	bitmaps/shield20.2.6		-r--r--r--	\
	bitmaps/shield20.2.7		-r--r--r--	\
	bitmaps/shield20.2.8		-r--r--r--	\
	bitmaps/shield20.2.9		-r--r--r--	\
	bitmaps/shield20.3.0		-r--r--r--	\
	bitmaps/shield20.3.1		-r--r--r--	\
	bitmaps/shield20.3.10		-r--r--r--	\
	bitmaps/shield20.3.11		-r--r--r--	\
	bitmaps/shield20.3.12		-r--r--r--	\
	bitmaps/shield20.3.13		-r--r--r--	\
	bitmaps/shield20.3.14		-r--r--r--	\
	bitmaps/shield20.3.15		-r--r--r--	\
	bitmaps/shield20.3.2		-r--r--r--	\
	bitmaps/shield20.3.3		-r--r--r--	\
	bitmaps/shield20.3.4		-r--r--r--	\
	bitmaps/shield20.3.5		-r--r--r--	\
	bitmaps/shield20.3.6		-r--r--r--	\
	bitmaps/shield20.3.7		-r--r--r--	\
	bitmaps/shield20.3.8		-r--r--r--	\
	bitmaps/shield20.3.9		-r--r--r--	\
	shiparchives				drwxrwxrwx	\
	shiparchives/robot			-r--r--r--	\
	shiparchives/shipdefaults	-r--r--r--  \
	check_dtrek					-r-xr-xr-x  \
	"

FOUND_ERROR=FALSE

# make sure the dtrek directory exists
if [ ! -d $DTREK_DIR ]
then
	echo "ERROR:  dtrek directory $DTREK_DIR does not exist.  Aborting."
	exit 1
fi

cd $DTREK_DIR

# check file permissions, owners, and existance
set -- $permission_list

while [ $# -gt 0 ]
do
	if [ ! -f $1 -a ! -d $1 ]
	then
		echo "ERROR: $1 does not exist!"
		FOUND_ERROR=TRUE
	else
		ll=`ll -d $1`
		permission=`echo $ll | cut -f1 -d" "`
		owner=`echo $ll | cut -f3 -d" "`
		if [ "$permission" != "$2" ]
		then
			echo "ERROR: incorrect permission on $1."
			echo "  Should be $2, is $permission instead."
			FOUND_ERROR=TRUE
		fi
		if [ "$owner" != daemon ]
		then
			echo "ERROR: incorrect owner on $1."
			echo "  Should be daemon, is $owner instead."
			FOUND_ERROR=TRUE
		fi
	fi
	shift 2
done

# check scorefile permissions and owners
if [ -d scores ]
then
	cd scores
	for file in `ls`
	do
		ll=`ll -d $file`
		permission=`echo $ll | cut -f1 -d" "`
		owner=`echo $ll | cut -f3 -d" "`
		if [ "$permission" != "-rw-r--r--" ]
		then
			echo "ERROR: incorrect permission on $file."
			echo "  Should be -rw-r--r--, is $permission instead."
			FOUND_ERROR=TRUE
		fi
		if [ "$owner" != daemon ]
		then
			echo "ERROR: incorrect owner on $file."
			echo "  Should be daemon, is $owner instead."
			FOUND_ERROR=TRUE
		fi
	done
	cd $DTREK_DIR
fi

if [ -z "`ps -ef | grep 'dtrek_daemon$'`" ]
then
	DAEMON_RUNNING=FALSE
else 
	DAEMON_RUNNING=TRUE
fi

# check for dtrek processes active but no daemon.
if [ `ps -ef | grep '[	 ]dtrek$' | wc -l` -gt 0 \
	-a $DAEMON_RUNNING = FALSE ]
then
	echo "ERROR: dtrek processes running but no dtrek_daemon."
	FOUND_ERROR=TRUE
fi

# check for dtrek processes active but no daemon.
if [ `ps -ef | grep '[	 ]dtrek ' | wc -l` -gt 0 \
	-a $DAEMON_RUNNING = FALSE ]
then
	echo "ERROR: dtrek processes running but no dtrek_daemon."
	FOUND_ERROR=TRUE
fi

# check for dtrek_robot processes active but no daemon.
if [ `ps -ef | fgrep 'dtrek_robot' | wc -l` -gt 1 \
	-a $DAEMON_RUNNING = FALSE ]
then
	echo "ERROR: dtrek_robot processes running but no dtrek_daemon."
	FOUND_ERROR=TRUE
fi

# check for no daemon but shared memory around
if [ $DAEMON_RUNNING = FALSE -a ! -z "`ipcs -m | fgrep 0x00000103`" ]
then
	echo "ERROR: shared memory segment exists but daemon not active."
	echo "  Probable solution is to \"ipcrm -M 0x00000103\"."
	FOUND_ERROR=TRUE
fi

if [ "$FOUND_ERROR" = FALSE ]
then
	echo "Everything looks OK by this script."
	exit 0
else
	exit 1
fi

