Your message dated Mon, 08 Oct 2018 18:55:21 +0000
with message-id <[email protected]>
and subject line Bug#904318: Removed package(s) from unstable
has caused the Debian Bug report #649407,
regarding file-rc: Mistakes in rc script
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [email protected]
immediately.)


-- 
649407: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=649407
Debian Bug Tracking System
Contact [email protected] with problems
--- Begin Message ---
Package: file-rc
Version: 0.8.12
Severity: important

Dear Maintainer,

In order to understand the order of treatment of runlevel.conf, I open the rc
script and found some errors:
 - sorting as brought by #327085 creates some errors, due to conflict on the
   "x" variable, also used in is_elem() function.
 - debug and verbose options are inverted between code and explanation

I corrected that, and use some time to improve the cosmetic:
 - complete reindentation
 - homogeneous use of "[]" and "test"
 - simplify execution conditions at the end of the file
 - remove "set centerline" which is useless

I hope this will be useful.

This also resolves #601985.

Please consider clarifying that to switch between one level and another one, rc
runs all kill commands and then all start commands, both in the "sort column"
order.

Thanks,
Benoit

*** End of the template - remove these lines ***


-- System Information:
Debian Release: wheezy/sid
  APT prefers testing
  APT policy: (990, 'testing'), (500, 'stable-updates'), (500, 'unstable'), 
(500, 'stable'), (1, 'experimental')
Architecture: amd64 (x86_64)

Kernel: Linux 3.1.1-bf (PREEMPT)
Locale: LANG=fr_FR@euro, LC_CTYPE=fr_FR@euro (charmap=ISO-8859-15)
Shell: /bin/sh linked to /bin/bash

-- no debconf information
#! /bin/sh
# This is the file "rc" which starts and stops services for the different
# runlevels of the SysV init.
#
# Author: Winfried Trümper <[email protected]>
# Misc fixes by Tom Lees <[email protected]>.
# Misc improvements and code rewrite by Martin Schulze <[email protected]>
# Misc improvements by Roland Rosenfeld <[email protected]>
# Partial rewrite by Alexander Wirt <[email protected]>
# Bugfixes by Benoit Friry <[email protected]>
#
#   Copyright (c) 1998  Martin Schulze <[email protected]>
#                 1998  Winfried Trümper <[email protected]>
#                 1998  Miquel van Smoorenburg <[email protected]>
#            1999-2000  Roland Rosenfeld <[email protected]>
#                 2010  Alexander Wirt <[email protected]>
#                 2011  Benoit Friry <[email protected]>
#
# Unlike traditional implementations it avoids the messy scheme with
# expressing the setup through links but reads a central config file
# instead. From a technical point of view both methods are almost
# equivalent.
#
# To be compatible with the common configuration scheme in the Linux-world,
# every script has two states: "on" or "off". The effect of this is that
# once it is switched on, it is never started again when the runlevel changes
# (it is only executed to switch it off if necessary).
#
# This scripts accept to different parameters, -v and -d. Please don't mix them
# -v means some verbose output during operations 
# -d means the same output, but also rc is doing a dry-run and does not try to 
#    start or stop anything. 
#
# The following section is taken from the original rc with slight
# modifications.

# Ignore CTRL-C only in this shell, so we can interrupt subprocesses.
trap ":" INT QUIT TSTP

# Set onlcr to avoid staircase effect.
stty onlcr 0>&1

verbose=0 
if [ "$1" = "-v" ]; then
	verbose=1
	shift
fi

debug=0
if [ "$1" = "-d" ]; then
	verbose=1
	debug=1
	shift
fi

# Is this done because RUNLEVEL and PREVLEVEL could be read-only?
#
# Now find out what the current and what the previous runlevel are.
runlevel=$RUNLEVEL
# Get first argument. Set new runlevel to this argument.
test "$1" != "" && runlevel="$1"
# Is this necessary?
#prevlevel=${PREVLEVEL:="N"}
prevlevel=$2
# Is this necessary?
export runlevel prevlevel

