diff options
author | Victor Stinner <vstinner@python.org> | 2023-10-02 15:16:25 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-02 15:16:25 (GMT) |
commit | 84ef145d854832f8521ea38468071ad210b6365c (patch) | |
tree | d2c04271a4cc760959fed61da5d59b0bf3332e8e | |
parent | 05b139b599bbe2125bd81eb7ac3e55743c01d974 (diff) | |
download | cpython-84ef145d854832f8521ea38468071ad210b6365c.zip cpython-84ef145d854832f8521ea38468071ad210b6365c.tar.gz cpython-84ef145d854832f8521ea38468071ad210b6365c.tar.bz2 |
[3.12] gh-108948: Skip test_tarfile.test_modes() on EFTYPE error (#109697) (#109698)
gh-108948: Skip test_tarfile.test_modes() on EFTYPE error (#109697)
On FreeBSD, regular users cannot set the sticky bit. Skip the test if
chmod() fails with EFTYPE error.
(cherry picked from commit 26e06ad617bb416201c769fea91cd33d544c6a1c)
-rw-r--r-- | Lib/test/test_tarfile.py | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/Lib/test/test_tarfile.py b/Lib/test/test_tarfile.py index 5d9714e..c5fc76d 100644 --- a/Lib/test/test_tarfile.py +++ b/Lib/test/test_tarfile.py @@ -1,3 +1,4 @@ +import errno import sys import os import io @@ -3798,9 +3799,21 @@ class TestExtractionFilters(unittest.TestCase): tmp_filename = os.path.join(TEMPDIR, "tmp.file") with open(tmp_filename, 'w'): pass - os.chmod(tmp_filename, os.stat(tmp_filename).st_mode | stat.S_ISVTX) - have_sticky_files = (os.stat(tmp_filename).st_mode & stat.S_ISVTX) - os.unlink(tmp_filename) + try: + try: + os.chmod(tmp_filename, + os.stat(tmp_filename).st_mode | stat.S_ISVTX) + except OSError as exc: + if exc.errno == getattr(errno, "EFTYPE", 0): + # gh-108948: On FreeBSD, regular users cannot set + # the sticky bit. + self.skipTest("chmod() failed with EFTYPE: " + "regular users cannot set sticky bit") + else: + raise + have_sticky_files = (os.stat(tmp_filename).st_mode & stat.S_ISVTX) + finally: + os.unlink(tmp_filename) os.mkdir(tmp_filename) os.chmod(tmp_filename, os.stat(tmp_filename).st_mode | stat.S_ISVTX) |