[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 26e06ad617)
This commit is contained in:
Victor Stinner 2023-09-22 01:29:49 +02:00 committed by GitHub
parent b3af888342
commit 3a6d8e615f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 16 additions and 3 deletions

View File

@ -1,3 +1,4 @@
import errno
import sys
import os
import io
@ -3723,9 +3724,21 @@ def test_modes(self):
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)