#!/bin/sh
#
# startup script for telnetd with tcpserver
#
# chkconfig: 2345 50 25
# description: Start telnetd through tcpserver. Written by NONO http://www.asahi-net.or.jp/~aa4t-nngk/

MYPROGPATH=/usr/sbin/
MYPROG=in.telnetd
TESTCHAR=tcpserver
TEST2CHAR=telnet
PIDFILE=/var/run/telnetd.pid
LOCKFILE=/var/lock/subsys/telnetd
RETRY=5

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0

# Check if main binary is exectable
[ -x ${MYPROGPATH}$MYPROG ] || exit 1

# See how we were called.
start() {
	# Start daemons.
	PATH="$MYPROGPATH:/usr/local/bin:$PATH"
	echo -n $"Starting $MYPROG: "

	# See if it is already running.
	if [ -f $LOCKFILE ]; then
		failure
		echo
		return 1
	fi

	tcpserver -H -R -l 0 -v -c 5 \
 -x /etc/service/tcp.telnet.cdb 0 telnet \
 $MYPROG 2>&1 | /var/qmail/bin/splogger telnetd 10 &
	RETVAL=$?
	if [ $RETVAL -ne 0 ] ; then
		failure
		echo
		return 1
	fi

	# Create lock and pid file.
	COUNT=0
	while :; do
		[ -s $PIDFILE ] && break
		if [ $COUNT -gt $RETRY ] ; then
			echo $"$MYPROG started BUT could NOT create PIDFILE" >&2
			return 0
		fi
		{ detectpid $TESTCHAR $TEST2CHAR >$PIDFILE; } 2>/dev/null
		: $((COUNT+=1))
	done
	touch $LOCKFILE
	success
	echo
	return 0
}

stop() {
	# Stop daemons. Killproc always removes pid file.
	echo -n $"Stopping $MYPROG: "
	killproc telnetd
	RETVAL=$?
	[ $RETVAL -eq 0 ] && rm -f $LOCKFILE
	echo
	return $RETVAL
}

case "$1" in
  start)
        start
        RETVAL=$?
        ;;
  stop)
        stop
        RETVAL=$?
        ;;
  restart)
        stop
        start
        RETVAL=$?
        ;;
  *)
        echo "Usage: telnetd {start|stop|restart}"
        exit 1
esac

exit $RETVAL
