Mirror of mitogen
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
Go to file
Alex Willmer 85d6046f2f mitogen: Fix non-blocking IO errors in first stage of bootstrap
When /etc/sudoers has log_output (or similar) enabled the process spawned by
`ctx.sudo()` via `mitogen.parent.Connection.start_child()` receives a stdin
that is in non-blocking mode. The immediate symptom is that `os.openfd(0,
...).read(n)` sometimes returns `None`, causing the first stage to raise an
unhandled TypeError.

The fix (for now) is to use `select.select()` in a while loop to read stdin.
This increases the command size slightly, but I think it's a reasonable
tradeoff until/unless the cause is more fully understood.

All CI tests are now run with sudoers log_output enabled, in order to catch
regressions. `first_stage_test.CommandLineTest` has been amended, because it
relied on implementation details of the bootstrap process that are no longer
true.

Before
```
SSH command size: 755
Preamble (mitogen.core + econtext) size: 18227 (17.80KiB)

                        Original           Minimized           Compressed
mitogen.core         152218 148.7KiB  68437 66.8KiB 45.0%  18124 17.7KiB 11.9%
mitogen.parent        98853  96.5KiB  51103 49.9KiB 51.7%  12881 12.6KiB 13.0%
mitogen.fork           8445   8.2KiB   4139  4.0KiB 49.0%   1652  1.6KiB 19.6%
mitogen.ssh           10827  10.6KiB   6893  6.7KiB 63.7%   2099  2.0KiB 19.4%
mitogen.sudo          12089  11.8KiB   5924  5.8KiB 49.0%   2249  2.2KiB 18.6%
mitogen.select        12325  12.0KiB   2929  2.9KiB 23.8%    964  0.9KiB  7.8%
mitogen.service       41581  40.6KiB  22398 21.9KiB 53.9%   5847  5.7KiB 14.1%
mitogen.fakessh       15767  15.4KiB   8149  8.0KiB 51.7%   2676  2.6KiB 17.0%
mitogen.master        55317  54.0KiB  28846 28.2KiB 52.1%   7528  7.4KiB 13.6%
```

After
```
SSH command size: 798
Preamble (mitogen.core + econtext) size: 18227 (17.80KiB)

                        Original           Minimized           Compressed
mitogen.core         152218 148.7KiB  68437 66.8KiB 45.0%  18124 17.7KiB 11.9%
mitogen.parent        98944  96.6KiB  51180 50.0KiB 51.7%  12910 12.6KiB 13.0%
mitogen.fork           8445   8.2KiB   4139  4.0KiB 49.0%   1652  1.6KiB 19.6%
mitogen.ssh           10827  10.6KiB   6893  6.7KiB 63.7%   2099  2.0KiB 19.4%
mitogen.sudo          12089  11.8KiB   5924  5.8KiB 49.0%   2249  2.2KiB 18.6%
mitogen.select        12325  12.0KiB   2929  2.9KiB 23.8%    964  0.9KiB  7.8%
mitogen.service       41581  40.6KiB  22398 21.9KiB 53.9%   5847  5.7KiB 14.1%
mitogen.fakessh       15767  15.4KiB   8149  8.0KiB 51.7%   2676  2.6KiB 17.0%
mitogen.master        55317  54.0KiB  28846 28.2KiB 52.1%   7528  7.4KiB 13.6%
```
4 months ago
.ci mitogen: Fix non-blocking IO errors in first stage of bootstrap 4 months ago
.github CI: Combine build deps & tooling steps 4 months ago
ansible_mitogen mitogen: Refactor scan_code_imports() as mitogen.imports.codeobj_imports() 4 months ago
docs mitogen: Fix non-blocking IO errors in first stage of bootstrap 4 months ago
examples Remove get_password_hash, unused 1 year ago
mitogen mitogen: Fix non-blocking IO errors in first stage of bootstrap 4 months ago
scripts add Python3 compatibility 2 years ago
tests mitogen: Fix non-blocking IO errors in first stage of bootstrap 4 months ago
.gitignore chore: Ignore locally installed collections, dummy modules, etc 7 months ago
.lgtm.yml Whoops, merge together lgtm.yml and .lgtm.yml 6 years ago
LICENSE Bump copyright year and use generic author name (testing Travis) 5 years ago
MANIFEST.in setup.py: include LICENSE; closes #538. 7 years ago
README.md docs: shields.io badges for PyPI version & supported Python versions 1 year ago
dev_requirements.txt Split dev_requirements.txt up according to test mode. 7 years ago
netlify.toml docs: Attempt to configure Netlify build of mitogen.networkgenomics.com 12 months ago
preamble_size.py preamble_size: Fix variability of command & preamble(?) size 4 months ago
run_tests tests: Remove unittest2, use stdlib unittest 4 years ago
setup.cfg Keep comatibility with `setuptools` tagging wheels with `py2.py3` 6 months ago
setup.py packaging: Handle pre-release __version__ tuples 7 months ago
tox.ini CI: Abbreviate Github Actions job names 5 months ago

README.md