#!/bin/sh
#
# ibvpn         This shell script takes care of starting and stopping
#               ibvpn on RedHat or other chkconfig-based system.
#
# chkconfig: - 24 76
#
# processname:  ibvpn
# description:  ibVPN is a service that allows you to surf the Web invisibly \
#               and securely without leaving a trace and without being tracked.

### BEGIN INIT INFO
# Provides: ibvpn
# Required-Start: $network
# Required-Stop: $network
# Short-Description: start and stop ibvpn
# Description: ibVPN is a service that allows you to surf the Web invisibly \
#              and securely without leaving a trace and without being tracked.
### END INIT INFO

# OpenVPN configlet directory
ibvpn_confd="/etc/clearos/ibvpn.d"

# Location of ibvpn symlink to openvpn
ibvpn="/usr/sbin/ibvpn"

# Lockfile
lock="/var/lock/subsys/ibvpn"

# PID directory
piddir="/var/run/ibvpn"

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Source configuration file
. /etc/clearos/ibvpn.conf

function ibvpn_start
{
    echo -n $"Starting ibvpn: "

    /sbin/modprobe tun >/dev/null 2>&1

    # Ensure we've been configured
    if [ -z "$ibvpn_conf" ]; then
        failure; echo
        exit 1
    fi

    # Create PID dir if it doesn't exist
    if [ ! -d  $piddir ]; then
        mkdir $piddir
    fi

    # Check if PID file exists
    if [ -f "$piddir/ibvpn.pid" ]; then
        ibvpn_pid=$(cat "$piddir/ibvpn.pid")
        # Check if service is already running
        if [ ! -z "$ibvpn_pid" -a -e "/proc/$ibvpn_pid" ]; then
            failure; echo
            exit 1
        fi
        # Remove stale PID file lock file
        rm -f "$piddir/ibvpn.pid" "$lock"
    fi

    # Start service
    ln -sf /usr/sbin/openvpn "$ibvpn"
    $ibvpn --daemon ibvpn --config "$ibvpn_confd/$ibvpn_conf.ovpn" --cd "$ibvpn_confd"

    if [ $? = 0 ]; then
        success; echo
        touch $lock
    else
        failure; echo
    fi
}

function ibvpn_stop
{
    echo -n $"Shutting down ibvpn: "
    if [ -f "$piddir/ibvpn.pid" ]; then
        ibvpn_pid=$(cat "$piddir/ibvpn.pid")
        # Check if service is running
        if [ ! -z "$ibvpn_pid" -a -e "/proc/$ibvpn_pid" ]; then
            kill $ibvpn_pid
            while [ -d "/proc/$ibvpn_pid" ]; do
                sleep 1
            done
            success; echo
        else
            failure; echo
        fi
    else
        failure; echo
    fi

    while true; do ip rule del pref 20 >/dev/null 2>&1 || break; done
    ip route flush table 20 >/dev/null 2>&1

    # Remove PID and lock files
    rm -f "$piddir/ibvpn.pid" "$lock"
}

# See how we were called.
case "$1" in
    start)
        ibvpn_start
        ;;
    stop)
        ibvpn_stop
        ;;
    restart)
        ibvpn_stop
        ibvpn_start
        ;;
    reload)
        echo -n $"Reloading ibvpn: "
        if [ -f "$piddir/ibvpn.pid" ]; then
            ibvpn_pid=$(cat "$piddir/ibvpn.pid")
            # Check if service is running
            if [ ! -z "$ibvpn_pid" -a -e "/proc/$ibvpn_pid" ]; then
                kill -HUP $ibvpn_pid
                success; echo
            else
                failure; echo
            fi
        else
            failure; echo
        fi
        ;;
    condrestart)
        if [ -f "$lock" ]; then
            restart
        fi
        ;;
    *)
        echo "Usage: ibvpn {start|stop|restart|condrestart|reload}"
        exit 1
        ;;
esac
exit 0

# vi: expandtab shiftwidth=4 softtabstop=4 tabstop=4 syntax=sh
