#!/bin/sh
###BEGIN INIT INFO
# Provides: XRDP Daemon
# Required-Start: $network
# Required-Stop: $network
# Default-Start: 3 5
# chkconfig: 35 25 90
# Description: Custom RDP Daemon
### END INIT INFO

# /etc/init.d/xrdpd
# is init script for XRDP. starts xrdp and sesman.

# Alexander Swen, [hidden email]

# CHANGELOG:
# 2013-03-29 A.Wyatt Removed SuSe configuration
# 2010-05-17 A.Swen created (based on initial script xrdp_control.sh by Mark Balliet and Jay Sorg)
# 2010-05-25 A.Swen added "status" function.

# SETTINGS
date=$(date +%Y%m%d)
me=$(basename $0)
mydir=$(dirname $0)

XRDP=xrdp
SESMAN=sesman
STARTWM=startwm.sh
XRDP_DIR=/usr/lib$([ "$(uname -i)" = "x86_64" ]&& echo 64)/xrdp/
LOG=/var/log/xrdp.log

# FUNCTIONS
die () {
  rc=$1
  shift
  echo "==== ERROR ====" >&2
  echo $@ >&2
  exit $rc
}

usage () {
  echo "Usage: ${me} {start|stop|status|restart|reload|force-reload}"
  exit 1
}

# source default functions
. /etc/rc.d/init.d/functions

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

xrdp_stop() {
  echo -n "Stopping: xrdp and sesman . . "
  ./$SESMAN --kill >> $LOG
  ./$XRDP --kill >> $LOG
  echo "."
  return 0;
}

is_xrdp_running() {
  ps u --noheading -C $XRDP | grep -q -i $XRDP
  [ $? -eq 0 ] && xrdp_running=1 || xrdp_running=0
  export xrdp_running
}

is_sesman_running() {
  ps u --noheading -C $SESMAN | grep -q -i $SESMAN
  [ $? -eq 0 ] && sesman_running=1 || sesman_running=0
  export sesman_running
}

check_up() {
  is_sesman_running
  is_xrdp_running
  # Cleanup : If sesman isn't running, but the pid exists, erase it.
  [ ${sesman_running} -eq 0 -a -e /var/run/sesman.pid ] && rm /var/run/sesman.pid
  # Cleanup : If xrdp isn't running, but the pid exists, erase it.
  [ ${xrdp_running} -eq 0 -a -e /var/run/xrdp.pid ] && rm /var/run/xrdp.pid
  return 0;
}

# SCRIPT
[ ${UID} -gt 0 ] && die 0 only root may do that
[ -d "${XRDP_DIR}" ] || die 1 XRDP_DIR ${XRDP_DIR} not found

check_up

cd ${XRDP_DIR}
[ -x ${XRDP} ] || die 2 XRDP not found or not executable
[ -x ${SESMAN} ] || die 2 SESMAN not found or not executable
[ -x ${STARTWM} ] || die 2 STARTWM not found or not executable
case "$1" in
  status)
    [ ${xrdp_running} -eq 1 ] && echo "xrdp is loaded"
    [ ${sesman_running} -eq 1 ] && echo "sesman is loaded"
    exit 0
    ;;
  start)
    [ ${xrdp_running} -eq 1 ] && die 3 "xrdp is already loaded"
    [ ${sesman_running} -eq 1 ] && die 3 "sesman is already loaded"
    xrdp_start
    ;;
  stop)
    [ ${xrdp_running} -eq 0 ] && die 3 "xrdp is not loaded"
    [ ${sesman_running} -eq 0 ] && die 3 "sesman is not loaded"
    xrdp_stop
    ;;
  force-reload|reload|restart)
    echo "Restarting xrdp ..."
    xrdp_stop
    patience=20
    until [ ${xrdp_running} -eq 0 -a ${sesman_running} -eq 0 ];do
      [ ${patience} -eq 0 ] && die 5 "lost my patience while waiting for xrdp to stop" || patience=$((patience-1))
      check_up
      sleep 1
      check_up
    done
    xrdp_start
    ;;
  *) usage ;;
esac

exit 0
