issue #481: add test.

This commit is contained in:
David Wilson 2019-02-10 22:32:57 +00:00
parent fa0c25bb2d
commit 4506c528ca
2 changed files with 18 additions and 4 deletions

View File

@ -8,7 +8,12 @@ import sys
os.environ['ORIGINAL_ARGV'] = json.dumps(sys.argv) os.environ['ORIGINAL_ARGV'] = json.dumps(sys.argv)
os.environ['THIS_IS_STUB_SUDO'] = '1' os.environ['THIS_IS_STUB_SUDO'] = '1'
# This must be a child process and not exec() since Mitogen replaces its stderr if os.environ.get('PREHISTORIC_SUDO'):
# descriptor, causing the last user of the slave PTY to close it, resulting in # issue #481: old versions of sudo did in fact use execve, thus we must
# the master side indicating EIO. # have TTY handle preservation in core.py.
subprocess.check_call(sys.argv[sys.argv.index('--') + 1:]) os.execv(sys.executable, sys.argv[sys.argv.index('--') + 1:])
else:
# This must be a child process and not exec() since Mitogen replaces its
# stderr descriptor, causing the last user of the slave PTY to close it,
# resulting in the master side indicating EIO.
subprocess.check_call(sys.argv[sys.argv.index('--') + 1:])

View File

@ -55,6 +55,15 @@ class ConstructorTest(testlib.RouterMixin, testlib.TestCase):
'--' '--'
]) ])
def test_tty_preserved(self):
# issue #481
os.environ['PREHISTORIC_SUDO'] = '1'
try:
context, argv = self.run_sudo()
self.assertEquals('1', context.call(os.getenv, 'PREHISTORIC_SUDO'))
finally:
del os.environ['PREHISTORIC_SUDO']
class NonEnglishPromptTest(testlib.DockerMixin, testlib.TestCase): class NonEnglishPromptTest(testlib.DockerMixin, testlib.TestCase):
# Only mitogen/debian-test has a properly configured sudo. # Only mitogen/debian-test has a properly configured sudo.