- Set a two read-only variables (${prefix} and ${etcdir}). This is
especially useful when using /etc/rc.d scripts with third-party software installed from ports. - Fix rc.d/sshd to work with openssh from ports using ${etcdir} instead of hardcoded /etc. Reviewed by: brooks Approved by: cperciva (mentor) MFC after: 1 week
This commit is contained in:
parent
cd86367a5a
commit
f0a4a7a722
@ -19,6 +19,8 @@ extra_commands="keygen reload"
|
||||
|
||||
timeout=300
|
||||
|
||||
load_rc_config $name
|
||||
|
||||
user_reseed()
|
||||
{
|
||||
(
|
||||
@ -47,47 +49,46 @@ sshd_keygen()
|
||||
umask 022
|
||||
|
||||
# Can't do anything if ssh is not installed
|
||||
[ -x /usr/bin/ssh-keygen ] || {
|
||||
warn "/usr/bin/ssh-keygen does not exist."
|
||||
[ -x ${prefix}/bin/ssh-keygen ] || {
|
||||
warn "${prefix}/bin/ssh-keygen does not exist."
|
||||
return 1
|
||||
}
|
||||
|
||||
if [ -f /etc/ssh/ssh_host_key ]; then
|
||||
if [ -f ${etcdir}/ssh/ssh_host_key ]; then
|
||||
echo "You already have an RSA host key" \
|
||||
"in /etc/ssh/ssh_host_key"
|
||||
"in ${etcdir}/ssh/ssh_host_key"
|
||||
echo "Skipping protocol version 1 RSA Key Generation"
|
||||
else
|
||||
/usr/bin/ssh-keygen -t rsa1 -b 1024 \
|
||||
-f /etc/ssh/ssh_host_key -N ''
|
||||
${prefix}/bin/ssh-keygen -t rsa1 -b 1024 \
|
||||
-f ${etcdir}/ssh/ssh_host_key -N ''
|
||||
fi
|
||||
|
||||
if [ -f /etc/ssh/ssh_host_dsa_key ]; then
|
||||
if [ -f ${etcdir}/ssh/ssh_host_dsa_key ]; then
|
||||
echo "You already have a DSA host key" \
|
||||
"in /etc/ssh/ssh_host_dsa_key"
|
||||
"in ${etcdir}/ssh/ssh_host_dsa_key"
|
||||
echo "Skipping protocol version 2 DSA Key Generation"
|
||||
else
|
||||
/usr/bin/ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N ''
|
||||
${prefix}/bin/ssh-keygen -t dsa -f ${etcdir}/ssh/ssh_host_dsa_key -N ''
|
||||
fi
|
||||
|
||||
if [ -f /etc/ssh/ssh_host_rsa_key ]; then
|
||||
if [ -f ${etcdir}/ssh/ssh_host_rsa_key ]; then
|
||||
echo "You already have a RSA host key" \
|
||||
"in /etc/ssh/ssh_host_rsa_key"
|
||||
"in ${etcdir}/ssh/ssh_host_rsa_key"
|
||||
echo "Skipping protocol version 2 RSA Key Generation"
|
||||
else
|
||||
/usr/bin/ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ''
|
||||
${prefix}/bin/ssh-keygen -t rsa -f ${etcdir}/ssh/ssh_host_rsa_key -N ''
|
||||
fi
|
||||
)
|
||||
}
|
||||
|
||||
sshd_precmd()
|
||||
{
|
||||
if [ ! -f /etc/ssh/ssh_host_key -o \
|
||||
! -f /etc/ssh/ssh_host_dsa_key -o \
|
||||
! -f /etc/ssh/ssh_host_rsa_key ]; then
|
||||
if [ ! -f ${etcdir}/ssh/ssh_host_key -o \
|
||||
! -f ${etcdir}/ssh/ssh_host_dsa_key -o \
|
||||
! -f ${etcdir}/ssh/ssh_host_rsa_key ]; then
|
||||
user_reseed
|
||||
run_rc_command keygen
|
||||
fi
|
||||
}
|
||||
|
||||
load_rc_config $name
|
||||
run_rc_command "$1"
|
||||
|
57
etc/rc.subr
57
etc/rc.subr
@ -362,6 +362,10 @@ wait_for_pids()
|
||||
# rcvar n This is checked with checkyesno to determine
|
||||
# if the action should be run.
|
||||
#
|
||||
# ${name}_program n Full path to command.
|
||||
# Meant to be used in /etc/rc.conf to override
|
||||
# ${command}.
|
||||
#
|
||||
# ${name}_chroot n Directory to chroot to before running ${command}
|
||||
# Requires /usr to be mounted.
|
||||
#
|
||||
@ -498,9 +502,6 @@ run_rc_command()
|
||||
;;
|
||||
esac
|
||||
|
||||
eval _override_command=\$${name}_program
|
||||
command=${command:+${_override_command:-$command}}
|
||||
|
||||
_keywords="start stop restart rcvar $extra_commands"
|
||||
rc_pid=
|
||||
_pidcmd=
|
||||
@ -857,14 +858,16 @@ run_rc_script()
|
||||
}
|
||||
|
||||
#
|
||||
# load_rc_config command
|
||||
# Source in the configuration file for a given command.
|
||||
# load_rc_config name
|
||||
# Source in the configuration file for a given name.
|
||||
#
|
||||
load_rc_config()
|
||||
{
|
||||
_command=$1
|
||||
if [ -z "$_command" ]; then
|
||||
err 3 'USAGE: load_rc_config command'
|
||||
local _tmp
|
||||
|
||||
_name=$1
|
||||
if [ -z "$_name" ]; then
|
||||
err 3 'USAGE: load_rc_config name'
|
||||
fi
|
||||
|
||||
if ${_rc_conf_loaded:-false}; then
|
||||
@ -880,9 +883,35 @@ load_rc_config()
|
||||
fi
|
||||
_rc_conf_loaded=true
|
||||
fi
|
||||
if [ -f /etc/rc.conf.d/"$_command" ]; then
|
||||
debug "Sourcing /etc/rc.conf.d/${_command}"
|
||||
. /etc/rc.conf.d/"$_command"
|
||||
|
||||
eval _override_command=\$${name}_program
|
||||
command=${command:+${_override_command:-$command}}
|
||||
|
||||
if [ -z "${command}" ]; then
|
||||
_tmp=`/bin/realpath $0`
|
||||
prefix=${_tmp%/etc/rc.d/*}/
|
||||
else
|
||||
prefix=${command%/*bin/*}/
|
||||
fi
|
||||
if [ "${prefix}" = "/" -o "${prefix}" = "/usr/" ] ; then
|
||||
etcdir="/etc"
|
||||
else
|
||||
etcdir="${prefix}etc"
|
||||
fi
|
||||
|
||||
# XXX - Deprecated
|
||||
if [ -f /etc/rc.conf.d/${_name} -a ${etcdir} != "/etc" ]; then
|
||||
debug "Sourcing /etc/rc.conf.d/${_name}"
|
||||
warn "Warning: /etc/rc.conf.d/${_name} is deprecated, please use ${etcdir}/rc.conf.d/${_name} instead."
|
||||
if [ -f ${etcdir}/rc.conf.d/${_name} ]
|
||||
warn "Warning: Both /etc/rc.conf.d/${_name} and ${etcdir}/rc.conf.d/${_name} exist."
|
||||
fi
|
||||
. /etc/rc.conf.d/${_name}
|
||||
fi
|
||||
|
||||
if [ -f ${etcdir}/rc.conf.d/${_name} ]; then
|
||||
debug "Sourcing ${etcdir}/rc.conf.d/${_name}"
|
||||
. ${etcdir}/rc.conf.d/${_name}
|
||||
fi
|
||||
|
||||
# XXX - Deprecated variable name support
|
||||
@ -903,15 +932,15 @@ load_rc_config()
|
||||
}
|
||||
|
||||
#
|
||||
# load_rc_config_var cmd var
|
||||
# Read the rc.conf(5) var for cmd and set in the
|
||||
# load_rc_config_var name var
|
||||
# Read the rc.conf(5) var for name and set in the
|
||||
# current shell, using load_rc_config in a subshell to prevent
|
||||
# unwanted side effects from other variable assignments.
|
||||
#
|
||||
load_rc_config_var()
|
||||
{
|
||||
if [ $# -ne 2 ]; then
|
||||
err 3 'USAGE: load_rc_config_var cmd var'
|
||||
err 3 'USAGE: load_rc_config_var name var'
|
||||
fi
|
||||
eval $(eval '(
|
||||
load_rc_config '$1' >/dev/null;
|
||||
|
Loading…
Reference in New Issue
Block a user