reopen 446793
tags: patch

hi!

i just upgraded lenny, and an upgrade to thttpd 2.25b-5 failed because thttpd 
wasn't running and the init stop failed.
i'd suggest a test for the existence of the pidfile.

thttpd seems just to write the pidfile but doesn't take care of removing it. so 
i'd also suggest some pidfile-handling.
in case of thttpd exiting on its own, the pidfile will still be there. a second-best 
solution (after thttpd itself taking care of removing the pidfile) might be to call 
thttpd in a subshell with an appended ' -D; rm -f "$PIDFILE"'?

and while i was at it, an exact pid grep is nicer. and not relying on filenames 
not having to be quoted, too.
i guess i just got kind of carried away... :)

regards,

        Chris
diff -pruN thttpd-2.25b.orig/debian/thttpd.init.d thttpd-2.25b/debian/thttpd.init.d
--- thttpd-2.25b.orig/debian/thttpd.init.d	2008-05-02 12:44:43.000000000 +0200
+++ thttpd-2.25b/debian/thttpd.init.d	2008-05-02 14:31:56.000000000 +0200
@@ -19,26 +19,34 @@ NAME=thttpd
 
 CONFFILE=/etc/thttpd/thttpd.conf
 PIDFILE=/var/run/thttpd.pid
-OPTIONS="-C $CONFFILE -i $PIDFILE"
+OPTIONS="-C \"$CONFFILE\" -i \"$PIDFILE\""
 
-test -x $DAEMON || exit 0
-test -f $CONFFILE || exit 1
+test -x "$DAEMON" || exit 0
+test -f "$CONFFILE" || exit 1
 
 set -e
 
 case "$1" in
 	start)
 		echo -n "Starting $DESC: "
-		start-stop-daemon -S -q -p $PIDFILE -x $DAEMON -- $OPTIONS
+		eval start-stop-daemon -S -q -p \"\$PIDFILE\" -x \"\$DAEMON\" -- $OPTIONS
 		echo "$NAME."
 		;;
 
 	stop)
 		echo -n "Stopping $DESC: "
 
-		if ps ax | grep "$(cat $PIDFILE)" | grep -qv grep
+		if [ -r "$PIDFILE" ]
 		then
-			start-stop-daemon -K -q -p $PIDFILE -x $DAEMON --signal 10
+			if ps ax | grep "^[ 	]*$(cat "$PIDFILE")[ 	]\+" | grep -qv grep
+			then
+				if start-stop-daemon -K -q -p "$PIDFILE" -x "$DAEMON" --signal 10
+				then
+					rm -f "$PIDFILE" >/dev/null 2>&1
+				fi
+			else
+				rm -f "$PIDFILE" >/dev/null 2>&1
+			fi
 		fi
 
 		echo "$NAME."
@@ -46,12 +54,12 @@ case "$1" in
 
 	force-stop)
 		echo -n "Stopping $DESC: "
-		start-stop-daemon -K -q -p $PIDFILE -x $DAEMON
+		start-stop-daemon -K -q -p "$PIDFILE" -x "$DAEMON"
 		echo "$NAME."
 		;;
 
 	force-reload)
-		if start-stop-daemon -K -q -p $PIDFILE -x $DAEMON --test
+		if start-stop-daemon -K -q -p "$PIDFILE" -x "$DAEMON" --test
 		then
 			$0 restart
 		fi
@@ -59,14 +67,14 @@ case "$1" in
 
 	restart)
 		echo -n "Restarting $DESC: "
-		start-stop-daemon -K -q -p $PIDFILE -x $DAEMON --signal 10
+		start-stop-daemon -K -q -p "$PIDFILE" -x "$DAEMON" --signal 10
 		sleep 1
-		start-stop-daemon -S -q -p $PIDFILE -x $DAEMON -- $OPTIONS
+		start-stop-daemon -S -q -p "$PIDFILE" -x "$DAEMON" -- $OPTIONS
 		echo "$NAME."
 		;;
 
 	*)
-		N=/etc/init.d/$NAME
+		N=/etc/init.d/"$NAME"
 		echo "Usage: $N {start|stop|force-stop|restart|force-reload}" >&2
 		exit 1
 		;;

Reply via email to