#! /bin/sh
source /etc/platform.conf
COMMAND=x11vnc
PIDFILE=/var/run/$COMMAND.pid
PASSWORDFILE=/etc/x11vnc.passwd
VNC_OPTS="-nopw -shared -skip_lockkeys -sloppy_keys -display :0 -forever -http -httpdir /usr/share/x11vnc/classes/ -desktop \"$(echo $CFG_PLATFORM_FRIENDLY_NAME | cut -d ' ' -f1)-$(hostname | cut -d '-' -f3)\""

function start() {
	PID=-1
	[ -e $PIDFILE ] && PID=$(cat $PIDFILE)
	if [ "$PID" == "-1" ]; then
		start-stop-daemon --stop --quiet --exec $COMMAND
	fi

	[ "$1" != "nopasswd" ] && [ -e $PASSWORDFILE ] && AUTH_METHOD="-rfbauth $PASSWORDFILE"
	start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile --background --exec $COMMAND -- $VNC_OPTS $AUTH_METHOD
}
function stop() {
	start-stop-daemon --stop --quiet --pidfile $PIDFILE
	rm -f $PIDFILE
}
function status() {
	PID=-1
	[ -e $PIDFILE ] && PID=$(cat $PIDFILE) 
	ps -p $PID > /dev/null  2>&1
	if [ $? == 0 ] ; then 
		echo "Running"
	else
		echo "Not running"
	fi
}

function checkpasswd() {
	if [ ! -z "$2" ] ; then
	  PWD_REF_FILE=$2
	else
	  PWD_REF_FILE=$PASSWORDFILE
	fi
	
	TMP_FILE=$(mktemp)
	$COMMAND -storepasswd "$1" $TMP_FILE >/dev/null 2>&1
	diff $TMP_FILE $PWD_REF_FILE >/dev/null 2>&1
	RET=$?
	rm -f $TMP_FILE >/dev/null 2>&1
	[ "$RET" == 0 ] && echo "OK" || echo "KO"
}

#
# Close all file descriptors except std because script is run from Isu and keep
# fd from isu opened
#
for fd in $(ls /proc/$$/fd/); do
    [ $fd -gt 2 ] && eval "exec $fd<&-"
done

case "$1" in
  start)
	echo -n "Starting VNC server: $COMMAND        "
	start $2
        echo "done."
	;;
  stop)
        echo -n "Stopping VNC server                  "
        stop
        echo "done."
	;;

  restart)
	echo -n "Restarting VNC server: $COMMAND      "
	stop
	start $2
	echo "done."
	;;

  status)
	status
	;;  

  connections)
	#show the IP address (and port) of the clients connected to a vnc server
	netstat -Wnp | grep "$COMMAND" | grep "ESTABLISHED" | awk '{printf $5 "\n"}'
	;;
	
  setpasswd)
	if [ ! -z "$3" ] ; then 
	  PWD_FILE=$3
	else
	  PWD_FILE=$PASSWORDFILE
	fi
	$COMMAND -storepasswd $2 $PWD_FILE
	;;

  checkpasswd)
	result=$(checkpasswd $2 $3)
	if [ "$result" != "OK" ]; then
	  echo "passwords do not match"
	  exit 1
	fi
	echo "OK"
	;;

  dropclient)
	$COMMAND -display :0 -remote disconnect $2
	;;
  
  *)
	echo "Usage: /etc/init.d/ssh {start|stop|restart|status|connections|setpasswd [passwd]|checkpasswd|dropclient [IP]}"
	exit 1
esac

exit 0