CFGFILE="/etc/runlevel.conf"
BAKCFG="/etc/runlevel.fallback"
LOCKFILE="/var/lock/runlevel.lock"

true=0
false=1

valid_min_seq=0
valid_max_seq=99

test $verbose -eq 1 && echo "rc: $prevlevel -> $runlevel"
  # wait for any lock to vanish (but only when not booting)
i=0
while [ -f "$LOCKFILE" ] && [ "$prevlevel" != "N" ]; do
	read pid < "$LOCKFILE"
	if ! kill -s 0 $pid > /dev/null 2>&1; then
		echo "$0: found stale lockfile '$LOCKFILE'. Ignoring it." >&2
		rm -f "$LOCKFILE" # external command (does not work on R/O fs)
		break
	fi
	if [ "$i" -gt "60" ]; then
		echo "Process no. '$pid' is locking the configuration database." >&2
		if [ "$runlevel" = "1" -o "$runlevel" = "6" ]; then
			# Try killing locking process, if booting, rebooting or halting.
			echo "Sending TERM signal to $pid." >&2
			kill -s 15 $pid
			sleep 5
			echo "Sending KILL signal to $pid." >&2	
			kill -s 9 $pid > /dev/null 2>&1
			rm -f "$LOCKFILE" # external command (does not work on R/O FS)
			sleep 5
			break
		else
			# Normal runlevel change (not boot, reboot or halt)
			echo "Terminating." >&2
			exit 1
		fi
	fi
	sleep 2
	echo -n "."
	i=$(($i + 1))
done


# This script is vital so we better keep an old copy of the configuration
# file as fallsave-configuration. This does not handle a broken config
# file, though.
if [ ! -f "$CFGFILE" ]; then
	echo "Missing configuration file '$CFGFILE' using fallback config."
	if [ ! -f "$BAKCFG" ]; then
		echo "No configuration file at all. You're in serious trouble now."
		echo "Please try to fix this problem with a root shell and reboot."
		if [ -f /etc/default/rcS ]; then
			# Read value of $CONSOLE:
			. /etc/default/rcS
		fi
		/sbin/sulogin $CONSOLE
		exit 1
	fi
	CFGFILE="$BAKCFG"
fi

is_valid_sequence() {
	if [ $# -ne 1 ]; then
		return $false
	fi

	case $1 in
		[0-9]|[0-9][0-9]) ;;
		*) return $false ;;
	esac

	if [ $1 -ge $valid_min_seq ] && [ $1 -le $valid_max_seq ]; then
		return $true
	fi
	return $false
}

element() {
	element="$1"
	case "$element" in
		reboot | R) element=0 ;;
		halt   | H) element=6 ;;
	esac
	
	test "$2" = "in" && shift
	list="$2"
	test "$list" = "-" && return 1
	test "$list" = "*" && return 0

	ORGIFS="$IFS"
	IFS=","
	set -- $list
	IFS="$ORGIFS"
	case $element in
		"$1" | "$2" | "$3" | "$4" | "$5" | "$6" | "$7" | "$8" | "$9")
		return 0
	esac
	return 1
}

is_elem() {
	elem=$1; shift

	for x in $*; do
		test "$x" = "$elem" && return 0
	done
	return 1
}

# Adds new levels to list of levels of the given command.  The entire
# list of commands and levels is tested.
#
pushlevel() {
	newcmd=$1;shift
	newlevels=$1; shift
	add="$newcmd:$newlevels"
	outline=""

	for i in $*; do
		cmd=${i%:*}
	if [ "$cmd" = "$newcmd" ]
	then
		outline="$outline$i,$newlevels "
		add=""
	else
		outline="$outline$i "
	fi
	done
	echo "$outline$add"
}


# CMDLIST ensures scripts are killed in reversed order
CMDLIST=""
STARTCMD=""
STOPCMD=""
# Experimental: To tell the scripts they are not called manually.
# (should be unset in init.d-scripts)
CALL_FROM_RC="yes"

test $verbose -eq 1 && echo "Reading configuration file $CFGFILE."

