Handle start-stop process, fix firewall script
authorNeutron Soutmun <neo.neutron@gmail.com>
Thu, 23 Apr 2009 03:19:24 +0000 (10:19 +0700)
committerNeutron Soutmun <neo.neutron@gmail.com>
Thu, 23 Apr 2009 03:19:24 +0000 (10:19 +0700)
2009-04-23  Neutron Soutmun <neo.neutron@gmail.com>

* example/rahunas.init.in:
  - Adjust the code to handle the start and stop process.
  - Waiting for the process really stop.
* tools/firewall.sh.in: Prevent the script to start the same rules again for
  each virtual server.

ChangeLog
example/rahunas.init.in
tools/firewall.sh.in

index f0e37f1..2e10255 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2009-04-23  Neutron Soutmun <neo.neutron@gmail.com>
+
+       * example/rahunas.init.in: 
+         - Adjust the code to handle the start and stop process.
+         - Waiting for the process really stop.
+       * tools/firewall.sh.in: Prevent the script to start the same rules again for 
+         each virtual server.
+
 2009-04-21  Neutron Soutmun <neo.neutron@gmail.com>
 
        * src/rh-xmlrpc-server.c: Prevent the client to double login by mistake. 
index 396bfc1..0b48aa6 100755 (executable)
@@ -21,7 +21,7 @@ INIT=@sysconfdir@/default/rahunas
 FIREWALL=@sysconfdir@/rahunas/firewall.sh
 WEBLOGIN_CONFIG=@sysconfdir@/rahunas/weblogin-config-update.sh
 NAME=rahunasd
-DESC="RahuNAS: Rahu Network Access Server"
+DESC="RahuNAS - Rahu Network Access Server"
 
 
 # This value is overriden in /etc/default/rahunas if it exists
@@ -35,47 +35,93 @@ set -e
 test -f $INIT || exit 0 
 . $INIT 
 
-case "$1" in
-  start)
-       echo -n "Starting $DESC: "
+. /lib/lsb/init-functions
+
+PID=@localstatedir@/run/$NAME.pid
 
+start () {
   $FIREWALL start
   $WEBLOGIN_CONFIG
 
-       if [ "$RUN_DAEMON" = "yes" ]; then
-               start-stop-daemon --start --quiet --pidfile @localstatedir@/run/$NAME.pid \
-               --exec $DAEMON
-               echo done
-       else
-               echo disabled 
-       fi
-       ;;
+  start-stop-daemon --start --quiet \
+    --pidfile $PID --exec $DAEMON < /dev/null
+  return $?
+}
+
+stop () {
+  start-stop-daemon --stop --quiet \
+    --pidfile $PID --name $NAME < /dev/null
+
+  # Wait until the rahunasd has really stopped.
+  sleep 2
+  if test -n "$PID" && kill -0 $PID 2>/dev/null
+  then
+    log_action_begin_msg " ... Waiting"
+    cnt=0
+    while kill -0 $PID 2>/dev/null
+    do
+      cnt=`expr $cnt + 1`
+      if [ $cnt -gt 24 ]
+      then
+        log_action_end_msg 1
+        return 1
+      fi
+      sleep 5
+      log_action_cont_msg ""
+    done
+
+    log_action_end_msg 0
+  fi
+
+  $FIREWALL stop
+  return 0
+}
+
+case "$1" in
+  start)
+    log_daemon_msg "Starting $DESC" "$NAME"
+  
+    if [ "$RUN_DAEMON" = "yes" ]; then
+      if start ; then
+        log_end_msg $?
+      else
+        log_end_msg $?
+      fi
+    else
+      log_end_msg "disabled, to enable see $INIT"
+    fi
+    ;;
   stop)
-       echo -n "Stopping $DESC: "
-
-       start-stop-daemon --stop --oknodo --quiet --pidfile @localstatedir@/run/$NAME.pid \
-               --exec $DAEMON
-       echo done 
-       $FIREWALL stop
-       ;;
-  restart|force-reload)
-       echo -n "Restarting $DESC: "
-
-       start-stop-daemon --stop --oknodo --quiet --pidfile \
-               @localstatedir@/run/$NAME.pid --exec $DAEMON
-       sleep 1
-
-       $FIREWALL restart
-
-       start-stop-daemon --start --quiet --pidfile \
-               @localstatedir@/run/$NAME.pid --exec $DAEMON
-       echo "$NAME."
-       ;;
+    log_daemon_msg "Stopping $DESC" "$NAME"
+  
+    if stop ; then
+      log_end_msg $?
+    else
+      log_end_msg $?
+    fi
+    ;;
+  restart)
+    log_daemon_msg "Restarting $DESC" "$NAME"
+    stop
+
+    if [ "$RUN_DAEMON" = "yes" ]; then
+      if start ; then
+        log_end_msg $?
+      else
+        log_end_msg $?
+      fi
+    else
+      log_end_msg "disabled, to enable see $INIT"
+    fi
+    ;;
+  status)
+    status_of_proc -p "$PID" "$DAEMON" "$NAME" && exit 0 || exit $?
+    ;;
   *)
-       N=@sysconfdir@/init.d/$NAME
-       echo "Usage: $N {start|stop|restart|force-reload}" >&2
-       exit 1
-       ;;
+    N=@sysconfdir@/init.d/$NAME
+    echo "Usage: $N {start|stop|restart|status}" >&2
+    exit 1
+    ;;
 esac
 
 exit 0
index 0baded9..880bdf2 100755 (executable)
@@ -13,6 +13,7 @@ IPSET=/usr/sbin/ipset
 NAME="rahunas"
 INIT=@sysconfdir@/default/rahunas
 RUN=@localstatedir@/run/rahunas-firewall
+RUNDIR=@localstatedir@/run/rahunas-set
 VSERVER_LIST=@localstatedir@/run/rahunas-vserver
 
 RUN_DAEMON=no
@@ -20,9 +21,9 @@ RUN_DAEMON=no
 test -f $INIT || exit 0 
 . $INIT
 
-test "$RUN_DAEMON" = "yes" || exit 0
 test -f $RAHUNAS_CONFIG || exit 1
 test -f $VSERVER_LIST || touch $VSERVER_LIST
+test -d $RUNDIR || mkdir -p $RUNDIR
 
 get_section_name () {
   file=$1
@@ -623,6 +624,7 @@ do_get_config () {
 }
 
 start () {
+  test "$RUN_DAEMON" = "yes" || return 0
   test ! -f $RUN || return 0
 
   if [ ! -d $MAIN_CONF_DIR ]; then
@@ -650,44 +652,54 @@ restart() {
 }
 
 start_config() {
+  test ! -f $RUNDIR/$SETNAME || return 0
   add_set
   new_chains
   rules
+  touch $RUNDIR/$SETNAME
+  return 0
 }
 
 start_config_env() {
   do_get_config "" start
   start_config
+  return $?
 }
 
 start_config_file() {
   file=$1
   do_get_config $file start
   if [ $? -gt 0 ]; then
-    return
+    return 1
   fi 
   
   start_config
+  return $?
 }
 
 stop_config() {
+  test -f $RUNDIR/$SETNAME || return 0
   cleanup
   cleanup_set
+  rm -f $RUNDIR/$SETNAME
+  return 0
 }
 
 stop_config_env() {
   do_get_config "" stop
   stop_config
+  return $?
 }
 
 stop_config_file() {
   file=$1
   do_get_config $file stop
   if [ $? -gt 0 ]; then
-    return
+    return 1
   fi 
 
   stop_config
+  return $?
 }
 
 case "$1" in