Skip to content

Commit

Permalink
pythongh-102950: Adjust tarfile filter tests for systems that don't s…
Browse files Browse the repository at this point in the history
…et the sticky bit (pythonGH-103831)

Also remove expilcit `type=tarfile.DIRTYPE`, the slash at the end is
enough.
  • Loading branch information
encukou committed Apr 25, 2023
1 parent 8330580 commit c8c3956
Showing 1 changed file with 25 additions and 5 deletions.
30 changes: 25 additions & 5 deletions Lib/test/test_tarfile.py
Expand Up @@ -3635,23 +3635,43 @@ def test_modes(self):
arc.add('exec_group_other', mode='?rw-rwxrwx')
arc.add('read_group_only', mode='?---r-----')
arc.add('no_bits', mode='?---------')
arc.add('dir/', mode='?---rwsrwt', type=tarfile.DIRTYPE)
arc.add('dir/', mode='?---rwsrwt')

# On some systems, setting the sticky bit is a no-op.
# Check if that's the case.
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)

os.mkdir(tmp_filename)
os.chmod(tmp_filename, os.stat(tmp_filename).st_mode | stat.S_ISVTX)
have_sticky_dirs = (os.stat(tmp_filename).st_mode & stat.S_ISVTX)
os.rmdir(tmp_filename)

with self.check_context(arc.open(), 'fully_trusted'):
self.expect_file('all_bits', mode='?rwsrwsrwt')
if have_sticky_files:
self.expect_file('all_bits', mode='?rwsrwsrwt')
else:
self.expect_file('all_bits', mode='?rwsrwsrwx')
self.expect_file('perm_bits', mode='?rwxrwxrwx')
self.expect_file('exec_group_other', mode='?rw-rwxrwx')
self.expect_file('read_group_only', mode='?---r-----')
self.expect_file('no_bits', mode='?---------')
self.expect_file('dir', type=tarfile.DIRTYPE, mode='?---rwsrwt')
if have_sticky_dirs:
self.expect_file('dir/', mode='?---rwsrwt')
else:
self.expect_file('dir/', mode='?---rwsrwx')

with self.check_context(arc.open(), 'tar'):
self.expect_file('all_bits', mode='?rwxr-xr-x')
self.expect_file('perm_bits', mode='?rwxr-xr-x')
self.expect_file('exec_group_other', mode='?rw-r-xr-x')
self.expect_file('read_group_only', mode='?---r-----')
self.expect_file('no_bits', mode='?---------')
self.expect_file('dir/', type=tarfile.DIRTYPE, mode='?---r-xr-x')
self.expect_file('dir/', mode='?---r-xr-x')

with self.check_context(arc.open(), 'data'):
normal_dir_mode = stat.filemode(stat.S_IMODE(
Expand All @@ -3661,7 +3681,7 @@ def test_modes(self):
self.expect_file('exec_group_other', mode='?rw-r--r--')
self.expect_file('read_group_only', mode='?rw-r-----')
self.expect_file('no_bits', mode='?rw-------')
self.expect_file('dir/', type=tarfile.DIRTYPE, mode=normal_dir_mode)
self.expect_file('dir/', mode=normal_dir_mode)

def test_pipe(self):
# Test handling of a special file
Expand Down

0 comments on commit c8c3956

Please sign in to comment.