From 77d0effcc5b2da1ef23e4ba32986a9759c27c10d Mon Sep 17 00:00:00 2001 From: Brian Kohles Date: Mon, 20 Jul 2020 09:25:29 -0700 Subject: [PATCH] Fix missing quoting for remote_tmp in second mkdir of shell module. Issue #69577 (#69578) * Fix missing quoting for remote_tmp in second mkdir of shell module. Issue #69577 * adding changelog * fixing typo in changelog entry * adding test case Adding test case written by bmillemayhias. * using $HOME instead of ~ * fixing commit measage * Update 69578-shell-remote_tmp-quoting.yaml Co-authored-by: Brian Kohles --- changelogs/fragments/69578-shell-remote_tmp-quoting.yaml | 2 ++ lib/ansible/plugins/shell/__init__.py | 2 +- test/integration/targets/config/runme.sh | 5 +++++ 3 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 changelogs/fragments/69578-shell-remote_tmp-quoting.yaml diff --git a/changelogs/fragments/69578-shell-remote_tmp-quoting.yaml b/changelogs/fragments/69578-shell-remote_tmp-quoting.yaml new file mode 100644 index 00000000000..b545dc64266 --- /dev/null +++ b/changelogs/fragments/69578-shell-remote_tmp-quoting.yaml @@ -0,0 +1,2 @@ +bugfixes: + - shell - fix quoting of mkdir command in creation of remote_tmp in order to allow spaces and other special characters (https://github.com/ansible/ansible/issues/69577). diff --git a/lib/ansible/plugins/shell/__init__.py b/lib/ansible/plugins/shell/__init__.py index 3db3bcc5322..8aeab292abc 100644 --- a/lib/ansible/plugins/shell/__init__.py +++ b/lib/ansible/plugins/shell/__init__.py @@ -164,7 +164,7 @@ class ShellBase(AnsiblePlugin): # use mkdir -p to ensure parents exist, but mkdir fullpath to ensure last one is created by us cmd = 'mkdir -p %s echo %s %s' % (self._SHELL_SUB_LEFT, basetmpdir, self._SHELL_SUB_RIGHT) - cmd += '%s mkdir %s' % (self._SHELL_AND, basetmp) + cmd += '%s mkdir %s echo %s %s' % (self._SHELL_AND, self._SHELL_SUB_LEFT, basetmp, self._SHELL_SUB_RIGHT) cmd += ' %s echo %s=%s echo %s %s' % (self._SHELL_AND, basefile, self._SHELL_SUB_LEFT, basetmp, self._SHELL_SUB_RIGHT) # change the umask in a subshell to achieve the desired mode diff --git a/test/integration/targets/config/runme.sh b/test/integration/targets/config/runme.sh index 068eed0c9a9..c7fe01420c7 100755 --- a/test/integration/targets/config/runme.sh +++ b/test/integration/targets/config/runme.sh @@ -8,3 +8,8 @@ ANSIBLE_TIMEOUT= ansible -m ping testhost -i ../../inventory "$@" # env var is wrong type, this should be a fatal error pointing at the setting ANSIBLE_TIMEOUT='lola' ansible -m ping testhost -i ../../inventory "$@" 2>&1|grep 'Invalid type for configuration option setting: DEFAULT_TIMEOUT' + +# https://github.com/ansible/ansible/issues/69577 +ANSIBLE_REMOTE_TMP="$HOME/.ansible/directory_with_no_space" ansible -m ping testhost -i ../../inventory "$@" + +ANSIBLE_REMOTE_TMP="$HOME/.ansible/directory with space" ansible -m ping testhost -i ../../inventory "$@" \ No newline at end of file