#!/bin/sh
#=================================================================
# Begin openvpn
#
# Description : Start openvpn daemon
# chkconfig: 2345 70 10
#
#=================================================================

### BEGIN INIT INFO
# Provides:            $openvpn
# Required-Start:      $network $iptables $pppoe
# Should-Start:
# Required-Stop:       sendsignals
# Should-Stop:
# Default-Start:       3 4 5
# Default-Stop:        0 1 2 6
# Short-Description:   Starts openvpn daemon.
# Description:         Starts openvpn daemon.
### END INIT INFO

. /lib/lsb/init-functions

#application name
PROG=openvpn

# PID directory
PIDIR="/run/${PROG}"

#configuration directory
cnfdir="/etc/${PROG}"

#-------------------------------------------------------------
#procedure stop start ONE VPN definition
#$1  start|stop
#$2  the vpn definition file name
#-------------------------------------------------------------
oneact ()

{
case "$1" in
  "start"	)
    mkdir -p ${PIDIR}
    log_info_msg "Starting $PROG, $2"
    ${PROG}						\
	--daemon					\
	--script-security 2				\
	--writepid ${PIDIR}/$2.pid			\
	--cd ${cnfdir}					\
	--config $2.conf
    evaluate_retval
    ;;
  "stop"	)
    if [ -f ${PIDIR}/$2.pid ] ; then
      log_info_msg "Stopping $PROG, $2"
      kill `cat ${PIDIR}/$2.pid` > /dev/null 2>&1
      evaluate_retval
      rm -f  ${PIDIR}/$2.pid
      fi
    ;;
  esac
}

#-------------------------------------------------------------
#procedure stop start each VPN definition
#$1  start|stop
#$2  the vpn definition list
#-------------------------------------------------------------
allact ()

{
COUNT=0
ACTION=$1
shift;
if [ $# -gt 0 ] ; then
  for vpn in $*
    do
    oneact $ACTION ${vpn}
    COUNT=`echo "(${COUNT}+1)" | bc`
    done
  fi
if [ ${COUNT} -eq 0 ] ; then
  for def in `/bin/ls /etc/openvpn/*.conf 2>/dev/null`
    do
    vpn=`basename ${def%%.conf}`
    oneact $ACTION ${vpn}
    COUNT=`echo "(${COUNT}+1)" | bc`
    done
  fi
if [ ${COUNT} -eq 0 ] ; then
  log_info_msg "$PROG, found NO VPN definition to ${ACTION}"
  true
  evaluate_retval
  fi
}

case "$1" in
   start	)
	/sbin/modprobe tun >/dev/null 2>&1
	allact $*
        ;;
    stop	)
	allact $*
        ;;
    reload)
        log_info_msg "Reloading $PROG Server..."
	true
        evaluate_retval
        ;;

    restart)
	shift
        $0 stop $*
        sleep 1
        $0 start $*
        ;;

    condrestart)
        ;;

    status)
        ;;

    *)
        echo "Usage: $0 {start|stop|reload|restart|status}"
        exit 1
        ;;
esac