case $runlevel in
	0|6) start=stop; stop=stop;;
	*)   start=start; stop=stop;;
esac


# lock the configuration file
if [ "$prevlevel" != "N" ] && [ "$runlevel" != "1" ] && [ "$runlevel" != "6" ];
then
	(echo "$$" > "$LOCKFILE") || true
fi

while read  SORT_NO  OFF_LEVELS  ON_LEVELS  CMD  OPTIONS; do
	case "$SORT_NO" in
		\#*|""|\#) continue ;;
	esac
	test ! -f "$CMD" && continue
	is_valid_sequence "$SORT_NO" || continue

	# currently OPTIONS is completely ignored ... we _could_ pass them to the
	# init-script after "start" or "stop".

	test "$ON_LEVELS" != "-" && element "$runlevel" in "$ON_LEVELS" \
	&& STARTLIST=`pushlevel $SORT_NO:$CMD $ON_LEVELS $STARTLIST`

	if ! element "$prevlevel" in "$OFF_LEVELS"; then
		element "$runlevel" in "$OFF_LEVELS" \
			&& STOPLIST="$STOPLIST$SORT_NO:$CMD "
	fi

done < $CFGFILE

# remove lock of configuration file
if [ "$prevlevel" != "N" ] && [ "$runlevel" != "1" ] && [ "$runlevel" != "6" ];
then
	rm -f "$LOCKFILE"
fi


# First, run the KILL scripts.
for count_ten in 0 1 2 3 4 5 6 7 8 9; do
	for count_one in 0 1 2 3 4 5 6 7 8 9; do
		for script in $STOPLIST; do
			STOP_NUM=${script%%:*}
			if [ $STOP_NUM -eq $count_ten$count_one ]; then
				CMD=${script#*:}
				#test $verbose -eq 1 && echo "prev: $prevlevel"
				if [ "$prevlevel" != "N" ]; then
					case "$CMD" in
						*.sh)
							CMDLIST="$CMDLIST; (set -- $stop; . $CMD)"
							;;
						*)
							test -x "$CMD" && CMDLIST="$CMDLIST; $CMD $stop" 
							test $verbose -eq 1 && echo "Stop $CMD" 
							;;
					esac
				fi
			fi
		done
	done
done

# Then look at the start scripts
for count_ten in 0 1 2 3 4 5 6 7 8 9; do
	for count_one in 0 1 2 3 4 5 6 7 8 9; do
		for script in $STARTLIST; do
			START_NUM=${script%%:*}
			if [ $START_NUM -eq $count_ten$count_one ]; then
				comb=${script#*:}
				CMD=${comb%:*}
				if [ "$prevlevel" != "N" ]; then
					level=${comb#*:}
					if element "$prevlevel" in "$level" \
						&& ! is_elem $CMD $STOPLIST; then
						continue
					fi
				fi
				case "$CMD" in
					*.sh)
						CMDLIST="$CMDLIST; (set -- $start; . $CMD)"
						;;
					*)
						test -x "$CMD" && CMDLIST="$CMDLIST; $CMD $start"
						test $verbose -eq 1 && echo "Start $CMD"
						;;
					esac
			fi
		done
	done
done

# Execute the commands collected above
test $verbose -eq 1 && echo "$CMDLIST"
if [ $debug -eq 0 ]; then
	(trap - INT QUIT TSTP; sh -c "$CMDLIST")
fi

--- End Message ---
--- Begin Message ---
Version: 0.8.18+rm

Dear submitter,

as the package file-rc has just been removed from the Debian archive
unstable we hereby close the associated bug reports.  We are sorry
that we couldn't deal with your issue properly.

For details on the removal, please see https://bugs.debian.org/904318

The version of this package that was in Debian prior to this removal
can still be found using http://snapshot.debian.org/.

This message was generated automatically; if you believe that there is
a problem with it please contact the archive administrators by mailing
[email protected].

Debian distribution maintenance software
pp.
Ansgar Burchardt (the ftpmaster behind the curtain)

--- End Message ---

Reply via email to