1#!/bin/sh -e 2# 3# Original version by Robert Leslie 4# <rob@mars.org>, edited by iwj and cs 5# Modified for openvpn by Alberto Gonzalez Iniesta <agi@agi.as> 6# Modified for restarting / starting / stopping single tunnels by Richard Mueller <mueller@teamix.net> 7# Modified for respecting pid file on service start by Fabian Klemp <fabian.klemp@axino-group.com> 8 9test $DEBIAN_SCRIPT_DEBUG && set -v -x 10 11DAEMON=/usr/sbin/openvpn 12CONFIG_DIR=/etc/openvpn 13test -x $DAEMON || exit 0 14test -d $CONFIG_DIR || exit 0 15 16start_vpn () { 17 modprobe tun >/dev/null 2>&1 || true 18 start-stop-daemon --start --quiet --pidfile /var/run/openvpn.$NAME.pid \ 19 --exec $DAEMON -- \ 20 --daemon --writepid /var/run/openvpn.$NAME.pid \ 21 --config $CONFIG_DIR/$NAME.conf --cd $CONFIG_DIR || rc="$?" 22 case $rc in 23 1) echo -n " ALREADY STARTED->";; 24 3) echo -n " FAILED->";; 25 esac 26 echo -n " $NAME" 27} 28 29stop_vpn () { 30 kill `cat $PIDFILE` || true 31 rm $PIDFILE 32} 33 34case "$1" in 35start) 36 echo -n "Starting openvpn:" 37 38 if test -z $2 ; then 39 for CONFIG in `cd $CONFIG_DIR; ls *.conf 2> /dev/null`; do 40 NAME=${CONFIG%%.conf} 41 start_vpn 42 done 43 else 44 if test -e $CONFIG_DIR/$2.conf ; then 45 NAME=$2 46 start_vpn 47 else 48 echo -n " No such VPN: $2" 49 fi 50 fi 51 echo "." 52 53 ;; 54stop) 55 echo -n "Stopping openvpn:" 56 57 if test -z $2 ; then 58 for PIDFILE in `ls /var/run/openvpn.*.pid 2> /dev/null`; do 59 NAME=`echo $PIDFILE | cut -c18-` 60 NAME=${NAME%%.pid} 61 stop_vpn 62 echo -n " $NAME" 63 done 64 else 65 if test -e /var/run/openvpn.$2.pid ; then 66 PIDFILE=`ls /var/run/openvpn.$2.pid 2> /dev/null` 67 NAME=`echo $PIDFILE | cut -c18-` 68 NAME=${NAME%%.pid} 69 stop_vpn 70 echo -n " $NAME" 71 else 72 echo -n " No such VPN: $2" 73 fi 74 fi 75 echo "." 76 ;; 77# We only 'reload' for running VPNs. New ones will only start with 'start' or 'restart'. 78reload|force-reload) 79 echo -n "Reloading openvpn:" 80 for PIDFILE in `ls /var/run/openvpn.*.pid 2> /dev/null`; do 81 NAME=`echo $PIDFILE | cut -c18-` 82 NAME=${NAME%%.pid} 83# If openvpn if running under a different user than root we'll need to restart 84 if egrep '^( |\t)*user' $CONFIG_DIR/$NAME.conf > /dev/null 2>&1 ; then 85 stop_vpn 86 sleep 1 87 start_vpn 88 echo -n "(restarted)" 89 else 90 kill -HUP `cat $PIDFILE` || true 91# start-stop-daemon --stop --signal HUP --quiet --oknodo \ 92# --exec $DAEMON --pidfile $PIDFILE 93 echo -n " $NAME" 94 fi 95 done 96 echo "." 97 ;; 98 99restart) 100 $0 stop $2 101 sleep 1 102 $0 start $2 103 ;; 104*) 105 echo "Usage: $0 {start|stop|reload|restart|force-reload}" >&2 106 exit 1 107 ;; 108esac 109 110exit 0 111 112# vim:set ai et sts=2 sw=2 tw=0: 113