diff options
author | Luke Shumaker <lukeshu@lukeshu.com> | 2018-08-14 16:54:09 -0400 |
---|---|---|
committer | Luke Shumaker <lukeshu@lukeshu.com> | 2018-08-14 16:54:09 -0400 |
commit | d4bbf0e2a40bcacd4b8325f0008ae2772bd1299c (patch) | |
tree | 4bb622a9b7d2736cd882c7c04c3ad631e1507ab9 | |
parent | 4731f00bf080d5daf8cd6bfa4740ced6d6a0753a (diff) |
osi-mount: Fixup option parsing
-rwxr-xr-x | osi-mount | 22 |
1 files changed, 13 insertions, 9 deletions
@@ -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 |