From: Arran Cudbard-Bell Date: Fri, 31 Aug 2012 14:49:21 +0000 (+0100) Subject: Add configuration check on restart/reload X-Git-Tag: release_2_2_0~32 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f1024eaeb51736bbd9c4ffb49ddc13dabf152176;p=thirdparty%2Ffreeradius-server.git Add configuration check on restart/reload Add configtest option Switch to lsb functions for start/stop --- diff --git a/debian/freeradius.init b/debian/freeradius.init index 69f0039a630..528d6ccecfa 100755 --- a/debian/freeradius.init +++ b/debian/freeradius.init @@ -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