Update for release 0.3.3-1.
[debian/uanytun.git] / etc / init.d / uanytun
1 #! /bin/sh
2 ### BEGIN INIT INFO
3 # Provides:          uanytun
4 # Required-Start:    $remote_fs $network $named $syslog
5 # Required-Stop:     $remote_fs
6 # Default-Start:     2 3 4 5
7 # Default-Stop:      0 1 6
8 # Short-Description: Start anycast tunneling daemon at boot time
9 # Description:       Enables networking over vpn tunnel interfaces
10 ### END INIT INFO
11 PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
12 DAEMON=/usr/sbin/uanytun
13 CONFIG_DIR=/etc/uanytun
14 NAME=uanytun
15 DESC=uanytun
16 VARRUN_DIR=/var/run/$NAME
17
18 test -x $DAEMON || exit 0
19
20 # Include uanytun defaults if available
21 if [ -f /etc/default/uanytun ] ; then
22   . /etc/default/uanytun
23 fi
24
25 start_vpn () {
26   STATUS="OK"
27   if [ -f $CONFIG_DIR/$VPNNAME/config ] ; then
28     POSTUP=''
29     test -f  $CONFIG_DIR/$VPNNAME/post-up.sh && POSTUP="-x $CONFIG_DIR/$VPNNAME/post-up.sh"
30     CHROOTDIR=`grep '^chroot' < $CONFIG_DIR/$VPNNAME/config | sed 's/chroot\s*//'`
31     if [ -n "$CHROOTDIR" ] ; then
32       test -d $CHROOTDIR || mkdir -p $CHROOTDIR
33     fi
34     test -d $VARRUN_DIR || mkdir -p $VARRUN_DIR
35     DAEMONARG=`sed 's/#.*//' < $CONFIG_DIR/$VPNNAME/config | grep -e '\w' | sed  's/^/--/' | tr '\n' ' '`
36     $DAEMON --write-pid $VARRUN_DIR/$VPNNAME.pid $POSTUP $DAEMONOPTS $DAEMONARG || STATUS="FAILED"
37   else
38     STATUS="no config found"
39   fi
40   echo -n "($STATUS)"
41 }
42 stop_vpn () {
43   kill `cat $PIDFILE` || true
44   rm $PIDFILE
45 }
46
47 set -e
48 case "$1" in
49   start)
50   echo -n "Starting $DESC:"
51   if test -z "$2" ; then
52     if [ -f $CONFIG_DIR/autostart ] ; then
53       for VPNNAME in `sed 's/#.*//'  <  $CONFIG_DIR/autostart | grep -e '\w'`; do
54         echo -n " $VPNNAME"
55         start_vpn
56       done
57     else
58       echo " no config found"
59       exit 1;
60     fi
61   else
62     while shift ; do
63       [ -z "$1" ] && break
64       VPNNAME=$1
65       echo -n " $VPNNAME"
66       start_vpn
67     done
68   fi
69   echo "."
70   ;;
71   stop)
72   echo -n "Stoping $DESC:"
73   if test -z "$2" ; then
74     for PIDFILE in `ls $VARRUN_DIR/*.pid 2> /dev/null`; do
75       VPNNAME=`basename $PIDFILE .pid`
76       echo -n " $VPNNAME"
77       stop_vpn
78     done
79   else
80     while shift ; do
81       [ -z "$1" ] && break
82       if test -e $VARRUN_DIR/$1.pid ; then
83         PIDFILE=`ls $VARRUN_DIR/$1.pid 2> /dev/null`
84         VPNNAME=`basename $PIDFILE .pid`
85         echo -n " $VPNNAME"
86         stop_vpn
87       else
88         echo -n " (failure: No such tunnel is running: $1)"
89       fi
90     done
91   fi
92   echo "."
93   ;;
94   reload)
95   echo -n "Reloading $DESC:"
96   if test -z "$2" ; then
97     for PIDFILE in `ls $VARRUN_DIR/*.pid 2> /dev/null`; do
98       VPNNAME=`basename $PIDFILE .pid`
99       echo -n " $VPNNAME"
100       stop_vpn
101       start_vpn
102     done
103   else
104     while shift ; do
105       [ -z "$1" ] && break
106       if test -e $VARRUN_DIR/$1.pid ; then
107         PIDFILE=`ls $VARRUN_DIR/$1.pid 2> /dev/null`
108         VPNNAME=`basename $PIDFILE .pid`
109         echo -n " $VPNNAME"
110         stop_vpn
111         start_vpn
112       else
113         echo -n " (failure: No such tunnel is running: $1)"
114       fi
115     done
116   fi
117   echo "."
118   ;;
119   restart|force-reload)
120     SCRIPT=$0
121     shift
122     $SCRIPT stop $*
123     sleep 1
124     $SCRIPT start $*
125   ;;
126   *)
127   N=/etc/init.d/$NAME
128   echo "Usage: $N {start|stop|restart|reload}" >&2
129   exit 1
130   ;;
131 esac
132
133 exit 0