[Python-checkins] [3.11] gh-84461: Fix Emscripten umask and permission issues (GH-94002) (GH-94006)
tiran
webhook-mailer at python.org
Sun Jun 19 14:18:38 EDT 2022
https://github.com/python/cpython/commit/10731849184a3101ed18683b0128d689f1671c3f
commit: 10731849184a3101ed18683b0128d689f1671c3f
branch: 3.11
author: Christian Heimes <christian at python.org>
committer: tiran <christian at python.org>
date: 2022-06-19T20:18:34+02:00
summary:
[3.11] gh-84461: Fix Emscripten umask and permission issues (GH-94002) (GH-94006)
Co-authored-by: Christian Heimes <christian at python.org>
files:
M Lib/test/libregrtest/main.py
M Lib/test/test_posix.py
M Lib/test/test_pydoc.py
M Tools/wasm/config.site-wasm32-emscripten
diff --git a/Lib/test/libregrtest/main.py b/Lib/test/libregrtest/main.py
index 85bf6e1d48e3a..cc8ba05d39ca7 100644
--- a/Lib/test/libregrtest/main.py
+++ b/Lib/test/libregrtest/main.py
@@ -600,6 +600,16 @@ def save_xml_result(self):
for s in ET.tostringlist(root):
f.write(s)
+ def fix_umask(self):
+ if support.is_emscripten:
+ # Emscripten has default umask 0o777, which breaks some tests.
+ # see https://github.com/emscripten-core/emscripten/issues/17269
+ old_mask = os.umask(0)
+ if old_mask == 0o777:
+ os.umask(0o027)
+ else:
+ os.umask(old_mask)
+
def set_temp_dir(self):
if self.ns.tempdir:
self.tmp_dir = self.ns.tempdir
@@ -660,6 +670,8 @@ def main(self, tests=None, **kwargs):
self.set_temp_dir()
+ self.fix_umask()
+
if self.ns.cleanup:
self.cleanup()
sys.exit(0)
diff --git a/Lib/test/test_posix.py b/Lib/test/test_posix.py
index 4130cdd0c022a..ae25ef55885dd 100644
--- a/Lib/test/test_posix.py
+++ b/Lib/test/test_posix.py
@@ -787,6 +787,7 @@ def check_stat(uid, gid):
check_stat(uid, gid)
@os_helper.skip_unless_working_chmod
+ @unittest.skipIf(support.is_emscripten, "getgid() is a stub")
def test_chown(self):
# raise an OSError if the file does not exist
os.unlink(os_helper.TESTFN)
@@ -798,6 +799,7 @@ def test_chown(self):
@os_helper.skip_unless_working_chmod
@unittest.skipUnless(hasattr(posix, 'fchown'), "test needs os.fchown()")
+ @unittest.skipIf(support.is_emscripten, "getgid() is a stub")
def test_fchown(self):
os.unlink(os_helper.TESTFN)
@@ -1356,6 +1358,7 @@ def test_chmod_dir_fd(self):
@unittest.skipUnless(hasattr(os, 'chown') and (os.chown in os.supports_dir_fd),
"test needs dir_fd support in os.chown()")
+ @unittest.skipIf(support.is_emscripten, "getgid() is a stub")
def test_chown_dir_fd(self):
with self.prepare_file() as (dir_fd, name, fullname):
posix.chown(name, os.getuid(), os.getgid(), dir_fd=dir_fd)
diff --git a/Lib/test/test_pydoc.py b/Lib/test/test_pydoc.py
index b705b7aee8136..89faf0d9141f9 100644
--- a/Lib/test/test_pydoc.py
+++ b/Lib/test/test_pydoc.py
@@ -934,6 +934,7 @@ def test_apropos_with_unreadable_dir(self):
self.assertEqual(err.getvalue(), '')
@os_helper.skip_unless_working_chmod
+ @unittest.skipIf(is_emscripten, "cannot remove x bit")
def test_apropos_empty_doc(self):
pkgdir = os.path.join(TESTFN, 'walkpkg')
os.mkdir(pkgdir)
diff --git a/Tools/wasm/config.site-wasm32-emscripten b/Tools/wasm/config.site-wasm32-emscripten
index 6420edcf54168..a31d60d05dd77 100644
--- a/Tools/wasm/config.site-wasm32-emscripten
+++ b/Tools/wasm/config.site-wasm32-emscripten
@@ -43,6 +43,13 @@ ac_cv_func_symlinkat=no
ac_cv_func_lchmod=no
ac_cv_func_lchown=no
+# geteuid / getegid are stubs and always return 0 (root). The stub breaks
+# code that assume effective user root has special permissions.
+ac_cv_func_geteuid=no
+ac_cv_func_getegid=no
+ac_cv_func_seteuid=no
+ac_cv_func_setegid=no
+
# Syscalls not implemented in emscripten
# [Errno 52] Function not implemented
ac_cv_func_preadv2=no
More information about the Python-checkins
mailing list