Fix piped transfer with become (#34584)

* Ignore become if we shouldn't be sudoable

* More explicit passing of kwargs

* dd/piped put should be sudoable=False. Fixes #34523
This commit is contained in:
Matt Martz 2018-01-09 09:32:27 -06:00 committed by GitHub
parent fbe46c5e21
commit 03794864c2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -663,7 +663,7 @@ class Connection(ConnectionBase):
# only when using ssh. Otherwise we can send initial data straightaway.
state = states.index('ready_to_send')
if b'ssh' in cmd:
if b'ssh' in cmd and sudoable:
if self._play_context.prompt:
# We're requesting escalation with a password, so we have to
# wait for a password prompt.
@ -872,7 +872,7 @@ class Connection(ConnectionBase):
def _run(self, cmd, in_data, sudoable=True, checkrc=True):
"""Wrapper around _bare_run that retries the connection
"""
return self._bare_run(cmd, in_data, sudoable, checkrc)
return self._bare_run(cmd, in_data, sudoable=sudoable, checkrc=checkrc)
@_ssh_retry
def _file_transport_command(self, in_path, out_path, sftp_action):
@ -933,7 +933,7 @@ class Connection(ConnectionBase):
else:
in_data = open(to_bytes(in_path, errors='surrogate_or_strict'), 'rb').read()
in_data = to_bytes(in_data, nonstring='passthru')
(returncode, stdout, stderr) = self.exec_command('dd of=%s bs=%s' % (out_path, BUFSIZE), in_data=in_data)
(returncode, stdout, stderr) = self.exec_command('dd of=%s bs=%s' % (out_path, BUFSIZE), in_data=in_data, sudoable=False)
# Check the return code and rollover to next method if failed
if returncode == 0: