#!/bin/sh
# inet          Start TCP/IP networking services. This script is wrapper for
#		any kind inetd daemon like inetd, rlinetd and others.
#
# Author:       Tomasz Koczko <kloczek@pld.org.pl>
#
# chkconfig:	345 50 50
# description:	The internet superserver daemon starts a variety of other \
#		internet services as needed. It is responsible for starting \
#		many services, including telnet, ftp, rsh, and rlogin. \
#		Disabling inetd disables all of the services it is responsible for.

. /etc/rc.d/init.d/functions

# sanity check for /etc/sysconfig/rc-inetd.conf
# Note: Defaults must be read for each service, beacuse they will be replaced
#	by config of each service processed.
if [ ! -f /etc/sysconfig/rc-inetd.conf ]; then
	echo "Error: /etc/sysconfig/rc-inetd.conf not found"
	echo " Inet server can't be run."
	exit 1
fi

# sanity check for /etc/sysconfig/rc-inet.script
if [ -f /etc/sysconfig/rc-inet.script ]; then
	. /etc/sysconfig/rc-inet.script
else
	echo "Error: /etc/sysconfig/rc-inet.script not found"
	echo " Inet server can't be run."
	exit 1
fi

gen_config_file()
{
	# initialize empty config file
	rm -f $CONFIG_FILE
	CURRENT_UMASK=`umask`
	if [ ${CONFIG_FILE_UMASK}x != x ]; then 
		umask $CONFIG_FILE_UMASK 
	fi

	echo $PREAMBLE >$CONFIG_FILE
	echo >>$CONFIG_FILE
	umask $CURRENT_UMASK

	DID_PARSE=0
	for i in /etc/sysconfig/rc-inetd/*; do
		if echo "$i" | grep -qv '.*\(\.rpm\(save\|new\)\|~\)' ; then
			# Read defaults...
			. /etc/sysconfig/rc-inetd.conf
			# ...and then config of *this* service.
    			. $i
			CURRENT_SERVICE=`basename $i`
			DONT_PARSE=0
			# check if service is in deny list ?
			for i in $DENY_SERVICES ; do
				if [ $i = $CURRENT_SERVICE ] ; then
					DONT_PARSE=1
				fi
			done

			if [ $DONT_PARSE -eq 0 ] ; then
				DID_PARSE=1
				parse_one_service >> $CONFIG_FILE
			fi

			unset SERVICE_NAME SOCK_TYPE PROTOCOL PORT USER
			unset DAEMON DAEMONARGS MAX_CONNECTIONS GROUP NICE
			unset FAMILY INTERFACE CHROOT RPCNAME RPCVERSION
			unset INITGROUPS BANNER ECHO FILTER ENV FLAGS
			unset SERVER MAX_CONNECTIONS_PER_SOURCE
			unset CONNECTIONS_PER_SECOND RPCNUMBER
			unset BANNER_SUCCESS BANNER_FAILURE PASSENV
			unset SERVICE_TYPE ACCESS_TIMES LOG_TYPE
			unset LOG_SUCCESS LOG_FAILURE REDIRECT MAX_LOAD
		fi
	done
	return $DID_PARSE
}

case "$1" in
  start)
	if [ -f /var/lock/subsys/rc-inetd ]; then
		msg_Already_Running Inet
		exit 1
	fi

	show "Generating $CONFIG_FILE for $PROCESS_NAME"
	busy
	if [ "`echo /etc/sysconfig/rc-inetd/*`" = "/etc/sysconfig/rc-inetd/*"  ] ; then
		deltext
		fail
	else
		gen_config_file
		DIDPARSE=$?
		deltext;ok
		if [ "$DIDPARSE" -gt 0 ]; then
			msg_starting "$PROCESS_NAME"
			daemon $INETDAEMON $INETDAEMON_ARGS
			touch /var/lock/subsys/rc-inetd
		fi
	fi
	;;
  stop)
  	if [ -f /var/lock/subsys/rc-inetd ]; then
		msg_stopping "$PROCESS_NAME"
		killproc $INETDAEMON
		rm -f $PID_FILE
		rm -f /var/lock/subsys/rc-inetd
	else
		msg_Not_Running Inet
		exit 0
	fi
	;;
  restart)
	$0 stop
	$0 start
	;;
  reload)
	if [ ! -f /var/lock/subsys/rc-inetd ]; then
		msg_Not_Running Inet
		exit 0
	fi

	show "Generating $CONFIG_FILE for $PROCESS_NAME"
	busy
	if [ "`echo /etc/sysconfig/rc-inetd/*`" = "/etc/sysconfig/rc-inetd/*"  ] ; then
		deltext
		fail
	else
		gen_config_file
		deltext; ok
		show "Reload $PROCESS_NAME service configuration"; busy
		reload_config
		deltext; ok
	fi
	;;
  status)
	status_rc_inetd
	;;
  *)
	msg_Usage "$0 {start|stop|restart|reload|status}"
	exit 1
	;;
esac

exit 0
