[3.12] gh-121957: Emit audit events for python -i and python -m asyncio (GH-122117)

This commit is contained in:
Łukasz Langa 2024-07-22 13:41:23 +02:00 committed by GitHub
parent 6e9b3f79fe
commit c1e834dd78
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 22 additions and 1 deletions

View file

@ -56,8 +56,12 @@ Additionally, there are **low-level** APIs for
* :ref:`bridge <asyncio-futures>` callback-based libraries and code * :ref:`bridge <asyncio-futures>` callback-based libraries and code
with async/await syntax. with async/await syntax.
.. include:: ../includes/wasm-notavail.rst
.. _asyncio-cli: .. _asyncio-cli:
.. rubric:: asyncio REPL
You can experiment with an ``asyncio`` concurrent context in the REPL: You can experiment with an ``asyncio`` concurrent context in the REPL:
.. code-block:: pycon .. code-block:: pycon
@ -70,7 +74,10 @@ You can experiment with an ``asyncio`` concurrent context in the REPL:
>>> await asyncio.sleep(10, result='hello') >>> await asyncio.sleep(10, result='hello')
'hello' 'hello'
.. include:: ../includes/wasm-notavail.rst .. audit-event:: cpython.run_stdin "" ""
.. versionchanged:: 3.12.5 (also 3.11.10, 3.10.15, 3.9.20, and 3.8.20)
Emits audit events.
.. We use the "rubric" directive here to avoid creating .. We use the "rubric" directive here to avoid creating
the "Reference" subsection in the TOC. the "Reference" subsection in the TOC.

View file

@ -720,6 +720,11 @@ conflict.
This variable can also be modified by Python code using :data:`os.environ` This variable can also be modified by Python code using :data:`os.environ`
to force inspect mode on program termination. to force inspect mode on program termination.
.. audit-event:: cpython.run_stdin "" ""
.. versionchanged:: 3.12.5 (also 3.11.10, 3.10.15, 3.9.20, and 3.8.20)
Emits audit events.
.. envvar:: PYTHONUNBUFFERED .. envvar:: PYTHONUNBUFFERED

View file

@ -89,6 +89,8 @@ class REPLThread(threading.Thread):
if __name__ == '__main__': if __name__ == '__main__':
sys.audit("cpython.run_stdin")
loop = asyncio.new_event_loop() loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop) asyncio.set_event_loop(loop)

View file

@ -0,0 +1,3 @@
Fixed missing audit events around interactive use of Python, now also
properly firing for ``python -i``, as well as for ``python -m asyncio``. The
event in question is ``cpython.run_stdin``.

View file

@ -540,6 +540,10 @@ pymain_repl(PyConfig *config, int *exitcode)
return; return;
} }
if (PySys_Audit("cpython.run_stdin", NULL) < 0) {
return;
}
PyCompilerFlags cf = _PyCompilerFlags_INIT; PyCompilerFlags cf = _PyCompilerFlags_INIT;
int res = PyRun_AnyFileFlags(stdin, "<stdin>", &cf); int res = PyRun_AnyFileFlags(stdin, "<stdin>", &cf);
*exitcode = (res != 0); *exitcode = (res != 0);