Imported Upstream version 0.3.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 VARRUN_DIR=/var/run/$NAME/
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     KDPRF=`sed 's/#.*//'  <  $CONFIG_DIR/$NAME/config | grep -e 'kd-prf' | sed  's/^/ --/' | xargs echo`
59     for CLIENTNAME in `ls $CONFIG_DIR/$NAME/conf.d`; do
60       echo -n " ($CLIENTNAME)"
61       DAEMONARG=`sed 's/#.*//'  <  $CONFIG_DIR/$NAME/conf.d/$CLIENTNAME | grep -e '\w' | sed  's/^/ --/' | xargs echo`
62       $ANYTUNCONFIG $DAEMONARG $CIPHER $AUTHALGO $KDPRF >> $VARCONFIG_DIR/$NAME
63     done
64     CONTROLHOST=`sed 's/#.*//'  <  $CONFIG_DIR/$NAME/config | grep -e 'control-host' | sed  's/^/ --/' | xargs echo`
65     $CONTROLDAEMON -f $VARCONFIG_DIR/$NAME $DAEMONOPTS $CONTROLHOST \
66       --write-pid $VARCONFIG_DIR/$NAME.pid
67     # rm -f $VARCONFIG_DIR/$NAME
68   fi
69 }
70 stop_configd () {
71   if [ -d $CONFIG_DIR/$NAME/conf.d ] ; then
72     echo -n " ($NAME-controlld)"
73     kill `cat $VARCONFIG_DIR/$NAME.pid` || true
74     rm $VARCONFIG_DIR/$NAME.pid
75   fi 
76 }
77
78 set -e
79 case "$1" in
80   start)
81   echo -n "Starting $DESC:"
82   if test -z "$2" ; then
83     if [ -f $CONFIG_DIR/autostart ] ; then
84       for NAME in `sed 's/#.*//'  <  $CONFIG_DIR/autostart | grep -e '\w'`; do
85         echo -n " $NAME"
86         start_vpn
87       done
88     else
89       echo "no config found"
90       exit 1;
91     fi
92   else
93     while shift ; do
94       [ -z "$1" ] && break
95       NAME=$1
96       echo -n " $NAME"
97       start_vpn
98     done
99   fi
100   echo "."
101   ;;
102   stop)
103   echo -n "Stoping $DESC:"
104   if test -z "$2" ; then
105     for PIDFILE in `ls $VARRUN_DIR/*.pid 2> /dev/null`; do
106       NAME=`basename $PIDFILE`
107       NAME=${NAME%%.pid}
108       echo -n " $NAME"
109       stop_vpn
110     done
111   else
112     while shift ; do
113       [ -z "$1" ] && break
114       if test -e $VARRUN_DIR/$1.pid ; then
115         PIDFILE=`ls $VARRUN_DIR/$1.pid 2> /dev/null`
116         NAME=`basename $PIDFILE`
117         NAME=${NAME%%.pid}
118         echo -n " $NAME"
119         stop_vpn
120       else
121         echo -n " (failure: No such tunnel is running: $1)"
122       fi
123     done
124   fi
125   echo "."
126   ;;
127   reload)
128   echo -n "Reloading $DESC:"
129   if test -z "$2" ; then
130     for PIDFILE in `ls $VARRUN_DIR/*.pid 2> /dev/null`; do
131       NAME=`basename $PIDFILE`
132       NAME=${NAME%%.pid}
133       echo -n " $NAME"
134       if [ -d $CONFIG_DIR/$NAME/conf.d ] ; then
135         stop_vpn
136         start_vpn
137       else
138         stop_configd
139         start_configd
140       fi
141     done
142   else
143     while shift ; do
144       [ -z "$1" ] && break
145       if test -e $VARRUN_DIR/$1.pid ; then
146         PIDFILE=`ls $VARRUN_DIR/$1.pid 2> /dev/null`
147         NAME=`basename $PIDFILE`
148         NAME=${NAME%%.pid}
149         echo -n " $NAME"
150         if [ -d $CONFIG_DIR/$NAME/conf.d ] ; then
151           stop_vpn
152           start_vpn
153         else
154           stop_configd
155           start_configd
156         fi
157       else
158         echo -n " (failure: No such tunnel is running: $1)"
159       fi
160     done
161   fi
162   echo "."
163   ;;
164   force-reload)
165   echo -n "Restarting $DESC:"
166   if test -z "$2" ; then
167     for PIDFILE in `ls $VARRUN_DIR/*.pid 2> /dev/null`; do
168       NAME=`basename $PIDFILE`
169       NAME=${NAME%%.pid}
170       echo -n " $NAME"
171       stop_vpn
172       sleep 1
173       start_vpn
174     done
175   else
176     while shift ; do
177       [ -z "$1" ] && break
178       if test -e $VARRUN_DIR/$1.pid ; then
179         PIDFILE=`ls $VARRUN_DIR/$1.pid 2> /dev/null`
180         NAME=`basename $PIDFILE`
181         NAME=${NAME%%.pid}
182         echo -n " $NAME"
183         stop_vpn
184         sleep 1
185         start_vpn
186       else
187         echo -n " (failure: No such tunnel is running: $1)"
188       fi
189     done
190   fi
191   echo "."
192   ;;
193   restart)
194     SCRIPT=$0
195     shift
196     $SCRIPT stop $*
197     sleep 1
198     $SCRIPT start $*
199   ;;
200   *)
201   N=/etc/init.d/$NAME
202   echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
203   exit 1
204   ;;
205 esac
206
207 exit 0