From 3081bf98bf48f2f6e4d0744c2c1f2d09aad46d7e Mon Sep 17 00:00:00 2001 From: Florent Thoumie Date: Tue, 22 Aug 2006 11:17:29 +0000 Subject: [PATCH] Backout this commit since it breaks startup and some scripts in certain conditions. I haven't been able to find a better solution yet: - 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. - Reflect prefix/etcdir changes in rc.subr.8. src/etc/rc.d/sshd: rev 1.9 -> 1.10 src/etc/rc.subr: rev 1.51 -> 1.52 src/share/man/man8/rc.subr.8: rev 1.11 -> 1.12 Approved by: cperciva (mentor) --- etc/rc.d/sshd | 33 ++++++++++++++++----------------- etc/rc.subr | 35 +++++------------------------------ share/man/man8/rc.subr.8 | 34 ++++------------------------------ 3 files changed, 25 insertions(+), 77 deletions(-) diff --git a/etc/rc.d/sshd b/etc/rc.d/sshd index 1f4078c50ebb..82a4670e7711 100755 --- a/etc/rc.d/sshd +++ b/etc/rc.d/sshd @@ -19,8 +19,6 @@ extra_commands="keygen reload" timeout=300 -load_rc_config $name - user_reseed() { ( @@ -49,46 +47,47 @@ sshd_keygen() umask 022 # Can't do anything if ssh is not installed - [ -x ${prefix}/bin/ssh-keygen ] || { - warn "${prefix}/bin/ssh-keygen does not exist." + [ -x /usr/bin/ssh-keygen ] || { + warn "/usr/bin/ssh-keygen does not exist." return 1 } - if [ -f ${etcdir}/ssh/ssh_host_key ]; then + if [ -f /etc/ssh/ssh_host_key ]; then echo "You already have an RSA host key" \ - "in ${etcdir}/ssh/ssh_host_key" + "in /etc/ssh/ssh_host_key" echo "Skipping protocol version 1 RSA Key Generation" else - ${prefix}/bin/ssh-keygen -t rsa1 -b 1024 \ - -f ${etcdir}/ssh/ssh_host_key -N '' + /usr/bin/ssh-keygen -t rsa1 -b 1024 \ + -f /etc/ssh/ssh_host_key -N '' fi - if [ -f ${etcdir}/ssh/ssh_host_dsa_key ]; then + if [ -f /etc/ssh/ssh_host_dsa_key ]; then echo "You already have a DSA host key" \ - "in ${etcdir}/ssh/ssh_host_dsa_key" + "in /etc/ssh/ssh_host_dsa_key" echo "Skipping protocol version 2 DSA Key Generation" else - ${prefix}/bin/ssh-keygen -t dsa -f ${etcdir}/ssh/ssh_host_dsa_key -N '' + /usr/bin/ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N '' fi - if [ -f ${etcdir}/ssh/ssh_host_rsa_key ]; then + if [ -f /etc/ssh/ssh_host_rsa_key ]; then echo "You already have a RSA host key" \ - "in ${etcdir}/ssh/ssh_host_rsa_key" + "in /etc/ssh/ssh_host_rsa_key" echo "Skipping protocol version 2 RSA Key Generation" else - ${prefix}/bin/ssh-keygen -t rsa -f ${etcdir}/ssh/ssh_host_rsa_key -N '' + /usr/bin/ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N '' fi ) } sshd_precmd() { - if [ ! -f ${etcdir}/ssh/ssh_host_key -o \ - ! -f ${etcdir}/ssh/ssh_host_dsa_key -o \ - ! -f ${etcdir}/ssh/ssh_host_rsa_key ]; then + if [ ! -f /etc/ssh/ssh_host_key -o \ + ! -f /etc/ssh/ssh_host_dsa_key -o \ + ! -f /etc/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 3a2fd167216c..36144cdd9bee 100644 --- a/etc/rc.subr +++ b/etc/rc.subr @@ -506,6 +506,9 @@ run_rc_command() ;; esac + eval _override_command=\$${name}_program + command=${command:+${_override_command:-$command}} + _keywords="start stop restart rcvar $extra_commands" rc_pid= _pidcmd= @@ -873,8 +876,6 @@ run_rc_script() # load_rc_config() { - local _tmp - _name=$1 if [ -z "$_name" ]; then err 3 'USAGE: load_rc_config name' @@ -893,35 +894,9 @@ load_rc_config() fi _rc_conf_loaded=true fi - - 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 + if [ -f /etc/rc.conf.d/"$_name" ]; 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} ]; then - 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} + . /etc/rc.conf.d/"$_name" fi # XXX - Deprecated variable name support diff --git a/share/man/man8/rc.subr.8 b/share/man/man8/rc.subr.8 index f6441eaecbca..3bec150ae5bb 100644 --- a/share/man/man8/rc.subr.8 +++ b/share/man/man8/rc.subr.8 @@ -332,38 +332,12 @@ which is not always the case. Source in the configuration files for .Ar name . First, -.Pa /etc/defaults/rc.conf -and .Pa /etc/rc.conf -are sourced if they have not yet been read in. +is sourced if it has not yet been read in. Then, -.Va etcdir -is set to -.Pa /etc -if -.Va command Ap s -prefix (or -.Va ${name} Ns Va _program Ap s -if it is defined) is -.Pa / -or -.Pa /usr , -otherwise -.Va etcdir -is set to -.Pa ${prefix} Ns Pa /etc . -Once those variables are set accordingly, -.Pa /etc/rc.conf.d/ Ns Va ${name} -is sourced if the file exists (but it is deprecated if -.Va etcdir -is different than -.Pa /etc ) -and then -.Pa ${etcdir} Ns Pa /defaults/ Ns Va ${name} -and -.Va ${etcdir} Ns Pa /rc.conf.d/ Ns Va ${name} -are sourced if these files exist. -All these files may also contain other variable assignments to override +.Pa /etc/rc.conf.d/ Ns Ar name +is sourced if it is an existing file. +The latter may also contain other variable assignments to override .Ic run_rc_command arguments defined by the calling script, to provide an easy mechanism for an administrator to override the behaviour of a given