#!/bin/sh
#
# portreserve  This script starts and stops the TCP port reserver
# Originally written by Tim Waugh from Red Hat
# Adapted to Debian by Javier Fernandez-Sanguino
#
# description: portreserve is a TCP port reservation utility.

DAEMON=/sbin/portreserve
LABEL="Port reservation utility"
test -f $DAEMON || exit 0

NAME=`basename $DAEMON`
PIDFILE=/var/run/$NAME.pid

running()
{
    # No pidfile, probably no daemon present
    #
    [ ! -f "$PIDFILE" ] && return 1
    pid=`cat $PIDFILE 2>/dev/null`
    # No pid, probably no daemon present
    [ -z "$pid" ] && return 1
    [ ! -d /proc/$pid ] &&  return 1
    cmdline=`cat /proc/$pid/cmdline 2>/dev/null | tr "\000" "\n"|head -n 1 |cut -d : -f 1`
    cmd=`basename $cmdline`
    [ "$cmd" != "$NAME" ] &&  return 1
    return 0
}

registered_services()
{
# Determine if there are any registered services, we return true
# if the directory exists and there are files that will _not_ be 
# ignored by portreserve (i.e. files with '~' or '.' in their names)
	if [ ! -d /etc/portreserve ] ; then
		return 1
	fi
	if [ -z "`find /etc/portreserve \! -name "*~" -a \! -name "*.*" -type f`" ] ; then
		return 1
	fi
	return 0
}


# See how we were called.
case "$1" in
  start)
  	# Clean stale PIDFILE
	if [ -e $PIDFILE ] ; then
		if ! running ; then
			rm -f $PIDFILE
		fi
	fi
	# Start daemon.
	ok=0
	echo -n "Starting $LABEL:"
	if registered_services ; then
		if ! running ; then
			start-stop-daemon --start --pidfile $PIDFILE --quiet --oknodo --exec $DAEMON
			# Check start-stop-daemon
			if [ $? -eq 0 ] ; then
				# Wait a bit for things to settle
				sleep .1
				if ! running ; then 
					ok=1
				fi
			else 
				ok=1
			fi
			if [ $ok -eq 0 ] ; then
				echo " $NAME."
			else
				echo " ERROR!"
				exit 1
			fi
		else
			echo " already running."
		fi
	else
		echo " Not starting $NAME, no services registered."
	fi
        ;;
  stop)
        # Stop daemon.
	ok=0
        echo -n "Stopping $LABEL: "
	start-stop-daemon --stop --quiet --oknodo --exec $DAEMON
	if [ $? -eq 0 ] ; then
		# Wait a bit for things to settle
		sleep .1
		if  running ; then 
			ok=1
		fi
	else 
		ok=1
	fi
	if [ $ok -eq 0 ]; then
		echo " $NAME."
	else 
		echo " ERROR!"
		exit 1
	fi
        ;;
  status)
    echo -n "$LABEL is "
    if running ;  then
            echo "running"
    else
            echo " not running."
            exit 1
    fi
    ;;
   reload|force-reload)
       $0 restart
       ;;
  restart)
        $0 stop
        $0 start
        ;;
  *)
	echo "Usage: $0 {start|stop|status|restart|reload|force-reload}"
	exit 1
esac

exit 0
