#!/bin/sh
### BEGIN INIT INFO
# Provides:          sbrshd
# Required-Start:    $remote_fs
# Required-Stop:     $remote_fs
# Should-Start:      $remote_fs
# Should-Stop:       $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start sbrshd daemon
# Description:       Sbrshd deamon is started if defined to
#                    start in /etc/default/sbrshd.
### END INIT INFO

ENABLE=true           # true | false

PORT=1202             # <port>
LOCAL_ONLY=false      # true | false
NO_SANDBOX=false      # true | false
ALLOW_ROOT=false      # true | false
DEBUG=false           # true | false
DEBUG_VERBOSE=false   # true | false
EXPIRATION=15         # 0 | <minutes> | none

SBRSHD=/usr/sbin/sbrshd
PIDFILE=/var/run/sbrshd.pid
DEBUG_FILE=/tmp/sbrshd-$PORT.log

if [ -f /etc/default/sbrshd ]; then
    . /etc/default/sbrshd
fi

if ! [ -x $SBRSHD ]; then
    exit 0
fi

signal_sbrshd()
{
    SIGNAL=$1

    if [ -f $PIDFILE ]; then
        PID=`cat $PIDFILE`

        if [ x"$PID" != x ] && [ -d /proc/$PID ]; then
            if ! kill -$SIGNAL $PID; then
                echo "failed!"
                return
            fi

            if [ $SIGNAL = TERM ]; then
                for i in 1 2 3 4 5; do
                    if [ ! -d /proc/$PID ]; then
                        rm $PIDFILE
                        echo "done."
                        return
                    fi

                    sleep 1
                done

                echo "process did not die!"
            else
                echo "done."
            fi
        else
            echo "process not found!"

            if [ $SIGNAL = TERM ]; then
                rm $PIDFILE
            fi
        fi
    else
        echo "pid file not found!"
    fi
}

case "$1" in
    start)
        if ! $ENABLE; then
            echo "Not starting sbrshd, disabled via /etc/default/sbrshd"
            exit 0
        fi

        echo -n "Starting sbrshd: "

        if [ -f $PIDFILE ]; then
            PID=`cat $PIDFILE`

            if [ "$PID" ] && [ -d /proc/$PID ]; then
		echo "already running!"
		exit 1
            else
                rm $PIDFILE
            fi
        fi

        ARGS="$SBRSHD --port=$PORT --mount-expiration=$EXPIRATION"

        if $LOCAL_ONLY; then
            ARGS="$ARGS --local-only"
        fi
        if $NO_SANDBOX; then
            ARGS="$ARGS --no-sandbox"
        fi
        if $ALLOW_ROOT; then
            ARGS="$ARGS --allow-root"
        fi
        if $DEBUG; then
            ARGS="$ARGS --debug=$DEBUG_FILE"
        fi
        if $DEBUG_VERBOSE; then
            ARGS="$ARGS --debug-verbose"
        fi
        if [ -n "$MOUNT_BIN" ] ; then
            ARGS="$ARGS --mount-bin=$MOUNT_BIN"
        fi
        if [ -n "$UMOUNT_BIN" ] ; then
            ARGS="$ARGS --umount-bin=$UMOUNT_BIN"
        fi
        if [ -n "$SSHFS_BIN" ] ; then
            ARGS="$ARGS --sshfs-bin=$SSHFS_BIN"
        fi
        if [ -n "$FUSERMOUNT_BIN" ] ; then
            ARGS="$ARGS --fusermount-bin=$FUSERMOUNT_BIN"
        fi

        PID=`$ARGS`

        if [ x"$PID" != x ]; then
	    echo "done."
	    echo $PID > $PIDFILE
	else
	    exit 1
        fi
        ;;

    stop)
        echo -n "Stopping sbrshd: "
        signal_sbrshd TERM
        ;;

    restart|reload|force-reload)
        $0 stop
	sleep 1
        $0 start
        ;;

    enable-debug)
        echo -n "Opening sbrshd debug log: "
        signal_sbrshd USR1
        ;;

    disable-debug)
        echo -n "Closing sbrshd debug log: "
        signal_sbrshd USR2
        ;;

    *)
        echo "Usage: $0 {start|stop|restart|enable-debug|disable-debug}"
        exit 1
        ;;
esac

exit 0
