#!/bin/sh
# xrdp control script
# Written : 1-13-2006 - Mark Balliet - posicat@pobox.com
# maintaned by Jay Sorg
# chkconfig: 2345 11 89
# description: starts xrdp

XRDP=xrdp
SESMAN=sesman
STARTWM=/etc/X11/xdm/Xsession
XRDP_DIR=/usr/lib/xrdp
#XRDP_DIR=.
LOG=/dev/null

cd $XRDP_DIR

# BUG: sesman generate core file when stopped
ulimit -Sc 0

test -x $XRDP_DIR/$XRDP ||  echo "$XRDP is not executable"
test -x $XRDP_DIR/$SESMAN || echo "$SESMAN is not executable"

if ! test -x $STARTWM; then
	echo "$STARTWM is not executable"
  	exit 0
fi

xrdp_start()
{
  echo -n "Starting: xrdp and sesman ..."
  $XRDP_DIR/$XRDP >> $LOG
  $XRDP_DIR/$SESMAN >> $LOG
  echo "."
  sleep 1
  return 0;
}

xrdp_debugstart()
{
  echo -n "Debug starting: xrdp and sesman ..."
  $XRDP_DIR/$SESMAN >> $LOG
  $XRDP_DIR/$XRDP -nodaemon
  return 0;
}

xrdp_stop()
{
  echo -n "Stopping: xrdp and sesman . . "
  $XRDP_DIR/$XRDP --kill >> $LOG
  $XRDP_DIR/$SESMAN --kill >> $LOG
  echo "."
  sleep 1
 
  # BUG: sesman don`t stopped!!!!  
  # is_sesman_running && killall -9 $XRDP_DIR/$SESMAN
  is_xrdp_running && killall -9 $XRDP_DIR/$XRDP
  # sometime Special Linux fails with full path
  is_sesman_running && killall -9 $SESMAN
  killall -9 $XRDP_DIR/sessvc
  killall -9 Xvnc
  return 0;
}

is_xrdp_running()
{
  ps ax --noheading | grep -v 'grep' | grep -q -i $XRDP_DIR/$XRDP && return 0 || return 1
}

is_sesman_running()
{
  ps ax --noheading | grep -v 'grep' | grep -q -i $XRDP_DIR/$SESMAN && return 0 || return 1
}

check_up()
{
  # Cleanup : If sesman isn't running, but the pid exists, erase it.
  is_sesman_running || rm -f /var/run/sesman.pid 2>/dev/null

  # Cleanup : If xrdp isn't running, but the pid exists, erase it.
  is_xrdp_running || rm -f /var/run/xrdp.pid 2>/dev/null

  return 0;
}

case "$1" in
  start)
    check_up
    is_xrdp_running && echo "xrdp is already loaded"
    is_sesman_running && echo "sesman is already loaded"

    xrdp_start
    ;;
  debug)
    check_up
    is_xrdp_running && echo "xrdp is already loaded"
    is_sesman_running && echo "sesman is already loaded"
    xrdp_debugstart
    ;;
  stop|condstop)
    check_up
    is_xrdp_running || echo "xrdp is not loaded."
    is_sesman_running || echo "sesman is not loaded."
    xrdp_stop
    ;;
  condrestart|restart|condreload)
    check_up
    echo "Restarting xrdp ..."
    xrdp_stop
    is_xrdp_running
    while [ true ];
    do
      check_up
      sleep 1
	 is_xrdp_running || break
    done
    xrdp_start
    ;;
	
  status)
  	 is_sesman_running && echo "SESMAN running" || echo "SESMAN NOT running"
	 is_xrdp_running && echo "XRDP running" || echo "XRDP NOT running"
	;;
  *)
    echo "Usage: service xrdp {start|stop|restart|condrestart|condstop}"
    exit 1
esac

exit 0
