gh-102950: Adjust tarfile filter tests for systems that don't set the… · python/cpython@c8c3956 (original) (raw)

`@@ -3635,23 +3635,43 @@ def test_modes(self):

`

3635

3635

`arc.add('exec_group_other', mode='?rw-rwxrwx')

`

3636

3636

`arc.add('read_group_only', mode='?---r-----')

`

3637

3637

`arc.add('no_bits', mode='?---------')

`

3638

``

`-

arc.add('dir/', mode='?---rwsrwt', type=tarfile.DIRTYPE)

`

``

3638

`+

arc.add('dir/', mode='?---rwsrwt')

`

``

3639

+

``

3640

`+

On some systems, setting the sticky bit is a no-op.

`

``

3641

`+

Check if that's the case.

`

``

3642

`+

tmp_filename = os.path.join(TEMPDIR, "tmp.file")

`

``

3643

`+

with open(tmp_filename, 'w'):

`

``

3644

`+

pass

`

``

3645

`+

os.chmod(tmp_filename, os.stat(tmp_filename).st_mode | stat.S_ISVTX)

`

``

3646

`+

have_sticky_files = (os.stat(tmp_filename).st_mode & stat.S_ISVTX)

`

``

3647

`+

os.unlink(tmp_filename)

`

``

3648

+

``

3649

`+

os.mkdir(tmp_filename)

`

``

3650

`+

os.chmod(tmp_filename, os.stat(tmp_filename).st_mode | stat.S_ISVTX)

`

``

3651

`+

have_sticky_dirs = (os.stat(tmp_filename).st_mode & stat.S_ISVTX)

`

``

3652

`+

os.rmdir(tmp_filename)

`

3639

3653

``

3640

3654

`with self.check_context(arc.open(), 'fully_trusted'):

`

3641

``

`-

self.expect_file('all_bits', mode='?rwsrwsrwt')

`

``

3655

`+

if have_sticky_files:

`

``

3656

`+

self.expect_file('all_bits', mode='?rwsrwsrwt')

`

``

3657

`+

else:

`

``

3658

`+

self.expect_file('all_bits', mode='?rwsrwsrwx')

`

3642

3659

`self.expect_file('perm_bits', mode='?rwxrwxrwx')

`

3643

3660

`self.expect_file('exec_group_other', mode='?rw-rwxrwx')

`

3644

3661

`self.expect_file('read_group_only', mode='?---r-----')

`

3645

3662

`self.expect_file('no_bits', mode='?---------')

`

3646

``

`-

self.expect_file('dir', type=tarfile.DIRTYPE, mode='?---rwsrwt')

`

``

3663

`+

if have_sticky_dirs:

`

``

3664

`+

self.expect_file('dir/', mode='?---rwsrwt')

`

``

3665

`+

else:

`

``

3666

`+

self.expect_file('dir/', mode='?---rwsrwx')

`

3647

3667

``

3648

3668

`with self.check_context(arc.open(), 'tar'):

`

3649

3669

`self.expect_file('all_bits', mode='?rwxr-xr-x')

`

3650

3670

`self.expect_file('perm_bits', mode='?rwxr-xr-x')

`

3651

3671

`self.expect_file('exec_group_other', mode='?rw-r-xr-x')

`

3652

3672

`self.expect_file('read_group_only', mode='?---r-----')

`

3653

3673

`self.expect_file('no_bits', mode='?---------')

`

3654

``

`-

self.expect_file('dir/', type=tarfile.DIRTYPE, mode='?---r-xr-x')

`

``

3674

`+

self.expect_file('dir/', mode='?---r-xr-x')

`

3655

3675

``

3656

3676

`with self.check_context(arc.open(), 'data'):

`

3657

3677

`normal_dir_mode = stat.filemode(stat.S_IMODE(

`

`@@ -3661,7 +3681,7 @@ def test_modes(self):

`

3661

3681

`self.expect_file('exec_group_other', mode='?rw-r--r--')

`

3662

3682

`self.expect_file('read_group_only', mode='?rw-r-----')

`

3663

3683

`self.expect_file('no_bits', mode='?rw-------')

`

3664

``

`-

self.expect_file('dir/', type=tarfile.DIRTYPE, mode=normal_dir_mode)

`

``

3684

`+

self.expect_file('dir/', mode=normal_dir_mode)

`

3665

3685

``

3666

3686

`def test_pipe(self):

`

3667

3687

`# Test handling of a special file

`