NetBSD/etc/rc.d/bootconf.sh
christos 29f0bfc6b2 From Anon Ymous:
Send the SIGALRM to the correct process when we timeout. See the note
in src/etc/rc regarding RC_PID.

The former code would leave you with a root shell when the prompt
timed out (if the tty is marked secure) while continuing the boot
process in another shell.  This was easily hidden if you started
xdm(1) at boot, while the root shell remains on another tty
(accessible with CTL-ALT-F1).
2010-11-01 14:42:08 +00:00

87 lines
1.5 KiB
Bash
Executable File

#!/bin/sh
#
# $NetBSD: bootconf.sh,v 1.14 2010/11/01 14:42:08 christos Exp $
#
# PROVIDE: bootconf
# REQUIRE: mountcritlocal
# KEYWORD: interactive
$_rc_subr_loaded . /etc/rc.subr
name="bootconf"
start_cmd="bootconf_start"
stop_cmd=":"
bootconf_start()
{
# Refer to newbtconf(8) for more information
#
if [ ! -e /etc/etc.current ]; then
return 0
fi
if [ -h /etc/etc.default ]; then
def=$(ls -ld /etc/etc.default 2>&1)
default="${def##*-> *etc.}"
else
default=current
fi
if [ "$default" = "current" ]; then
def=$(ls -ld /etc/etc.current 2>&1)
default="${def##*-> *etc.}"
fi
spc=""
for i in /etc/etc.*; do
name="${i##/etc/etc.}"
case $name in
current|default|\*)
continue
;;
*)
if [ "$name" = "$default" ]; then
echo -n "${spc}[${name}]"
else
echo -n "${spc}${name}"
fi
spc=" "
;;
esac
done
echo
_DUMMY=/etc/passwd
conf=${_DUMMY}
while [ ! -d /etc/etc.$conf/. ]; do
trap "conf=$default; echo; echo Using default of $default" ALRM
echo -n "Which configuration [$default] ? "
(sleep 30 && kill -ALRM $RC_PID) >/dev/null 2>&1 &
read conf
trap : ALRM
if [ -z $conf ] ; then
conf=$default
fi
if [ ! -d /etc/etc.$conf/. ]; then
conf=${_DUMMY}
fi
done
print_rc_metadata "note:Using configuration \"${conf}\""
case $conf in
current|default)
;;
*)
rm -f /etc/etc.current
ln -s etc.$conf /etc/etc.current
;;
esac
if [ -f /etc/rc.conf ] ; then
. /etc/rc.conf
fi
}
load_rc_config $name
run_rc_command "$1"