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

#
# Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#
# ident	"@(#)proc.inetd_remove	1.4	04/07/29 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=${PKG_INSTALL_ROOT:-/}/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
	inetd_fini
}

# inetd_check verifies whether any processes are running for the
# supplied FMRI, fails if there are, if not it sends the service to
# maintenance mode.
#
inetd_check() {
    	# Return if we're not removing from the running system
    	if [ "${PKG_INSTALL_ROOT:-/}" != "/" ]; then
	    	return 0
	fi

	for i in "$@"; do
	    	cts=`svcprop -p restarter/contract $i 2>/dev/null`
		if [ -n "$cts" ]; then
			echo "$i running; unable to remove package"
			return 1
		fi
		svcadm mark maintenance $i
	done

	return 0
}

inetd_remove() {
    	inetd_check "$@" || return 1;
	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

			;;

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

# check if any of SLVM daemons are still running

inetd_check network/rpc/meta:default network/rpc/metamh:default \
    network/rpc/metamed:default network/rpc/mdcomm:default

if [ $? -ne 0 ]; then
	exit 1
fi
exit 0
