From bc6483c96a98a34d0965b4b51c54ac086fec686b Mon Sep 17 00:00:00 2001 From: Toshio Kuratomi Date: Thu, 5 Oct 2017 10:18:13 -0700 Subject: [PATCH] Revert "enable run_command to use non /bin/sh shells" This breaks output from commands in current playbooks. Since this change fixed a smaller use case we're going to revert this for 2.4.1 and revisit a different fix for non /bin/sh shells for 2.5.x This reverts commit 55135c0825f12db92ad02df1c493a7d0d4bcfaa8. --- lib/ansible/module_utils/basic.py | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/lib/ansible/module_utils/basic.py b/lib/ansible/module_utils/basic.py index 2852b238031..264152d0b34 100644 --- a/lib/ansible/module_utils/basic.py +++ b/lib/ansible/module_utils/basic.py @@ -2601,33 +2601,25 @@ class AnsibleModule(object): strings on python3, use encoding=None to turn decoding to text off. ''' + shell = False if isinstance(args, list): if use_unsafe_shell: - args = " ".join([pipes.quote(x) for x in args]) + args = " ".join([shlex_quote(x) for x in args]) shell = True elif isinstance(args, (binary_type, text_type)) and use_unsafe_shell: shell = True elif isinstance(args, (binary_type, text_type)): - if not use_unsafe_shell: - # On python2.6 and below, shlex has problems with text type - # On python3, shlex needs a text type. - if PY2: - args = to_bytes(args, errors='surrogate_or_strict') - elif PY3: - args = to_text(args, errors='surrogateescape') - args = shlex.split(args) + # On python2.6 and below, shlex has problems with text type + # On python3, shlex needs a text type. + if PY2: + args = to_bytes(args, errors='surrogate_or_strict') + elif PY3: + args = to_text(args, errors='surrogateescape') + args = shlex.split(args) else: msg = "Argument 'args' to run_command must be list or string" self.fail_json(rc=257, cmd=args, msg=msg) - shell = False - if use_unsafe_shell: - executable = os.environ.get('SHELL') - if executable: - args = [executable, '-c', args] - else: - shell = True - prompt_re = None if prompt_regex: if isinstance(prompt_regex, text_type):