Add configuration check on restart/reload
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Fri, 31 Aug 2012 14:49:21 +0000 (15:49 +0100)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Fri, 31 Aug 2012 14:49:21 +0000 (15:49 +0100)
Add configtest option
Switch to lsb functions for start/stop

debian/freeradius.init

index 69f0039..528d6cc 100755 (executable)
@@ -8,19 +8,28 @@
 # Required-Stop:     $remote_fs $syslog
 # Default-Start:     2 3 4 5
 # Default-Stop:      0 1 6
-# Short-Description: Radius Daemon 
+# Short-Description: Radius Daemon
 # Description:       Extensible, configurable radius daemon
 ### END INIT INFO
 
-set -e
-
-. /lib/lsb/init-functions
-
 PROG="freeradius"
 PROGRAM="/usr/sbin/freeradius"
 PIDFILE="/var/run/freeradius/freeradius.pid"
 DESCR="FreeRADIUS daemon"
 
+set -e
+
+. /lib/lsb/init-functions
+
+test_freeradius_config() {
+  log_action_begin_msg "Checking $DESCR configuration"
+
+  out=`$PROGRAM -Cxl stdout $FREERADIUS_OPTIONS`; ret=$?
+  out=`echo "${out}" | tail -n 1 | sed 's/^\s*ERROR:\s*\(.*\)\s*$/\1/'`
+  log_action_end_msg $ret "$out"
+  return $ret
+}
+
 if [ -r /etc/default/$PROG ]; then
   . /etc/default/$PROG
 fi
@@ -40,37 +49,42 @@ ret=0
 case "$1" in
         start)
                 log_daemon_msg "Starting $DESCR" "$PROG"
-                start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $PROGRAM -- $FREERADIUS_OPTIONS || ret=$?
+
+                start_daemon -p "$PIDFILE" "$PROGRAM" $FREERADIUS_OPTIONS || ret=$?
                 log_end_msg $ret
-                exit $ret
                 ;;
+
         stop)
                 log_daemon_msg "Stopping $DESCR" "$PROG"
-                if [ -f "$PIDFILE" ] ; then
-                  start-stop-daemon --stop --retry=TERM/30/KILL/5 --quiet --pidfile $PIDFILE || ret=$?
-                else 
-                  log_action_cont_msg "$PIDFILE not found"
-                  ret=0
-                fi
+
+                killproc -p "$PIDFILE" || ret=$?
                 log_end_msg $ret
                 ;;
+
         restart)
+                test_freeradius_config || exit $?
+
                 $0 stop
                 $0 start
                 ;;
+
         reload|force-reload)
-                log_daemon_msg "Reloading $DESCR" "$PROG"
-                if [ -f "$PIDFILE" ] ; then
+                test_freeradius_config || exit $?
+
+                if status_of_proc -p "$PIDFILE" "$PROG" "$DESCR"; then
+                  log_daemon_msg "Reloading $DESCR" "$PROG"
+
                   start-stop-daemon --stop --signal HUP --quiet --pidfile $PIDFILE || ret=$?
-                else 
-                  log_action_cont_msg "$PIDFILE not found"
-                  ret=0
+                  log_end_msg $ret
                 fi
-                log_end_msg $ret
+                ;;
+
+        configtest|testconfig)
+                test_freeradius_config || exit $?
                 ;;
         *)
-                echo "Usage: $0 start|stop|restart|force-reload|reload"
-                exit 1 
+                echo "Usage: $0 start|stop|restart|force-reload|reload|configtest"
+                exit 1
                 ;;
 esac