From 7ee24413f0945b7d582a33795cdfc7c59471cb69 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Mon, 7 Oct 2019 21:58:00 +0200 Subject: [PATCH] Don't install a preexec_fn by default ipautil.run() now only installs a preexec_fn when it is actually needed. This addresses a compatibility issue with mod_wsgi subinterpreters under Python 3.8. Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1759290 See: https://bugs.python.org/issue37951 Signed-off-by: Christian Heimes --- ipapython/ipautil.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/ipapython/ipautil.py b/ipapython/ipautil.py index d87b9e3c1..e047324d3 100644 --- a/ipapython/ipautil.py +++ b/ipapython/ipautil.py @@ -515,14 +515,18 @@ def run(args, stdin=None, raiseonerr=True, nolog=(), env=None, for group, gid in zip(suplementary_groups, suplementary_gids): logger.debug('suplementary_group=%s (GID %d)', group, gid) - def preexec_fn(): - if runas is not None: - os.setgroups(suplementary_gids) - os.setregid(pent.pw_gid, pent.pw_gid) - os.setreuid(pent.pw_uid, pent.pw_uid) - - if umask: - os.umask(umask) + if runas is not None or umask is not None: + # preexec function is not supported in WSGI environment + def preexec_fn(): + if runas is not None: + os.setgroups(suplementary_gids) + os.setregid(pent.pw_gid, pent.pw_gid) + os.setreuid(pent.pw_uid, pent.pw_uid) + + if umask is not None: + os.umask(umask) + else: + preexec_fn = None try: # pylint: disable=subprocess-popen-preexec-fn -- 2.20.1