aboutsummaryrefslogtreecommitdiff
path: root/usr.sbin
diff options
context:
space:
mode:
authorKyle Evans <kevans@FreeBSD.org>2018-01-22 03:38:10 +0000
committerKyle Evans <kevans@FreeBSD.org>2018-01-22 03:38:10 +0000
commitd5b15ddbfc55578099b5b8ac7accdb1f1fbd6dff (patch)
tree86c909cd163396d611b4b0d4be09457634f75d8e /usr.sbin
parentdf1043c2017ea1d9f9b9690d32a80a7eec13c523 (diff)
Notes
Diffstat (limited to 'usr.sbin')
-rwxr-xr-xusr.sbin/service/service.sh50
1 files changed, 18 insertions, 32 deletions
diff --git a/usr.sbin/service/service.sh b/usr.sbin/service/service.sh
index ccc092828c7b..1927bc4629aa 100755
--- a/usr.sbin/service/service.sh
+++ b/usr.sbin/service/service.sh
@@ -49,39 +49,9 @@ usage () {
echo ''
}
-accepted_argstr='jehlrRv'
-
-# Only deal with the -j option here. If found, JAIL is set and the opt and
-# arg are shifted out. OPTIND is left untouched. We strip the -j option out
-# here because we'll be proxying this invocation through to the jail via
-# jls(8) instead of handling it ourselves.
-while getopts ${accepted_argstr} COMMAND_LINE_ARGUMENT ; do
- case "${COMMAND_LINE_ARGUMENT}" in
- j) JAIL="$2" ; shift ; shift ;;
- esac
-done
-
-# If -j was provided, then we pass everthing along to the jexec command
-# and execute `service` within the named JAIL. Provided that the jail
-# actually exists, as checked by `jls`.
-# We do this so that if the jail does exist, we can then return the exit
-# code of `jexec` and it should be the exit code of whatever ran in the jail.
-# There is a race condition here in that the jail might exist at `jls` time
-# and be gone by `jexec` time, but it shouldn't be a big deal.
-if [ -n "$JAIL" ]; then
- /usr/sbin/jls -j "$JAIL" 2>/dev/null >/dev/null
- if [ $? -ne 0 ]; then
- echo "Jail '$JAIL' does not exist."
- exit 1
- fi
-
- /usr/sbin/jexec -l "$JAIL" /usr/sbin/service $*
- exit $?
-fi
-
-OPTIND=1
-while getopts ${accepted_argstr} COMMAND_LINE_ARGUMENT ; do
+while getopts 'j:ehlrRv' COMMAND_LINE_ARGUMENT ; do
case "${COMMAND_LINE_ARGUMENT}" in
+ j) JAIL="${OPTARG}" ;;
e) ENABLED=eopt ;;
h) usage ; exit 0 ;;
l) LIST=lopt ;;
@@ -93,6 +63,22 @@ while getopts ${accepted_argstr} COMMAND_LINE_ARGUMENT ; do
done
shift $(( $OPTIND - 1 ))
+if [ -n "${JAIL}" ]; then
+ # We need to rebuild the command line before passing it on.
+ # We do not send the -j argument into the jail.
+ args=""
+ [ -n "${ENABLED}" ] && args="${args} -e"
+ [ -n "${LIST}" ] && args="${args} -l"
+ [ -n "${RCORDER}" ] && args="${args} -r"
+ [ -n "${RESTART}" ] && args="${args} -R"
+ [ -n "${VERBOSE}" ] && args="${args} -v"
+
+ # Call jexec(8) with the rebuild args and any positional args that
+ # were left in $@
+ /usr/sbin/jexec -l "${JAIL}" /usr/sbin/service $args "$@"
+ exit $?
+fi
+
if [ -n "$RESTART" ]; then
skip="-s nostart"
if [ `/sbin/sysctl -n security.jail.jailed` -eq 1 ]; then