#!/bin/bash
#
# chkconfig: - 91 35
# description: Starts and stops the TurboVNC Server
#
### BEGIN INIT INFO
# Provides: tvncserver
# Required-Start: $syslog
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Starts and stops the TurboVNC Server
### END INIT INFO

# Source function library.
REDHAT=0
if [ -f /etc/rc.d/init.d/functions ]; then
    . /etc/rc.d/init.d/functions
    REDHAT=1
else
    if [ -f /lib/lsb/init-functions ]; then
        . /lib/lsb/init-functions
    else
        echo "Unsupported platform"
        exit 1
    fi
fi

if [ $REDHAT -eq 1 ]; then
    # Source networking configuration.
    . /etc/sysconfig/network

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

unset VNCSERVERARGS
VNCSERVERS=""
[ -f /etc/sysconfig/tvncservers ] && . /etc/sysconfig/tvncservers

LOCKDIR=/var/lock
if [ -d /var/lock/subsys ]; then
    LOCKDIR=/var/lock/subsys
fi

prog=$"TurboVNC server"

start() {
    echo -n $"Starting $prog: "
    ulimit -S -c 0 >/dev/null 2>&1
    RETVAL=0
    for display in ${VNCSERVERS}
    do
        echo -n "${display} "
        unset BASH_ENV ENV
        DISP="${display%%:*}"
        export VNCUSERARGS="${VNCSERVERARGS[${DISP}]}"
        _OUT=`echo ${display}; su ${display##*:} -c "cd ~${display##*:} && [ -f .vnc/passwd ] && /usr/src/tmp/turbovnc-buildroot/usr/bin/vncserver :${display%%:*} ${VNCUSERARGS}" 2>&1`
        RETVAL=$?
        logger -p local7.notice $_OUT
        [ "$RETVAL" -ne 0 ] && break
    done
    if [ $REDHAT -eq 1 ]; then
        [ "$RETVAL" -eq 0 ] && success $"vncserver startup" || \
            failure $"vncserver start"
    else
        [ "$RETVAL" -eq 0 ] && log_success_msg || \
            log_failure_msg
    fi
    echo
    [ "$RETVAL" -eq 0 ] && touch $LOCKDIR/tvncserver
}

stop() {
    echo -n $"Shutting down $prog: "
    RETVAL=0
    for display in ${VNCSERVERS}
    do
        echo -n "${display} "
        unset BASH_ENV ENV
        _OUT=`echo ${display}; su ${display##*:} -c "/usr/src/tmp/turbovnc-buildroot/usr/bin/vncserver -kill :${display%%:*}" 2>&1`
        RETVAL=$?
        logger -p local7.notice $_OUT
    done
    if [ $REDHAT -eq 1 ]; then
        [ "$RETVAL" -eq 0 ] && success $"vncserver shutdown" || \
            failure $"vncserver shutdown"
    else
        [ "$RETVAL" -eq 0 ] && log_success_msg $"vncserver shutdown" || \
            log_failure_msg $"vncserver shutdown"
    fi
    echo
    [ "$RETVAL" -eq 0 ] && rm -f $LOCKDIR/tvncserver
}

# See how we were called.
case "$1" in
  start)
	start
	;;
  stop)
	stop
	;;
  restart|reload)
	stop
	start
	;;
  condrestart)
	if [ -f $LOCKDIR/tvncserver ]; then
	    stop
	    start
	fi
	;;
  status)
	status Xvnc
	;;
  *)
	echo $"Usage: $0 {start|stop|restart|condrestart|status}"
	exit 1
esac

