Follwing fixes in Ansible 7-9 for CVE-2023-5764 cating `AnsibleUnsafeBytes` &
`AnsibleUnsafeText` to `bytes()` or `str()` requires special handling. The
handling is Ansible specific, so it shouldn't go in the mitogen package but
rather the ansible_mitogen package.
`ansible_mitogen.utils.unsafe.cast()` is most like `mitogen.utils.cast()`.
During development it began as `ansible_mitogen.utils.unsafe.unwrap_var()`,
closer to an inverse of `ansible.utils.unsafe_procy.wrap_var()`. Future
enhancements may move in this direction.
refs #977, refs #1046
See also
- https://github.com/advisories/GHSA-7j69-qfc3-2fq9
- https://github.com/ansible/ansible/pull/82293
- https://github.com/mitogen-hq/mitogen/wiki/AnsibleUnsafe-notes
If casting a string fails then raise a TypeError. This is potentially an API
breaking change; chosen as the lesser evil vs. allowing silent errors.
`cast()` relies on `bytes(obj)` & `str(obj)` returning the respective
supertype. That's no longer the case for `AnsibleUnsafeBytes` &
`AnsibleUnsafeText`; since fixes/mitigations for CVE-2023-5764.
fixes#1046, refs #977
See also
- https://github.com/advisories/GHSA-7j69-qfc3-2fq9
- https://github.com/ansible/ansible/pull/82293
* origin/v028: (383 commits)
Bump version for release.
docs: update Changelog for 0.2.8.
issue #627: add test and tweak Reaper behaviour.
docs: lots more changelog concision
docs: changelog concision
docs: more changelog tweaks
docs: reorder chapters
docs: versionless <title>
docs: update supported Ansible version, mention unsupported features
docs: changelog fixes/tweaks
issue #590: update Changelog.
issue #621: send ADD_ROUTE earlier and add test for early logging.
issue #590: whoops, import missing test modules
issue #590: rework ParentEnumerationMethod to recursively handle bad modules
issue #627: reduce the default pool size in a child to 2.
tests: add a few extra service tests.
docs: some more hyperlink joy
docs: more hyperlinks
docs: add domainrefs plugin to make link aliases everywhere \o/
docs: link IS_DEAD in changelog
docs: tweaks to better explain changelog race
issue #533: update routing to account for DEL_ROUTE propagation race
tests: use defer_sync() Rather than defer() + ancient sync_with_broker()
tests: one case from doas_test was invoking su
tests: hide memory-mapped files from lsof output
issue #615: remove meaningless test
issue #625: ignore SIGINT within MuxProcess
issue #625: use exec() instead of subprocess in mitogen_ansible_playbook
issue #615: regression test
issue #615: update Changelog.
issue #615: ensure 4GB max_message_size is configured for task workers.
issue #615: update Changelog.
issue #615: route a dead message to recipients when no reply is expected
issue #615: fetch_file() might be called with AnsibleUnicode.
issue #615: redirect 'fetch' action to 'mitogen_fetch'.
issue #615: extricate slurp brainwrong from mitogen_fetch
issue #615: ansible: import Ansible fetch.py action plug-in
issue #533: include object identity of Stream in repr()
docs: lots more changelog
issue #595: add buildah to docs and changelog.
docs: a few more internals.rst additions
ci: update to Ansible 2.8.3
tests: another random string changed in 2.8.3
tests: fix sudo_flags_failure for Ansible 2.8.3
ci: fix procps command line format warning
Whoops, merge together lgtm.yml and .lgtm.yml
issue #440: log Python version during bootstrap.
docs: update changelog
issue #558: disable test on OSX to cope with boundless mediocrity
issue #558, #582: preserve remote tmpdir if caller did not supply one
issue #613: must await 'exit' and 'disconnect' in wait=False test
Import LGTM config to disable some stuff
Fix up another handful of LGTM errors.
tests: work around AnsibleModule.run_command() race.
docs: mention another __main__ safeguard
docs: tweaks
formatting error
docs: make Sphinx install soft fail on Python 2.
issue #598: allow disabling preempt in terraform
issue #598: update Changelog.
issue #605: update Changelog.
issue #605: ansible: share a sem_t instead of a pthread_mutex_t
issue #613: add tests for all the weird shutdown methods
Add mitogen.core.now() and use it everywhere; closes#614.
docs: move decorator docs into core.py and use autodecorator
preamble_size: make it work on Python 3.
docs: upgrade Sphinx to 2.1.2, require Python 3 to build docs.
docs: fix Sphinx warnings, add LogHandler, more docstrings
docs: tidy up some Changelog text
issue #615: fix up FileService tests for new logic
issue #615: another Py3x fix.
issue #615: Py3x fix.
issue #615: update Changelog.
issue #615: use FileService for target->controll file transfers
issue #482: another Py3 fix
ci: try removing exclude: to make Azure jobs work again
compat: fix Py2.4 SyntaxError
issue #482: remove 'ssh' from checked processes
ci: Py3 fix
issue #279: add one more test for max_message_size
issue #482: ci: add stray process checks to all jobs
tests: fix format string error
core: MitogenProtocol.is_privileged was not set in children
issue #482: tests: fail DockerMixin tests if stray processes exist
docs: update Changelog.
issue #586: update Changelog.
docs: update Changelog.
[security] core: undirectional routing wasn't respected in some cases
docs: tidy up Select.all()
issue #612: update Changelog.
master: fix TypeError
pkgutil: fix Python3 compatibility
parent: use protocol for getting remote_id
docs: merge signals.rst into internals.rst
os_fork: do not attempt to cork the active thread.
parent: fix get_log_level() for split out loggers.
issue #547: fix service_test failures.
issue #547: update Changelog.
issue #547: core/service: race/deadlock-free service pool init
docs: update Changelog.
...
* origin/026:
docs: update Changelog for release.
Bump version for release.
issue #555: ansible: workaround ancient reload(sys) hack.
issue #554: mitogen_action_script fix
issue #554: fix Ansible 2.4 compatibility
issue #554: don't rely on tmp_path autoremoval in test.
issue #554: track and remove multiple make_tmp_path() calls.
docs: update Changelog.
docs: drastically simplify install/changelog.
issue #552: include process identity in log messages.
issue #550: update Changelog.
issue #550: parent: add explanatory comment.
issue #550: fix up TTY ioctls on WSL 2016 Anniversary Update
docs: update Changelog.
service: make service list optional.
docs: update Changelog; closes#548.
issue #548: always treat transport=smart as 'ssh' for mitogen_via=.
docs: better intro paragraph.
.ci: copy private key file to tempdir.
os_fork: more doc tweaks
os_fork: more doc tweaks
os_fork: yet more doc tidyup
os_fork: more doc tweaks
os_fork: clean up docs
.ci: import soak scripts.
.ci: allow containers for different jobs to run simultaneously
os_fork: python 3 fixes and tests.
issue #535: activate Corker on 2.4 in master too.
issue #535: update Changelog.
issue #535: wire mitogen.os_fork into Broker and Pool.
issue #535: parent: add create_socketpair(size=..) parameter.
issue #535: introduce mitogen.os_fork module and Corker class.
issue #535: docs: update Changelog
issue #535: service: support Pool.defer() like Broker.defer()
issue #535: core: unicode.encode() may take importer lock on 2.x
issue #535: docs: fix up Select doc
issue #535: docs: update Changelog.
issue #535: core/select: support selecting from Latches.
core: increase cookie field lengths to 64-bit; closes#545.
tests: ensure serialization restrictions are in effect
tests/bench: set process affinity in throughput.py.
docs: update copyright year.
docs: update Changelog.
core: Make Latch.put(obj=) optional.
docs: change 'unreleased' Changelog format and add a hint.
docs: update Changelog; closes#542.
issue #542: return of select poller, new selection logic
issue #542: .ci: move some tests to Azure and enable Mac job.
ansible: create stub __init__.py for sdist.
* origin/v024: (662 commits)
docs: update Changelog release date.
Bump version for release.
docs: update Changelog; closes#481
issue #481: core: preserve stderr TTY FD if one is present.
issue #481: avoid crash if disconnect occurs during forward_modules()
Add a few more important modules to preamble_size.py.
.ci: add verbiage for run_batches() too.
.ci: add README.md.
docs: update thanks
docs: lose "approaching stability" language, we're pretty good now
docs: fix changelog syntax/order/"20KB"
tests: add new compression parameter to mitogen_get_stack results
tests: disable affinity_test on Travis :/
issue #508: fix responder stats test due to new smaller parent.py.
issue #508: tests: skip minify_test Py2.4/2.5 for profiler.py.
tests: fix fallout from 36fb318adf5c56e729296c3efce84f4dd75ced4e
issue #520: add AIX auth failure string to su.
tests: move affinity_test to Ansible tests.
core: cProfile is not available in 2.4.
issue #505: docs: add new detail graph for one scenario.
docs: update and re-record profile graphs in docs; closes#505
service: fix PushFileService exception
tests: pad out localhost-*
service: start pool shutdown on broker shutdown.
master: .encode() needed for Py3.
ansible: stash PID files in CWD if requested for debugging.
issue #508: master: minify_safe_re must be bytes for Py3.
bench: tidy up and cpu-pin some more files.
tests: add localhost-x100
ansible: double the default pool size.
ansible: raise error with correct exception type.
issue #508: master: minify all Mitogen/ansible_mitogen sources.
parent: PartialZlib docstrings.
ansible: hacky parser to alow bools to be specified on command line
parent: pre-cache bootstrap if possible.
docs: update Changelog.
ansible: add mitogen_ssh_compression variable.
service: PushFileService never recorded a file as sent.
parent: synchronize get_core_source()
service: use correct profile aggregation name.
SyntaxError.
ansible: don't pin controller if <4 cores.
tests: make soak testing work reliably on vanilla.
docs: changelog tidyups.
ansible: document and make affinity stuff portable to non-Linux
ansible: fix affinity.py test failure on 2 cores.
ansible: preheat PluginLoader caches before fork.
tests: make mitogen_shutdown_all be run_once by default.
docs: update Changelog.
ansible: use Poller for WorkerProcess; closes#491.
ansible: new multiplexer/workers configuration
docs: update Changelog.
docs: update Changelog.
ansible: pin connection multiplexer to a single core
utils: pad out reset_affinity() and integrate with detach_popen()
utils: import reset_affinity() function.
master: set Router.profiling if MITOGEN_PROFILING variable present.
parent: don't kill children when profiling is active.
ansible: hook strategy and worker processes into profiler
profiler: import from linear2 branch
core: tidy up existing profiling code and support MITOGEN_PROFILE_FMT
issue #260: redundant if statement.
ansible: ensure MuxProcess MITOGEN_PROFILING results reach disk.
ansible/bench: make end= configurable.
master: cache sent/forwarded module names
Aggregate code coverage data across tox all runs
Allow independant control of coverage erase and reporting
Fix incorrect attempt to use coverage
docs: update Changelog; closes#527.
issue #527: catch new-style module tracebacks like vanilla.
Fix DeprecationWarning in mitogen.utils.run_with_router()
Generate coverage report even if some tests fail
ci: fix incorrect partition/rpartition from 8a4caea84f
issue #260: hide force-disconnect messages.
issue #498: fix shutdown crash
issue #260: avoid start_transmit()/on_transmit()/stop_transmit()
core: ensure broker profiling output reaches disk
master: keep is_stdlib_path() result as negative cache entry
ci: Allow DISTROS="debian*32" variable, and KEEP=1
Use develop mode in tox
issue #429: fix sudo regression.
misc: rename to scripts. tab completion!!
core: Latch._wake improvements
issue #498: prevent crash on double 'disconnect' signal.
issue #413: don't double-propagate DEL_ROUTE to parent.
issue #498: wrap Router dict mutations in a lock
issue #429: enable en_US locale to unbreak debops test.
issue #499: fix another mind-numbingly stupid vanilla inconsistency
issue #497: do our best to cope with crap upstream code
ssh: fix test to match updated log format.
issue #429: update Changelog.
issue #429: update Changelog.
issue #429: teach sudo about every know i18n password string.
issue #429: install i18n-related bits in test images.
ssh: tidy up logs and stream names.
tests: ensure file is closed in connection_test.
gcloud: small updates
tests: give ansible/gcloud/ its own requirements file.
issue #499: another totally moronic implementation difference
issue #499: disable new test on vanilla.
...
* origin/master: (661 commits)
Bump version for release.
docs: update Changelog; closes#481
issue #481: core: preserve stderr TTY FD if one is present.
issue #481: avoid crash if disconnect occurs during forward_modules()
Add a few more important modules to preamble_size.py.
.ci: add verbiage for run_batches() too.
.ci: add README.md.
docs: update thanks
docs: lose "approaching stability" language, we're pretty good now
docs: fix changelog syntax/order/"20KB"
tests: add new compression parameter to mitogen_get_stack results
tests: disable affinity_test on Travis :/
issue #508: fix responder stats test due to new smaller parent.py.
issue #508: tests: skip minify_test Py2.4/2.5 for profiler.py.
tests: fix fallout from 36fb318adf5c56e729296c3efce84f4dd75ced4e
issue #520: add AIX auth failure string to su.
tests: move affinity_test to Ansible tests.
core: cProfile is not available in 2.4.
issue #505: docs: add new detail graph for one scenario.
docs: update and re-record profile graphs in docs; closes#505
service: fix PushFileService exception
tests: pad out localhost-*
service: start pool shutdown on broker shutdown.
master: .encode() needed for Py3.
ansible: stash PID files in CWD if requested for debugging.
issue #508: master: minify_safe_re must be bytes for Py3.
bench: tidy up and cpu-pin some more files.
tests: add localhost-x100
ansible: double the default pool size.
ansible: raise error with correct exception type.
issue #508: master: minify all Mitogen/ansible_mitogen sources.
parent: PartialZlib docstrings.
ansible: hacky parser to alow bools to be specified on command line
parent: pre-cache bootstrap if possible.
docs: update Changelog.
ansible: add mitogen_ssh_compression variable.
service: PushFileService never recorded a file as sent.
parent: synchronize get_core_source()
service: use correct profile aggregation name.
SyntaxError.
ansible: don't pin controller if <4 cores.
tests: make soak testing work reliably on vanilla.
docs: changelog tidyups.
ansible: document and make affinity stuff portable to non-Linux
ansible: fix affinity.py test failure on 2 cores.
ansible: preheat PluginLoader caches before fork.
tests: make mitogen_shutdown_all be run_once by default.
docs: update Changelog.
ansible: use Poller for WorkerProcess; closes#491.
ansible: new multiplexer/workers configuration
docs: update Changelog.
docs: update Changelog.
ansible: pin connection multiplexer to a single core
utils: pad out reset_affinity() and integrate with detach_popen()
utils: import reset_affinity() function.
master: set Router.profiling if MITOGEN_PROFILING variable present.
parent: don't kill children when profiling is active.
ansible: hook strategy and worker processes into profiler
profiler: import from linear2 branch
core: tidy up existing profiling code and support MITOGEN_PROFILE_FMT
issue #260: redundant if statement.
ansible: ensure MuxProcess MITOGEN_PROFILING results reach disk.
ansible/bench: make end= configurable.
master: cache sent/forwarded module names
Aggregate code coverage data across tox all runs
Allow independant control of coverage erase and reporting
Fix incorrect attempt to use coverage
docs: update Changelog; closes#527.
issue #527: catch new-style module tracebacks like vanilla.
Fix DeprecationWarning in mitogen.utils.run_with_router()
Generate coverage report even if some tests fail
ci: fix incorrect partition/rpartition from 8a4caea84f
issue #260: hide force-disconnect messages.
issue #498: fix shutdown crash
issue #260: avoid start_transmit()/on_transmit()/stop_transmit()
core: ensure broker profiling output reaches disk
master: keep is_stdlib_path() result as negative cache entry
ci: Allow DISTROS="debian*32" variable, and KEEP=1
Use develop mode in tox
issue #429: fix sudo regression.
misc: rename to scripts. tab completion!!
core: Latch._wake improvements
issue #498: prevent crash on double 'disconnect' signal.
issue #413: don't double-propagate DEL_ROUTE to parent.
issue #498: wrap Router dict mutations in a lock
issue #429: enable en_US locale to unbreak debops test.
issue #499: fix another mind-numbingly stupid vanilla inconsistency
issue #497: do our best to cope with crap upstream code
ssh: fix test to match updated log format.
issue #429: update Changelog.
issue #429: update Changelog.
issue #429: teach sudo about every know i18n password string.
issue #429: install i18n-related bits in test images.
ssh: tidy up logs and stream names.
tests: ensure file is closed in connection_test.
gcloud: small updates
tests: give ansible/gcloud/ its own requirements file.
issue #499: another totally moronic implementation difference
issue #499: disable new test on vanilla.
docs: update Changelog; closes#499.
...
@ -18,10 +18,6 @@ To avail of fixes in an unreleased version, please download a ZIP file
`directly from GitHub <https://github.com/mitogen-hq/mitogen/>`_.
In progress (unreleased)
------------------------
v0.3.29 (2025-09-18)
--------------------
@ -386,7 +382,7 @@ v0.3.1 (unreleased)
* :gh:issue:`878` Kubectl connector fixed with Ansible 2.10 and above
v0.3.0 (2021-11-24)
v0.3.0 (2021-10-28)
-------------------
This release separates itself from the v0.2.X releases. Ansible's API changed too much to support backwards compatibility so from now on, v0.2.X releases will be for Ansible < 2.10 and v0.3.X will be for Ansible 2.10+.
@ -399,7 +395,7 @@ This release separates itself from the v0.2.X releases. Ansible's API changed to