aboutsummaryrefslogtreecommitdiff
path: root/etc
diff options
context:
space:
mode:
authorFlorent Thoumie <flz@FreeBSD.org>2006-04-11 08:55:27 +0000
committerFlorent Thoumie <flz@FreeBSD.org>2006-04-11 08:55:27 +0000
commitf0a4a7a722a0c40b94e600482a4df09a377f6047 (patch)
treef8efba63241fc15087209c583abdde0ecf55fd49 /etc
parentcd86367a5a0b1934a0a3348b2818af97a046d145 (diff)
downloadsrc-f0a4a7a722a0c40b94e600482a4df09a377f6047.tar.gz
src-f0a4a7a722a0c40b94e600482a4df09a377f6047.zip
- 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
Notes
Notes: svn path=/head/; revision=157653
Diffstat (limited to 'etc')
-rwxr-xr-xetc/rc.d/sshd33
-rw-r--r--etc/rc.subr57
2 files changed, 60 insertions, 30 deletions
diff --git a/etc/rc.d/sshd b/etc/rc.d/sshd
index 321d8f7cad35..0c18bbd89691 100755
--- a/etc/rc.d/sshd
+++ b/etc/rc.d/sshd
@@ -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"
diff --git a/etc/rc.subr b/etc/rc.subr
index 7549cdc1a2cf..7eb390001608 100644
--- a/etc/rc.subr
+++ b/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;