summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2018-08-14 16:54:09 -0400
committerLuke Shumaker <lukeshu@lukeshu.com>2018-08-14 16:54:09 -0400
commitd4bbf0e2a40bcacd4b8325f0008ae2772bd1299c (patch)
tree4bb622a9b7d2736cd882c7c04c3ad631e1507ab9
parent4731f00bf080d5daf8cd6bfa4740ced6d6a0753a (diff)
osi-mount: Fixup option parsing
-rwxr-xr-xosi-mount22
1 files changed, 13 insertions, 9 deletions
diff --git a/osi-mount b/osi-mount
index 42612d8..ded5a65 100755
--- a/osi-mount
+++ b/osi-mount
@@ -13,13 +13,13 @@ main() {
local arg_mode=outside
local arg_user=
local args
- if ! args="$(getopt -n "${0##*/}" -o hV -l inside:,user,root,help,version -- "$@")"; then
+ if ! args="$(getopt -n "${0##*/}" -o hV -l inside,user,root,help,version -- "$@")"; then
arg_mode=error
else
eval "set -- $args"
while true; do
case "$1" in
- --inside) shift; arg_mode=$1; shift;;
+ --inside) shift; arg_mode=inside;;
--user|--root)
if [[ -n $arg_user ]]; then
error 0 "Multiple --user/--root flags given"
@@ -48,10 +48,14 @@ main() {
fi
;;
esac
+ case "$arg_mode" in
+ outside|inside)
+ arg_device=$1
+ arg_mountpoint=$2
+ arg_cmd=("${@:3}")
+ ;;
+ esac
fi
- arg_device=$1
- arg_mountpoint=$2
- arg_cmd=("${@:3}")
case "$arg_mode" in
error) print "Try '%q --help' for more information" "${0##*/}" >&2; return 2;;
@@ -79,17 +83,17 @@ main() {
printf '%s\n' "$out"
exit 1
fi
- unshare --mount "${BASH_SOURCE[0]}" --inside="$arg_user" "${arg_orig[@]}"
+ unshare --mount "${BASH_SOURCE[0]}" --inside "${arg_orig[@]}"
if out="$(losetup --associated "$arg_device")" && [[ -n $out ]]; then
error 0 "umount'ed, but file is still associated with a loop device: %s" "$arg_device"
printf '%s\n' "$out"
exit 1
fi
;;
- user|root)
+ inside)
needs_sudo
mount --make-rslave /
- case "$arg_mode" in
+ case "$arg_user" in
user)
mount_opt=ro
losetup_flags=(--read-only)
@@ -109,7 +113,7 @@ main() {
fi
trap "umount --no-mtab -- ${arg_mountpoint@Q}" EXIT
- case "$arg_mode" in
+ case "$arg_user" in
user) sudo -u "#${SUDO_UID}" -- "${arg_cmd[@]}";;
root) command -- "${arg_cmd[@]}";;
esac