diff options
author | Luke Shumaker <lukeshu@lukeshu.com> | 2018-08-14 16:19:07 -0400 |
---|---|---|
committer | Luke Shumaker <lukeshu@lukeshu.com> | 2018-08-14 16:19:07 -0400 |
commit | 291bd36a621fc7f5c4569cd0205e3e5da775ee96 (patch) | |
tree | 594e72f2ee9516c0e7e1d25f410e4d0d989109d4 | |
parent | 7d6a5fdf70f8a1951834a40cb6e6c72e7ff6c155 (diff) |
getopt doesn't safely "roundtrip" flags with an optional argument
-rwxr-xr-x | osi-mk | 6 | ||||
-rwxr-xr-x | osi-mount | 6 | ||||
-rwxr-xr-x | osi-run | 3 |
3 files changed, 7 insertions, 8 deletions
@@ -70,6 +70,7 @@ osi-mk:grub-install() { } main() { + local arg_orig=("$@") local arg_mode=outside local arg_mountpoint= local arg_size=1G @@ -84,8 +85,7 @@ main() { if ! args="$(getopt -n "${0##*/}" -o "s:e::d:m:p:hV" -l "inside:,size:,edit::,directory:,module:,package:,help,version" -- "$@")"; then arg_mode=error else - eval "args=($args)" - set -- "${args[@]}" + eval "set -- $args" while true; do case "$1" in --inside) shift; arg_mode=inside; arg_mountpoint=$1; shift;; @@ -182,7 +182,7 @@ main() { arg_mountpoint=$(mktemp -dt -- "${0##*/}.XXXXXXXXXX") # shellcheck disable=SC2064 trap "rmdir -- ${arg_mountpoint@Q}" EXIT - sudo -- ./osi-mount --root -- "$arg_file" "$arg_mountpoint" "${BASH_SOURCE[0]}" --inside="$arg_mountpoint" "${args[@]}" + sudo -- ./osi-mount --root -- "$arg_file" "$arg_mountpoint" "${BASH_SOURCE[0]}" --inside="$arg_mountpoint" "${arg_orig[@]}" ;; inside) # just keep reading... needs_sudo @@ -9,14 +9,14 @@ source "${BASH_SOURCE[0]%/*}/lib/osi.sh" main() { needs_root + local arg_orig=("$@") local arg_mode=outside local arg_user= local args if ! args="$(getopt -n "${0##*/}" -o hV -l inside:,user,root,help,version -- "$@")"; then arg_mode=error else - eval "args=($args)" - set -- "${args[@]}" + eval "set -- $args" while true; do case "$1" in --inside) shift; arg_mode=$1; shift;; @@ -79,7 +79,7 @@ main() { printf '%s\n' "$out" exit 1 fi - unshare --mount "${BASH_SOURCE[0]}" --inside="$arg_user" "${args[@]}" + unshare --mount "${BASH_SOURCE[0]}" --inside="$arg_user" "${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" @@ -21,8 +21,7 @@ main() { if ! args="$(getopt -n "${0##*/}" -o hV -l help,version -- "$@")"; then arg_mode=error else - eval "args=($args)" - set -- "${args[@]}" + eval "set -- $args" while true; do case "$1" in -V|--version) shift; arg_mode=version;; |