From cecbaba3e04a2305f1e180a4d4a0a5dee621762a Mon Sep 17 00:00:00 2001 From: Richard Hansen Date: Wed, 27 May 2020 18:18:26 -0400 Subject: [PATCH 1/2] Whitespace and minor style fixes --- sample-etc_rc.d_init.d_ddclient | 97 ++++++++++++++++----------------- 1 file changed, 47 insertions(+), 50 deletions(-) diff --git a/sample-etc_rc.d_init.d_ddclient b/sample-etc_rc.d_init.d_ddclient index ab6faf6..7eae7cf 100755 --- a/sample-etc_rc.d_init.d_ddclient +++ b/sample-etc_rc.d_init.d_ddclient @@ -33,59 +33,56 @@ export PATH # See how we were called. case "$1" in - start) - # Start daemon. - DELAY=`grep -v '^\s*#' $CONF | grep -i -m 1 "daemon" | awk -F '=' '{print $2}'` - if [ -z "$DELAY" ] ; then - DELAY="-daemon 300" - else - DELAY='' - fi - echo -n "Starting ddclient: " - if [ "$system" = "fedora" ] || [ "$system" = "redhat" ]; then - daemon $program $DELAY - else - ddclient $DELAY - fi - echo - ;; - stop) - # Stop daemon. - echo -n "Shutting down ddclient: " - if [ -n "$PID" ] ; then - if [ "$system" = "fedora" ] || [ "$system" = "redhat" ]; then - killproc $program + start) + # Start daemon. + DELAY=`grep -v '^\s*#' $CONF | grep -i -m 1 "daemon" | awk -F '=' '{print $2}'` + if [ -z "$DELAY" ]; then + DELAY="-daemon 300" else - kill $PID + DELAY='' fi - else - echo "ddclient is not running" - fi - echo - ;; - restart) - $0 stop - $0 start - ;; - status) - if [ "$system" = "fedora" ] || [ "$system" = "redhat" ]; then - status $program - else - if test "$PID" - then - for p in $PID - do - echo "$program (pid $p) is running" - done - else - echo "$program is stopped" + echo -n "Starting ddclient: " + if [ "$system" = "fedora" ] || [ "$system" = "redhat" ]; then + daemon $program $DELAY + else + ddclient $DELAY fi - fi - ;; - *) - echo "Usage: ddclient {start|stop|restart|status}" - exit 1 + echo + ;; + stop) + # Stop daemon. + echo -n "Shutting down ddclient: " + if [ -n "$PID" ]; then + if [ "$system" = "fedora" ] || [ "$system" = "redhat" ]; then + killproc $program + else + kill $PID + fi + else + echo "ddclient is not running" + fi + echo + ;; + restart) + $0 stop + $0 start + ;; + status) + if [ "$system" = "fedora" ] || [ "$system" = "redhat" ]; then + status $program + else + if test "$PID"; then + for p in $PID; do + echo "$program (pid $p) is running" + done + else + echo "$program is stopped" + fi + fi + ;; + *) + echo "Usage: ddclient {start|stop|restart|status}" + exit 1 esac exit 0 - From e7c43e9eefe69fd884a74b61f6828061d47a5095 Mon Sep 17 00:00:00 2001 From: Richard Hansen Date: Wed, 27 May 2020 18:27:03 -0400 Subject: [PATCH 2/2] Improve robustness of daemon interval extraction Without this change the init script incorrectly handles config file lines like these: foo=bar # daemon=123 foodaemon=123 daemonfoo=123 daemon=0 DAEMON=123 --- sample-etc_rc.d_init.d_ddclient | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/sample-etc_rc.d_init.d_ddclient b/sample-etc_rc.d_init.d_ddclient index 7eae7cf..a228349 100755 --- a/sample-etc_rc.d_init.d_ddclient +++ b/sample-etc_rc.d_init.d_ddclient @@ -34,11 +34,23 @@ export PATH # See how we were called. case "$1" in start) - # Start daemon. - DELAY=`grep -v '^\s*#' $CONF | grep -i -m 1 "daemon" | awk -F '=' '{print $2}'` - if [ -z "$DELAY" ]; then + # See if daemon=value is specified in the config file. + # Assumptions: + # * there are no quoted "#" characters before "daemon=" + # (if there is a "#" it starts a comment) + # * "daemon=" does not appear in a password or value + # * if the interval value is 0, it is not quoted + INTERVAL=$(sed -e ' + s/^\([^#]*[,[:space:]]\)\{0,1\}daemon=\([^,[:space:]]*\).*$/\2/ + t quit + d + :quit + q + ' "$CONF") + if [ -z "$DELAY" ] || [ "$DELAY" = "0" ]; then DELAY="-daemon 300" else + # use the interval specified in the config file DELAY='' fi echo -n "Starting ddclient: "