#!/bin/sh
#
# Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved
#
# $Id: preremove,v 1.1.1.1 2007/04/09 21:22:49 tw76360 Exp $

#
# 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=${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
	if [ "${PKG_INSTALL_ROOT:-/}" = "/" ] ; then
		/usr/bin/pkill -HUP -x -u 0 inetd
	fi
	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
			if [ "${PKG_INSTALL_ROOT:-/}" = "/" ] ; then
				inetd_check "$@"
				return $?
			fi
			;;

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

# Begin executable section

pkill -U svctag in.stdiscover
pkill -U svctag in.stlisten

OSVERS=`/bin/uname -r`
if [ "${OSVERS}" = "5.8" -o "${OSVERS}" = "5.9" ]; then
  # Remove entry in inetd.conf for servicetags

  inetd_init
  if [ $? -ne 0 ]; then
	  exit 1
  fi
  inetd_remove stagent <<EOF
[#	 ]*servicetag
^# Service Tags Agent
EOF
  inetd_init
  if [ $? -ne 0 ]; then
   	 exit 1
  fi
  inetd_fini
else
  # Ensure SMF services are stopped

  for SVC in stlisten stdiscover
  do
     SERVICE="svc:/network/${SVC}:default"
     /usr/bin/svcprop -q ${SERVICE} 
     if [ $? -eq 0 ]; then
        svcadm disable ${SERVICE}
        if [ $? -ne 0 ]; then
           echo "\n$0 Disabling of ${SERVICE} failed!\n" >&2
           exit 1
        fi
        svcadm refresh ${SERVICE}
     fi
   done
fi

# Remove Service Tags directory

rm -rf /var/sadm/servicetag 1>/dev/null 2>&1
