Third iteration, after input from ajacoutot@, todd@ and marc@.
Now rc_restart becomes unavailable if either start or stop is disabled.
Index: rc.subr
===================================================================
RCS file: /cvs/src/etc/rc.d/rc.subr,v
retrieving revision 1.68
diff -u -p -r1.68 rc.subr
--- rc.subr 19 Nov 2012 07:10:59 -0000 1.68
+++ rc.subr 3 Apr 2013 17:55:00 -0000
@@ -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