Imported Upstream version 0.3
[anytun.git] / etc / init.d / anytun
1 #! /bin/sh
2 ### BEGIN INIT INFO
3 # Provides:          anytun
4 # Required-Start:    $network $named $syslog
5 # Required-Stop:     
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/anytun
13 ANYTUNCONFIG=/usr/bin/anytun-config
14 CONTROLDAEMON=/usr/bin/anytun-controld
15 NAME=anytun
16 DESC=anytun
17 CONFIG_DIR=/etc/anytun
18 VARCONFIG_DIR=/var/run/anytun-controld
19
20 test -x $DAEMON || exit 0
21
22 # Include anytun defaults if available
23 if [ -f /etc/default/anytun ] ; then
24   . /etc/default/anytun
25 fi
26
27 start_vpn () {
28   STATUS="OK"
29   if [ -f $CONFIG_DIR/$NAME/config ] ; then
30     POSTUP=''
31     test -f  $CONFIG_DIR/$NAME/post-up.sh && POSTUP="-x $CONFIG_DIR/$NAME/post-up.sh"
32     CHROOTDIR=`grep '^chroot' < $CONFIG_DIR/$NAME/config | sed 's/chroot\s*//'`
33     if [ -n "$CHROOTDIR" ] ; then
34       test -d $CHROOTDIR || mkdir -p $CHROOTDIR
35     fi
36     DAEMONARG=`sed 's/#.*//' < $CONFIG_DIR/$NAME/config | grep -e '\w' | sed  's/^/--/' | tr '\n' ' '`
37     $DAEMON --write-pid /var/run/anytun.$NAME.pid $POSTUP \
38       $DAEMONOPTS $DAEMONARG || STATUS="FAILED"
39   else
40     STATUS="no config found"
41   fi
42   start_configd
43   echo -n "($STATUS)"
44 }
45 stop_vpn () {
46   kill `cat $PIDFILE` || true
47   rm $PIDFILE
48   stop_configd
49 }
50
51 start_configd () {
52   if [ -d $CONFIG_DIR/$NAME/conf.d ] ; then
53     test -d $VARCONFIG_DIR || mkdir -p $VARCONFIG_DIR
54     chmod 700 $VARCONFIG_DIR
55     rm -f $VARCONFIG_DIR/$NAME 2>/dev/null
56     for CLIENTNAME in `ls $CONFIG_DIR/$NAME/conf.d`; do
57       echo -n " ($CLIENTNAME)"
58       DAEMONARG=`sed 's/#.*//'  <  $CONFIG_DIR/$NAME/conf.d/$CLIENTNAME | grep -e '\w' | sed  's/^/ --/' | xargs echo`
59       $ANYTUNCONFIG $DAEMONARG >> $VARCONFIG_DIR/$NAME
60     done
61     CONTROLHOST=`sed 's/#.*//'  <  $CONFIG_DIR/$NAME/config | grep -e 'control-host' | sed  's/^/ --/'`
62     $CONTROLDAEMON -f $VARCONFIG_DIR/$NAME $DAEMONOPTS $CONTROLHOST \
63       --write-pid $VARCONFIG_DIR/$NAME.pid
64     # rm -f $VARCONFIG_DIR/$NAME
65   fi
66 }
67 stop_configd () {
68   if [ -d $CONFIG_DIR/$NAME/conf.d ] ; then
69     echo -n " ($NAME)"
70     kill `cat $VARCONFIG_DIR/$NAME.pid` || true
71     rm $VARCONFIG_DIR/$NAME.pid
72   fi 
73 }
74
75 set -e
76 case "$1" in
77   start)
78   echo -n "Starting $DESC:"
79   if test -z "$2" ; then
80     if [ -f $CONFIG_DIR/autostart ] ; then
81       for NAME in `sed 's/#.*//'  <  $CONFIG_DIR/autostart | grep -e '\w'`; do
82         echo -n " $NAME"
83         start_vpn
84       done
85     else
86       echo "no config found"
87       exit 1;
88     fi
89   else
90     while shift ; do
91       [ -z "$1" ] && break
92       NAME=$1
93       echo -n " $NAME"
94       start_vpn
95     done
96   fi
97   echo "."
98   ;;
99   stop)
100   echo -n "Stoping $DESC:"
101   if test -z "$2" ; then
102     for PIDFILE in `ls /var/run/anytun.*.pid 2> /dev/null`; do
103       NAME=`echo $PIDFILE | cut -c17-`
104       NAME=${NAME%%.pid}
105       echo -n " $NAME"
106       stop_vpn
107     done
108   else
109     while shift ; do
110       [ -z "$1" ] && break
111       if test -e /var/run/anytun.$1.pid ; then
112         PIDFILE=`ls /var/run/anytun.$1.pid 2> /dev/null`
113         NAME=`echo $PIDFILE | cut -c17-`
114         NAME=${NAME%%.pid}
115         echo -n " $NAME"
116         stop_vpn
117       else
118         echo -n " (failure: No such tunnel is running: $1)"
119       fi
120     done
121   fi
122   echo "."
123   ;;
124   reload)
125   echo -n "Reloading $DESC:"
126   if test -z "$2" ; then
127     for PIDFILE in `ls /var/run/anytun.*.pid 2> /dev/null`; do
128       NAME=`echo $PIDFILE | cut -c17-`
129       NAME=${NAME%%.pid}
130       echo -n " $NAME"
131       if [ -d $CONFIG_DIR/$NAME/conf.d ] ; then
132         stop_vpn
133         start_vpn
134       else
135         stop_configd
136         start_configd
137       fi
138     done
139   else
140     while shift ; do
141       [ -z "$1" ] && break
142       if test -e /var/run/anytun.$1.pid ; then
143         PIDFILE=`ls /var/run/anytun.$1.pid 2> /dev/null`
144         NAME=`echo $PIDFILE | cut -c17-`
145         NAME=${NAME%%.pid}
146         echo -n " $NAME"
147         if [ -d $CONFIG_DIR/$NAME/conf.d ] ; then
148           stop_vpn
149           start_vpn
150         else
151           stop_configd
152           start_configd
153         fi
154       else
155         echo -n " (failure: No such tunnel is running: $1)"
156       fi
157     done
158   fi
159   echo "."
160   ;;
161   force-reload)
162   echo -n "Restarting $DESC:"
163   if test -z "$2" ; then
164     for PIDFILE in `ls /var/run/anytun.*.pid 2> /dev/null`; do
165       NAME=`echo $PIDFILE | cut -c17-`
166       NAME=${NAME%%.pid}
167       echo -n " $NAME"
168       stop_vpn
169       sleep 1
170       start_vpn
171     done
172   else
173     while shift ; do
174       [ -z "$1" ] && break
175       if test -e /var/run/anytun.$1.pid ; then
176         PIDFILE=`ls /var/run/anytun.$1.pid 2> /dev/null`
177         NAME=`echo $PIDFILE | cut -c17-`
178         NAME=${NAME%%.pid}
179         echo -n " $NAME"
180         stop_vpn
181         sleep 1
182         start_vpn
183       else
184         echo -n " (failure: No such tunnel is running: $1)"
185       fi
186     done
187   fi
188   echo "."
189   ;;
190   restart)
191     SCRIPT=$0
192     shift
193     $SCRIPT stop $*
194     sleep 1
195     $SCRIPT start $*
196   ;;
197   *)
198   N=/etc/init.d/$NAME
199   echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
200   exit 1
201   ;;
202 esac
203
204 exit 0