summaryrefslogtreecommitdiffstats
path: root/usr.sbin/rcctl
diff options
context:
space:
mode:
authorajacoutot <ajacoutot@openbsd.org>2015-10-04 13:38:11 +0000
committerajacoutot <ajacoutot@openbsd.org>2015-10-04 13:38:11 +0000
commit3d68e2e68f1addfe5af1f435afe565c0aadf79e0 (patch)
treeccb0a30e72915b0fb48b043791f83ae90d0f849e /usr.sbin/rcctl
parenta macmini has no light sensor, but reading from light sensor keys is (diff)
downloadwireguard-openbsd-3d68e2e68f1addfe5af1f435afe565c0aadf79e0.tar.xz
wireguard-openbsd-3d68e2e68f1addfe5af1f435afe565c0aadf79e0.zip
Make it possible to give the same action to several daemons at once.
e.g. # rcctl restart sshd ntpd from Martijn van Duren with tweaks ok sthen@
Diffstat (limited to 'usr.sbin/rcctl')
-rw-r--r--usr.sbin/rcctl/rcctl.sh115
1 files changed, 72 insertions, 43 deletions
diff --git a/usr.sbin/rcctl/rcctl.sh b/usr.sbin/rcctl/rcctl.sh
index be4ff1b4317..502fefee404 100644
--- a/usr.sbin/rcctl/rcctl.sh
+++ b/usr.sbin/rcctl/rcctl.sh
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# $OpenBSD: rcctl.sh,v 1.80 2015/10/03 10:39:21 ajacoutot Exp $
+# $OpenBSD: rcctl.sh,v 1.81 2015/10/04 13:38:11 ajacoutot Exp $
#
# Copyright (c) 2014, 2015 Antoine Jacoutot <ajacoutot@openbsd.org>
# Copyright (c) 2014 Ingo Schwarze <schwarze@openbsd.org>
@@ -424,52 +424,78 @@ shift $((OPTIND-1))
[ $# -gt 0 ] || usage
action=$1
-if [ "${action}" = "ls" ]; then
- lsarg=$2
- [[ ${lsarg} == @(all|faulty|off|on|started|stopped) ]] || usage
-elif [ "${action}" = "order" ]; then
- shift 1
- svcs="$*"
-else
- svc=$2
- var=$3
- [ $# -ge 3 ] && shift 3 || shift $#
- args="$*"
-fi
-
-if [ -n "${svc}" ]; then
- [[ ${action} == @(disable|enable|get|getdef|set|start|stop|restart|reload|check) ]] || \
- usage
- svc_is_avail ${svc} || \
- rcctl_err "service ${svc} does not exist" 2
-elif [[ ${action} != @(ls|order) ]] ; then
- usage
-fi
-
-if [ -n "${var}" ]; then
- [[ ${var} != @(class|flags|status|timeout|user) ]] && usage
- [[ ${action} == set && ${var} = flags && ${args} = NO ]] && \
- rcctl_err "\"flags NO\" contradicts \"${action}\""
- [[ ${action} == set && ${var} == class ]] && \
- rcctl_err "\"${svc}_class\" is a read-only variable set in login.conf(5)"
- if svc_is_special ${svc}; then
- if [[ ${action} == set && ${var} != status ]] || \
- [[ ${action} == @(get|getdef) && ${var} == @(class|timeout|user) ]]; then
- rcctl_err "\"${svc}\" is a special variable, cannot \"${action} ${svc} ${var}\""
+ret=0
+
+case ${action} in
+ ls)
+ lsarg=$2
+ [[ ${lsarg} == @(all|faulty|off|on|started|stopped) ]] || usage
+ ;;
+ order)
+ shift 1
+ svcs="$*"
+ ;;
+ # enable|disable: undocumented, deprecated
+ disable|enable|start|stop|restart|reload|check)
+ shift 1
+ svcs="$*"
+ [ -z "${svcs}" ] && usage
+ for svc in ${svcs}; do
+ svc_is_avail ${svc} || \
+ rcctl_err "service ${svc} does not exist" 2
+ done
+ ;;
+ get|getdef)
+ svc=$2
+ var=$3
+ [ -z "${svc}" ] && usage
+ svc_is_avail ${svc} || \
+ rcctl_err "service ${svc} does not exist" 2
+ if [ -n "${var}" ]; then
+ [[ ${var} != @(class|flags|status|timeout|user) ]] && usage
+ if svc_is_special ${svc}; then
+ [[ ${var} == @(class|timeout|user) ]] && \
+ rcctl_err "\"${svc}\" is a special variable, cannot \"${action} ${svc} ${var}\""
+ fi
fi
- fi
-elif [ ${action} = "set" ]; then
- usage
-fi
+ ;;
+ set)
+ svc=$2
+ var=$3
+ [ $# -ge 3 ] && shift 3 || shift $#
+ args="$*"
+ [ -z "${svc}" ] && usage
+ svc_is_avail ${svc} || \
+ rcctl_err "service ${svc} does not exist" 2
+ [[ ${var} != @(class|flags|status|timeout|user) ]] && usage
+ [[ ${var} = flags && ${args} = NO ]] && \
+ rcctl_err "\"flags NO\" contradicts \"${action}\""
+ if svc_is_special ${svc}; then
+ [[ ${var} != status ]] && \
+ rcctl_err "\"${svc}\" is a special variable, cannot \"${action} ${svc} ${var}\""
+ fi
+ [[ ${var} == class ]] && \
+ rcctl_err "\"${svc}_class\" is a read-only variable set in login.conf(5)"
+ ;;
+ *)
+ usage
+ ;;
+esac
case ${action} in
disable) # undocumented, deprecated
needs_root ${action}
- svc_set ${svc} status off
+ for svc in ${svcs}; do
+ svc_set ${svc} status off || ret=$?;
+ done
+ exit ${ret}
;;
enable) # undocumented, deprecated
needs_root ${action}
- svc_set ${svc} status on
+ for svc in ${svcs}; do
+ svc_set ${svc} status on || ret=$?;
+ done
+ exit ${ret}
;;
get)
svc_get ${svc} "${var}"
@@ -495,10 +521,13 @@ case ${action} in
svc_set ${svc} "${var}" "${args}"
;;
start|stop|restart|reload|check)
- if svc_is_special ${svc}; then
- rcctl_err "\"${svc}\" is a special variable, no rc.d(8) script"
- fi
- /etc/rc.d/${svc} ${_RC_DEBUG} ${_RC_FORCE} ${action}
+ for svc in ${svcs}; do
+ if svc_is_special ${svc}; then
+ rcctl_err "\"${svc}\" is a special variable, no rc.d(8) script"
+ fi
+ /etc/rc.d/${svc} ${_RC_DEBUG} ${_RC_FORCE} ${action} || ret=$?;
+ done
+ exit ${ret}
;;
*)
usage