summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2018-08-14 16:19:07 -0400
committerLuke Shumaker <lukeshu@lukeshu.com>2018-08-14 16:19:07 -0400
commit291bd36a621fc7f5c4569cd0205e3e5da775ee96 (patch)
tree594e72f2ee9516c0e7e1d25f410e4d0d989109d4
parent7d6a5fdf70f8a1951834a40cb6e6c72e7ff6c155 (diff)
getopt doesn't safely "roundtrip" flags with an optional argument
-rwxr-xr-xosi-mk6
-rwxr-xr-xosi-mount6
-rwxr-xr-xosi-run3
3 files changed, 7 insertions, 8 deletions
diff --git a/osi-mk b/osi-mk
index 4fdd3e3..6910b0f 100755
--- a/osi-mk
+++ b/osi-mk
@@ -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
diff --git a/osi-mount b/osi-mount
index a0a9e75..42612d8 100755
--- a/osi-mount
+++ b/osi-mount
@@ -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"
diff --git a/osi-run b/osi-run
index 64be439..c357410 100755
--- a/osi-run
+++ b/osi-run
@@ -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;;