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 8test $DEBIAN_SCRIPT_DEBUG && set -v -x 9 10CONFIG_DIR=/etc/openvpn 11test -d $CONFIG_DIR || exit 0 12 13start_vpn () { 14 printf " $NAME " 15 start-stop-daemon -S -p /var/run/openvpn.$NAME.pid -x /usr/sbin/openvpn -- \ 16 --daemon --writepid /var/run/openvpn.$NAME.pid \ 17 --config $CONFIG_DIR/$NAME.conf --cd $CONFIG_DIR 18 [ $? = 0 ] && echo "OK" || echo "FAIL" 19} 20stop_vpn () { 21 printf " $NAME " 22 start-stop-daemon -K -p /var/run/openvpn.$NAME.pid -x /usr/sbin/openvpn 23} 24 25case "$1" in 26start) 27 printf "Starting openvpn:" 28 29 if test -z $2 ; then 30 for CONFIG in `cd $CONFIG_DIR; ls *.conf 2> /dev/null`; do 31 NAME=${CONFIG%%.conf} 32 start_vpn 33 done 34 else 35 if test -e $CONFIG_DIR/$2.conf ; then 36 NAME=$2 37 start_vpn 38 else 39 printf " No such VPN: $2" 40 fi 41 fi 42 echo "." 43 44 ;; 45stop) 46 printf "Stopping openvpn:" 47 48 if test -z $2 ; then 49 for PIDFILE in `ls /var/run/openvpn.*.pid 2> /dev/null`; do 50 NAME=`echo $PIDFILE | cut -c18-` 51 NAME=${NAME%%.pid} 52 stop_vpn 53 done 54 else 55 if test -e /var/run/openvpn.$2.pid ; then 56 PIDFILE=`ls /var/run/openvpn.$2.pid 2> /dev/null` 57 NAME=`echo $PIDFILE | cut -c18-` 58 NAME=${NAME%%.pid} 59 stop_vpn 60 else 61 printf " No such VPN: $2" 62 fi 63 fi 64 echo "." 65 ;; 66# We only 'reload' for running VPNs. New ones will only start with 'start' or 'restart'. 67reload|force-reload) 68 printf "Reloading openvpn:" 69 for PIDFILE in `ls /var/run/openvpn.*.pid 2> /dev/null`; do 70 NAME=`echo $PIDFILE | cut -c18-` 71 NAME=${NAME%%.pid} 72# If openvpn if running under a different user than root we'll need to restart 73 if egrep '^( |\t)*user' $CONFIG_DIR/$NAME.conf > /dev/null 2>&1 ; then 74 stop_vpn 75 sleep 1 76 start_vpn 77 printf "(restarted)" 78 else 79 kill -HUP `cat $PIDFILE` || true 80 printf " $NAME" 81 fi 82 done 83 echo "." 84 ;; 85 86restart) 87 $0 stop $2 88 sleep 1 89 $0 start $2 90 ;; 91*) 92 echo "Usage: $0 {start|stop|reload|restart|force-reload}" >&2 93 exit 1 94 ;; 95esac 96 97exit 0 98 99# vim:set ai et sts=2 sw=2 tw=0: 100