Call PyImport_AppendInittab after pre-initialization.

Also remove redundant PyConfig settings.
This commit is contained in:
Todd C. Miller
2023-07-19 09:13:23 -06:00
parent da60384ad8
commit cc939297a1

View File

@@ -366,21 +366,28 @@ _python_plugin_register_plugin_in_py_ctx(void)
debug_decl(_python_plugin_register_plugin_in_py_ctx, PYTHON_DEBUG_PLUGIN_LOAD); debug_decl(_python_plugin_register_plugin_in_py_ctx, PYTHON_DEBUG_PLUGIN_LOAD);
if (!Py_IsInitialized()) { if (!Py_IsInitialized()) {
if (_save_inittab() != SUDO_RC_OK)
debug_return_int(SUDO_RC_ERROR);
PyImport_AppendInittab("sudo", sudo_module_init);
// Disable environment variables effecting the python interpreter // Disable environment variables effecting the python interpreter
// This is important since we are running code here as root, the // This is important since we are running code here as root, the
// user should not be able to alter what is running any how. // user should not be able to alter what is running any how.
#if (PY_MAJOR_VERSION > 3) || (PY_MINOR_VERSION >= 8) #if (PY_MAJOR_VERSION > 3) || (PY_MINOR_VERSION >= 8)
PyStatus status; PyStatus status;
PyPreConfig preconfig;
PyConfig config; PyConfig config;
PyPreConfig_InitPythonConfig(&preconfig);
preconfig.isolated = 1;
preconfig.use_environment = 0;
status = Py_PreInitialize(&preconfig);
if (PyStatus_Exception(status))
debug_return_int(SUDO_RC_ERROR);
/* Inittab changes happen after pre-init but before init. */
if (_save_inittab() != SUDO_RC_OK)
debug_return_int(SUDO_RC_ERROR);
PyImport_AppendInittab("sudo", sudo_module_init);
PyConfig_InitPythonConfig(&config); PyConfig_InitPythonConfig(&config);
config.isolated = 1; config.isolated = 1;
config.use_environment = 0;
config.user_site_directory = 0;
status = Py_InitializeFromConfig(&config); status = Py_InitializeFromConfig(&config);
PyConfig_Clear(&config); PyConfig_Clear(&config);
if (PyStatus_Exception(status)) if (PyStatus_Exception(status))
@@ -390,6 +397,9 @@ _python_plugin_register_plugin_in_py_ctx(void)
Py_IsolatedFlag = 1; Py_IsolatedFlag = 1;
Py_NoUserSiteDirectory = 1; Py_NoUserSiteDirectory = 1;
if (_save_inittab() != SUDO_RC_OK)
debug_return_int(SUDO_RC_ERROR);
PyImport_AppendInittab("sudo", sudo_module_init);
Py_InitializeEx(0); Py_InitializeEx(0);
#endif #endif
py_ctx.py_main_interpreter = PyThreadState_Get(); py_ctx.py_main_interpreter = PyThreadState_Get();