diff options
Diffstat (limited to 'etc/rc.d')
-rw-r--r-- | etc/rc.d/rc.subr | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/etc/rc.d/rc.subr b/etc/rc.d/rc.subr index e61ca53e0f8..040a0e93eb2 100644 --- a/etc/rc.d/rc.subr +++ b/etc/rc.d/rc.subr @@ -1,4 +1,4 @@ -# $OpenBSD: rc.subr,v 1.68 2012/11/19 07:10:59 ajacoutot Exp $ +# $OpenBSD: rc.subr,v 1.69 2013/04/04 06:50:44 zhuk Exp $ # # Copyright (c) 2010, 2011 Antoine Jacoutot <ajacoutot@openbsd.org> # Copyright (c) 2010, 2011 Ingo Schwarze <schwarze@openbsd.org> @@ -24,8 +24,18 @@ rc_err() { exit 1 } +rc_is_supported() { + local _enotsup + eval _enotsup=\${rc_$1} + [ X"${_enotsup}" != X"NO" ] +} + rc_usage() { - rc_err "usage: $0 [-df] {start|check|reload|restart|stop}" + local _a _allsup + for _a in start stop restart reload check; do + rc_is_supported ${_a} && _allsup="${_allsup:+$_allsup|}${_a}" + done + rc_err "usage: $0 [-df] (${_allsup})" } rc_write_runfile() { @@ -95,14 +105,17 @@ rc_wait() { } rc_cmd() { - local _bg _enotsup _n + local _bg _n [ "$(id -u)" -eq 0 ] || \ [ X"${rc_usercheck}" != X"NO" -a X"$1" = "Xcheck" ] || \ rc_err "$0: need root privileges" - eval _enotsup=\${rc_${1}} - if [ X"${_enotsup}" = X"NO" ]; then + if ! (rc_is_supported start && rc_is_supported stop); then + rc_restart=NO + fi + + if ! rc_is_supported $1; then [ -n "${INRC}" ] && exit 1 rc_err "$0: $1 is not supported" fi |