Ensure that the become password is written on py3 in the ssh connection plugin. Fixes #34727

(cherry picked from commit 29c1d5cb5d)
This commit is contained in:
Matt Martz 2018-01-18 09:28:25 -06:00 committed by Toshio Kuratomi
parent 794c531158
commit fb9e7a85b3
2 changed files with 4 additions and 0 deletions

View file

@ -758,6 +758,9 @@ class Connection(ConnectionBase):
if self._flags['become_prompt']: if self._flags['become_prompt']:
display.debug('Sending become_pass in response to prompt') display.debug('Sending become_pass in response to prompt')
stdin.write(to_bytes(self._play_context.become_pass) + b'\n') stdin.write(to_bytes(self._play_context.become_pass) + b'\n')
# On python3 stdin is a BufferedWriter, and we don't have a guarantee
# that the write will happen without a flush
stdin.flush()
self._flags['become_prompt'] = False self._flags['become_prompt'] = False
state += 1 state += 1
elif self._flags['become_success']: elif self._flags['become_success']:

View file

@ -457,6 +457,7 @@ class TestSSHConnectionRun(object):
self.mock_selector.get_map.side_effect = lambda: True self.mock_selector.get_map.side_effect = lambda: True
return_code, b_stdout, b_stderr = self.conn._run("ssh", "this is input data") return_code, b_stdout, b_stderr = self.conn._run("ssh", "this is input data")
self.mock_popen_res.stdin.flush.assert_called_once_with()
assert return_code == 0 assert return_code == 0
assert b_stdout == b'abc' assert b_stdout == b'abc'
assert b_stderr == b'123' assert b_stderr == b'123'