New upstream version 0.3.6
[anytun.git] / etc / init.d / anytun
index 6905c67..b47378d 100755 (executable)
 # Description:       Enables networking over vpn tunnel interfaces
 ### END INIT INFO
 PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
-DAEMON=/usr/sbin/anytun
-ANYTUNCONFIG=/usr/bin/anytun-config
-CONTROLDAEMON=/usr/bin/anytun-controld
-NAME=anytun
-DESC=anytun
-CONFIG_DIR=/etc/anytun
-VARCONFIG_DIR=/var/run/anytun-controld
-VARRUN_DIR=/var/run/$NAME/
-
-test -x $DAEMON || exit 0
+DAEMON=anytun
+LAUNCHER=/usr/local/lib/$DAEMON-launcher
+DESC="secure anycast tunneling daemon"
+CONFIG_DIR=/usr/local/etc/$DAEMON
+VARCONTROL_DIR=/var/run/$DAEMON-controld
+VARRUN_DIR=/var/run/$DAEMON/
 
 # Include anytun defaults if available
 if [ -f /etc/default/anytun ] ; then
   . /etc/default/anytun
 fi
 
+. /lib/lsb/init-functions
+
 start_vpn () {
   STATUS="OK"
-  if [ -f $CONFIG_DIR/$NAME/config ] ; then
-    POSTUP=''
-    test -f  $CONFIG_DIR/$NAME/post-up.sh && POSTUP="-x $CONFIG_DIR/$NAME/post-up.sh"
-    CHROOTDIR=`grep '^chroot' < $CONFIG_DIR/$NAME/config | sed 's/chroot\s*//'`
-    if [ -n "$CHROOTDIR" ] ; then
-      test -d $CHROOTDIR || mkdir -p $CHROOTDIR
-    fi
-    test -d $VARRUN_DIR || mkdir -p $VARRUN_DIR
-    DAEMONARG=`sed 's/#.*//' < $CONFIG_DIR/$NAME/config | grep -e '\w' | sed  's/^/--/' | tr '\n' ' '`
-    $DAEMON --write-pid $VARRUN_DIR/$NAME.pid $POSTUP \
-      $DAEMONOPTS $DAEMONARG || STATUS="FAILED"
+  if [ -f $CONFIG_DIR/$1/config ] ; then
+    $LAUNCHER vpn $1 || STATUS="FAILED"
   else
-    STATUS="no config found"
+    STATUS=" no config found"
   fi
-  start_configd
+  start_configd $1
   echo -n "($STATUS)"
 }
 stop_vpn () {
   kill `cat $PIDFILE` || true
   rm $PIDFILE
-  stop_configd
+  stop_configd $1
 }
 
 start_configd () {
-  if [ -d $CONFIG_DIR/$NAME/conf.d ] ; then
-    test -d $VARCONFIG_DIR || mkdir -p $VARCONFIG_DIR
-    chmod 700 $VARCONFIG_DIR
-    rm -f $VARCONFIG_DIR/$NAME 2>/dev/null
-    KDPRF=`sed 's/#.*//'  <  $CONFIG_DIR/$NAME/config | grep -e 'kd-prf' | sed  's/^/ --/' | xargs echo`
-    for CLIENTNAME in `ls $CONFIG_DIR/$NAME/conf.d`; do
-      echo -n " ($CLIENTNAME)"
-      DAEMONARG=`sed 's/#.*//'  <  $CONFIG_DIR/$NAME/conf.d/$CLIENTNAME | grep -e '\w' | sed  's/^/ --/' | xargs echo`
-      $ANYTUNCONFIG $DAEMONARG $CIPHER $AUTHALGO $KDPRF >> $VARCONFIG_DIR/$NAME
-    done
-    CONTROLHOST=`sed 's/#.*//'  <  $CONFIG_DIR/$NAME/config | grep -e 'control-host' | sed  's/^/ --/' | xargs echo`
-    $CONTROLDAEMON -f $VARCONFIG_DIR/$NAME $DAEMONOPTS $CONTROLHOST \
-      --write-pid $VARCONFIG_DIR/$NAME.pid
-    # rm -f $VARCONFIG_DIR/$NAME
-  fi
+  $LAUNCHER configd $1
 }
 stop_configd () {
-  if [ -d $CONFIG_DIR/$NAME/conf.d ] ; then
-    echo -n " ($NAME-controlld)"
-    kill `cat $VARCONFIG_DIR/$NAME.pid` || true
-    rm $VARCONFIG_DIR/$NAME.pid
-  fi 
+  if [ -d $CONFIG_DIR/$1/conf.d ] ; then
+    echo -n " ($1-controlld)"
+    kill `cat $VARCONTROL_DIR/$1.pid` || true
+    rm $VARCONTROL_DIR/$1.pid
+  fi
 }
 
 set -e
 case "$1" in
   start)
-  echo -n "Starting $DESC:"
-  if test -z "$2" ; then
-    if [ -f $CONFIG_DIR/autostart ] ; then
-      for NAME in `sed 's/#.*//'  <  $CONFIG_DIR/autostart | grep -e '\w'`; do
-        echo -n " $NAME"
-        start_vpn
-      done
+    echo -n "Starting $DESC:"
+    if test -z "$2" ; then
+      if [ -f $CONFIG_DIR/autostart ] ; then
+        for NAME in `sed 's/#.*//'  <  $CONFIG_DIR/autostart | grep -e '\w'`; do
+          echo -n " $NAME"
+          start_vpn $NAME
+        done
+      else
+        echo "no config found"
+        exit 1;
+      fi
     else
-      echo "no config found"
-      exit 1;
+      while shift ; do
+        [ -z "$1" ] && break
+        echo -n " $1"
+        start_vpn $1
+      done
     fi
-  else
-    while shift ; do
-      [ -z "$1" ] && break
-      NAME=$1
-      echo -n " $NAME"
-      start_vpn
-    done
-  fi
-  echo "."
-  ;;
+    echo "."
+    ;;
   stop)
-  echo -n "Stoping $DESC:"
-  if test -z "$2" ; then
-    for PIDFILE in `ls $VARRUN_DIR/*.pid 2> /dev/null`; do
-      NAME=`basename $PIDFILE`
-      NAME=${NAME%%.pid}
-      echo -n " $NAME"
-      stop_vpn
-    done
-  else
-    while shift ; do
-      [ -z "$1" ] && break
-      if test -e $VARRUN_DIR/$1.pid ; then
-        PIDFILE=`ls $VARRUN_DIR/$1.pid 2> /dev/null`
+    echo -n "Stoping $DESC:"
+    if test -z "$2" ; then
+      for PIDFILE in `ls $VARRUN_DIR/*.pid 2> /dev/null`; do
         NAME=`basename $PIDFILE`
         NAME=${NAME%%.pid}
         echo -n " $NAME"
-        stop_vpn
-      else
-        echo -n " (failure: No such tunnel is running: $1)"
-      fi
-    done
-  fi
-  echo "."
-  ;;
+        stop_vpn $NAME
+      done
+    else
+      while shift ; do
+        [ -z "$1" ] && break
+        if test -e $VARRUN_DIR/$1.pid ; then
+          PIDFILE=`ls $VARRUN_DIR/$1.pid 2> /dev/null`
+          NAME=`basename $PIDFILE`
+          NAME=${NAME%%.pid}
+          echo -n " $NAME"
+          stop_vpn $NAME
+        else
+          echo -n " (failure: No such tunnel is running: $1)"
+        fi
+      done
+    fi
+    echo "."
+    ;;
   reload)
