#!/bin/sh
#
# Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#
# ident	"@(#)preremove.tmpl	1.2	04/03/12 SMI"
#

#
# Copyright (c) 2000 by Sun Microsystems, Inc.
# All rights reserved.
#
# ident	"@(#)proc.inetd_remove	1.1	00/12/08 SMI"
#

# proc.inetd_remove -- common code for inetd.conf entry removal
#
# inetd_init	: call before any other functions
# inetd_remove	: remove daemons specified as arguments by removing
#		  lines from inetd.conf that match the regular
#		  expressions provided on stdin (one per line)
# inetd_undo	: call if rest of procedure script fails
# inetd_fini	: call if rest of procedure script succeeds
#
# inetd_init and inetd_remove will perform necessary clean-up and
# return a non-zero exit code on failure.

inetconf=$BASEDIR/etc/inet/inetd.conf
inetold=/tmp/inetd.conf.$$
inetsed=/tmp/inetd.sed.$$
inettmp=/tmp/inetd.tmp.$$

inetd_init() {
	cat $inetconf > $inetold
	if [ $? -ne 0 ]; then
		echo "can't create $inetold"
		return 1
	fi
	return 0
}

inetd_fini() {
	rm -f -- $inetold $inetsed $inettmp
	return 0
}

inetd_undo() {
	cat $inetold > $inetconf
	/usr/bin/pkill -HUP -x -u 0 inetd
	inetd_fini
}

#
# inetd_check assumes PKG_INSTALL_ROOT is unset or "/".
# inetd_check should only be called from inetd_remove.
#
inetd_check() {
	/usr/bin/pkill -HUP -x -u 0 inetd
	if [ $? -eq 3 ]; then
		#
		# can't restart inetd, fail to remove the package.
		#
		echo "failed to restart inetd; failing"
		inetd_undo
		return 1
	fi

	for i in "$@"; do
		/usr/bin/pgrep -x -u 0 "$i" >/dev/null
		if [ $? -ne 1 ]; then
			echo "$i running; unable to remove package"
			inetd_undo
			return 1
		fi
	done

	return 0
}

inetd_remove() {
	INSTALLED_PKGS=`pkginfo $PKG\\* | wc -l`
	if [ $INSTALLED_PKGS -eq 1 ]; then
		#
		# Remove the additions that were made to /etc/inetd.conf
		#
		sed -e 's:/:\\/:g' -e 's:.*:/&/ d:' > $inetsed
		if [ $? -ne 0 ]; then
			echo "couldn't create $inetsed"
			inetd_undo
			return 1
		fi
		sed -f $inetsed < $inetconf > $inettmp
		if [ $? -ne 0 ]; then
			echo "couldn't create $inettmp"
			inetd_undo
			return 1
		fi

		cmp -s $inetconf $inettmp
		case $? in
		0)	;;
		1)	cat $inettmp > $inetconf
			if [ $? -ne 0 ]; then
				echo "couldn't edit $inetconf"
				inetd_undo
				return 1
			fi
			inetd_check "$@"
			return $?
			;;

		*)	echo "couldn't read $inetconf or $inettmp"
			inetd_undo
			return 1
			;;
		esac
	fi
	return 0
}

# Remove entries in inetd.conf for SLVM daemons

inetd_init
if [ $? -ne 0 ]; then
	exit 1
fi
inetd_remove rpc.metad rpc.metamhd rpc.metamedd rpc.mdcommd <<EOF
^[#	 ]*100229/1
^[#	 ]*100230/1
^[#	 ]*100242/1
^[#	 ]*10110001/1
^# METAD
^# METAMHD
^# METAMEDD
^# MDMN_COMMD
^# SLVM Daemons
EOF
if [ $? -ne 0 ]; then
	exit 1
fi
inetd_fini
