xref: /OK3568_Linux_fs/yocto/meta-openembedded/meta-networking/recipes-support/openvpn/openvpn/openvpn (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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