#!/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
#
# chkconfig: 2345 11 89
# description: TCP port reservation utility
#
### BEGIN INIT INFO
# Provides:          portreserve
# Required-Start:
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 6
# Short-Description: Port reservation utility
# Description:       Portreserve is a TCP port reservation utility
#                    that can be use to prevent RPC services from 
#                    picking up well-known reserved ports.
### END INIT INFO


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

. /lib/lsb/init-functions

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

check_start() 
{
# Check if the directory used for the socket exists
    if [ ! -d /var/run/portreserve/ ]; then
         mkdir /var/run/portreserve/ 
    fi
}


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
        check_start
	log_daemon_msg "Starting $LABEL" "$NAME"
	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
                            log_end_msg 0
                            exit 0
			else
                            log_end_msg 1
                            exit 1
			fi
		else
                        log_progress_msg "already running"
                        log_end_msg 0
                        exit 0
		fi
	else
            log_progress_msg " - not starting, no services registered"
            log_end_msg 0
	fi
        ;;
  stop)
        # Stop daemon.
	ok=0
        log_daemon_msg "Stopping $LABEL" "$NAME"
        if running; then
            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
                log_end_msg 0
                exit 0
            else 
                log_end_msg 1
                exit 1
            fi
        else
            log_progress_msg "apparently not running"
            log_end_msg 0
            exit 0
        fi

        ;;
  status)
    log_daemon_msg "Status of $LABEL" 
    if running ;  then
        log_progress_msg "running"
        log_end_msg 0
        exit 0
    else
        log_progress_msg "not running"
        log_end_msg 1
        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
