fix: preserve arguments such as --version and -n when running commands over ssh
xargs without a command runs /bin/echo per word, which interprets --version, --help, -n, -e and -E as its own options. Use printf with a NUL delimiter instead. Closes #9120
This commit is contained in:
2
dokku
2
dokku
@@ -118,7 +118,7 @@ if [[ -n "$SSH_ORIGINAL_COMMAND" ]]; then
|
||||
exit_code=$?
|
||||
set +f
|
||||
else
|
||||
readarray -t -O "${#ssh_arg_array[@]}" ssh_arg_array < <(printf '%s' "$SSH_ORIGINAL_COMMAND" | xargs -n 1)
|
||||
readarray -d '' -O "${#ssh_arg_array[@]}" ssh_arg_array < <(printf '%s' "$SSH_ORIGINAL_COMMAND" | xargs -r printf '%s\0')
|
||||
set -f
|
||||
$0 "${ssh_arg_array[@]}"
|
||||
exit_code=$?
|
||||
|
||||
@@ -37,6 +37,14 @@ teardown() {
|
||||
assert_success
|
||||
}
|
||||
|
||||
@test "(core) ssh arguments are passed through unchanged" {
|
||||
run ssh "dokku@$DOKKU_DOMAIN" fakecommand --version --help -n -e -E
|
||||
echo "output: $output"
|
||||
echo "status: $status"
|
||||
assert_failure
|
||||
assert_output_contains '`fakecommand --version --help -n -e -E` is not a dokku command.'
|
||||
}
|
||||
|
||||
@test "(core) urls (non-ssl)" {
|
||||
assert_urls "http://${TEST_APP}.${DOKKU_DOMAIN}"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user