Skip to content

Commit 3a6d8e6

Browse files
authored
[3.11] gh-108948: Skip test_tarfile.test_modes() on EFTYPE error (#109697) (#109699)
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 26e06ad)
1 parent b3af888 commit 3a6d8e6

File tree

1 file changed

+16
-3
lines changed

1 file changed

+16
-3
lines changed

Lib/test/test_tarfile.py

+16-3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import errno
12
import sys
23
import os
34
import io
@@ -3723,9 +3724,21 @@ def test_modes(self):
37233724
tmp_filename = os.path.join(TEMPDIR, "tmp.file")
37243725
with open(tmp_filename, 'w'):
37253726
pass
3726-
os.chmod(tmp_filename, os.stat(tmp_filename).st_mode | stat.S_ISVTX)
3727-
have_sticky_files = (os.stat(tmp_filename).st_mode & stat.S_ISVTX)
3728-
os.unlink(tmp_filename)
3727+
try:
3728+
try:
3729+
os.chmod(tmp_filename,
3730+
os.stat(tmp_filename).st_mode | stat.S_ISVTX)
3731+
except OSError as exc:
3732+
if exc.errno == getattr(errno, "EFTYPE", 0):
3733+
# gh-108948: On FreeBSD, regular users cannot set
3734+
# the sticky bit.
3735+
self.skipTest("chmod() failed with EFTYPE: "
3736+
"regular users cannot set sticky bit")
3737+
else:
3738+
raise
3739+
have_sticky_files = (os.stat(tmp_filename).st_mode & stat.S_ISVTX)
3740+
finally:
3741+
os.unlink(tmp_filename)
37293742

37303743
os.mkdir(tmp_filename)
37313744
os.chmod(tmp_filename, os.stat(tmp_filename).st_mode | stat.S_ISVTX)

0 commit comments

Comments
 (0)