-  echo -n "Reloading $DESC:"
-  if test -z "$2" ; then
-    for PIDFILE in `ls $VARRUN_DIR/*.pid 2> /dev/null`; do
-      NAME=`basename $PIDFILE`
-      NAME=${NAME%%.pid}
-      echo -n " $NAME"
-      if [ -d $CONFIG_DIR/$NAME/conf.d ] ; then
-        stop_vpn
-        start_vpn
-      else
-        stop_configd
-        start_configd
-      fi
-    done
-  else
-    while shift ; do
-      [ -z "$1" ] && break
-      if test -e $VARRUN_DIR/$1.pid ; then
-        PIDFILE=`ls $VARRUN_DIR/$1.pid 2> /dev/null`
+    echo -n "Reloading $DESC:"
+    if test -z "$2" ; then
+      for PIDFILE in `ls $VARRUN_DIR/*.pid 2> /dev/null`; do
         NAME=`basename $PIDFILE`
         NAME=${NAME%%.pid}
         echo -n " $NAME"
         if [ -d $CONFIG_DIR/$NAME/conf.d ] ; then
-          stop_vpn
-          start_vpn
+          stop_vpn $NAME
+          start_vpn $NAME
         else
-          stop_configd
-          start_configd
+          stop_configd $NAME
+          start_configd $NAME
         fi
-      else
-        echo -n " (failure: No such tunnel is running: $1)"
-      fi
-    done
-  fi
-  echo "."
-  ;;
+      done
+    else
+      while shift ; do
+        [ -z "$1" ] && break
+        if test -e $VARRUN_DIR/$1.pid ; then
+          PIDFILE=`ls $VARRUN_DIR/$1.pid 2> /dev/null`
+          NAME=`basename $PIDFILE`
+          NAME=${NAME%%.pid}
+          echo -n " $NAME"
+          if [ -d $CONFIG_DIR/$NAME/conf.d ] ; then
+            stop_vpn $NAME
+            start_vpn $NAME
+          else
+            stop_configd $NAME
+            start_configd $NAME
+          fi
+        else
+          echo -n " (failure: No such tunnel is running: $1)"
+        fi
+      done
+    fi
+    echo "."
+    ;;
   force-reload)
-  echo -n "Restarting $DESC:"
-  if test -z "$2" ; then
-    for PIDFILE in `ls $VARRUN_DIR/*.pid 2> /dev/null`; do
-      NAME=`basename $PIDFILE`
-      NAME=${NAME%%.pid}
-      echo -n " $NAME"
-      stop_vpn
-      sleep 1
-      start_vpn
-    done
-  else
-    while shift ; do
-      [ -z "$1" ] && break
-      if test -e $VARRUN_DIR/$1.pid ; then
-        PIDFILE=`ls $VARRUN_DIR/$1.pid 2> /dev/null`
+    echo -n "Restarting $DESC:"
+    if test -z "$2" ; then
+      for PIDFILE in `ls $VARRUN_DIR/*.pid 2> /dev/null`; do
         NAME=`basename $PIDFILE`
         NAME=${NAME%%.pid}
         echo -n " $NAME"
-        stop_vpn
+        stop_vpn $NAME
         sleep 1
-        start_vpn
-      else
-        echo -n " (failure: No such tunnel is running: $1)"
-      fi
-    done
-  fi
-  echo "."
-  ;;
+        start_vpn $NAME
+      done
+    else
+      while shift ; do
+        [ -z "$1" ] && break
+        if test -e $VARRUN_DIR/$1.pid ; then
+          PIDFILE=`ls $VARRUN_DIR/$1.pid 2> /dev/null`
+          NAME=`basename $PIDFILE`
+          NAME=${NAME%%.pid}
+          echo -n " $NAME"
+          stop_vpn $NAME
+          sleep 1
+          start_vpn $NAME
+        else
+          echo -n " (failure: No such tunnel is running: $1)"
+        fi
+      done
+    fi
+    echo "."
+    ;;
   restart)
     SCRIPT=$0
     shift
     $SCRIPT stop $*
     sleep 1
     $SCRIPT start $*
-  ;;
+    ;;
   *)
-  N=/etc/init.d/$NAME
-  echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
-  exit 1
-  ;;
+    N=/etc/init.d/$DAEMON
+    echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
+    exit 1
+    ;;
 esac
 
 exit 0