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