#!/bin/bash

unset VNCSERVERARGS
VNCSERVERS=""
if [ -f /etc/sysconfig/tvncservers ]; then
    . /etc/sysconfig/tvncservers
fi

prog=$"TurboVNC server"

start() {
    echo -n $"Starting $prog: "
    ulimit -S -c 0 >/dev/null 2>&1
    RETVAL=NONE
    for display in ${VNCSERVERS}
    do
        unset BASH_ENV ENV
        DISP="${display%%:*}"
        export VNCUSERARGS="${VNCSERVERARGS[${DISP}]}"
        _OUT=`echo ${display}; su ${display##*:} -c "cd ~${display##*:} && /usr/bin/vncserver :${display%%:*} -quiet ${VNCUSERARGS}" 2>&1`
        _RETVAL=$?
        if [[ ! $_OUT =~ "A VNC server is already running" ]]; then
            RETVAL=$_RETVAL
            echo -n "${display} "
            logger -p local7.notice "$_OUT"
        fi
    done
    echo
}

stop() {
    echo -n $"Shutting down $prog: "
    RETVAL=NONE
    for display in ${VNCSERVERS}
    do
        echo -n "${display} "
        unset BASH_ENV ENV
        _OUT=`echo ${display}; su ${display##*:} -c "/usr/bin/vncserver -kill :${display%%:*}" 2>&1`
        RETVAL=$?
        if [[ ! $_OUT =~ "You'll have to kill the Xvnc process manually" ]]; then
            logger -p local7.notice "$_OUT"
        fi
    done
    echo
}

reload() {
    # Walk the process list and shut down any TurboVNC sessions that aren't
    # specified in the tvncservers file.
    for active in `ps uh -C Xvnc | grep /usr/bin/Xvnc | awk '{ print $12, $16 }' | tr -d ':' | tr ' ' ':' | sed -e 's/(//' -e 's/)//'`
    do
        skip=
        for display in ${VNCSERVERS}
        do
            if [[ $active == $display ]]; then
                skip=1
                break;
             fi
        done
        if [[ ! -n $skip ]]; then
             killlist+=("$active")
        fi
    done
    VNCSERVERS_BAK=${VNCSERVERS}
    VNCSERVERS=${killlist}
    stop
    VNCSERVERS=${VNCSERVERS_BAK}

    # Start any TurboVNC sessions specified in the tvncservers file that
    # haven't been started yet.
    start
}

# See how we were called.
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    reload)
        reload
        ;;
    *)
        echo $"Usage: $0 {start|stop|reload}"
        exit 1
esac
