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=$?
|
exit_code=$?
|
||||||
set +f
|
set +f
|
||||||
else
|
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
|
set -f
|
||||||
$0 "${ssh_arg_array[@]}"
|
$0 "${ssh_arg_array[@]}"
|
||||||
exit_code=$?
|
exit_code=$?
|
||||||
|
|||||||
@@ -37,6 +37,14 @@ teardown() {
|
|||||||
assert_success
|
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)" {
|
@test "(core) urls (non-ssl)" {
|
||||||
assert_urls "http://${TEST_APP}.${DOKKU_DOMAIN}"
|
assert_urls "http://${TEST_APP}.${DOKKU_DOMAIN}"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user